<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Gerben van Loon</title><link>http://bloggingabout.net/blogs/gerben/default.aspx</link><description>Random thoughts on Microsoft Software Development and other related stuff</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>IBM WebSphere MQ WCF Channels comparison update</title><link>http://bloggingabout.net/blogs/gerben/archive/2011/08/16/ibm-websphere-mq-wcf-channels-comparison-update.aspx</link><pubDate>Tue, 16 Aug 2011 07:46:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:548041</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=548041</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2011/08/16/ibm-websphere-mq-wcf-channels-comparison-update.aspx#comments</comments><description>&lt;p&gt;Wrote a lot about the IBM WebSphere MQ WCF Channels in the past. Check out my &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/02/25/ibm-websphere-mq-wcf-channels.aspx"&gt;original post&lt;/a&gt; and an &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/12/20/ibm-websphere-mq-wcf-channels-updated.aspx"&gt;update on that one&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What changed in the meantime is that Microsoft added backout queue support to their channel in a &lt;a href="http://support.microsoft.com/kb/2459833/en-us"&gt;hotfix&lt;/a&gt;. My comparison table now looks like this:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;IBM&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;HIS2009&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;HIS2010&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Fire-and-forget (oneway) client&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Fire-and-forget (oneway) service&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Request-reply client&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Request-reply service&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Local transactions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Distributed transactions (DTC)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Client side transactions (DTC)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Backout queue support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Message format&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;- &lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;AppFabric support / IIS Hosting&lt;br /&gt;(WAS listener for IIS7) &lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Works with .NET 3.x&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Works with .NET 4.0&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;WMQ6 support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;WMQ7 support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Sample code&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Documentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Licensing&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;We&amp;#39;ll consider starting to use the HIS channel for services only.&amp;nbsp;Hosting services with the HIS channel can be interesting due to support for AppFabric which can save development and maintenance time. For client side we&amp;rsquo;ll probably stay on the IBM channel anyway due to the licensing costs of the Microsoft channel.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=548041" width="1" height="1"&gt;</description></item><item><title>Mobile app development overrated?</title><link>http://bloggingabout.net/blogs/gerben/archive/2011/08/01/mobile-app-development-useless-in-most-cases.aspx</link><pubDate>Mon, 01 Aug 2011 11:40:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:536377</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=536377</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2011/08/01/mobile-app-development-useless-in-most-cases.aspx#comments</comments><description>&lt;p&gt;Fowler did a nice sum-up of different approaches for cross platform mobile development: &lt;a href="http://martinfowler.com/bliki/CrossPlatformMobile.html"&gt;http://martinfowler.com/bliki/CrossPlatformMobile.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A little more structured&amp;nbsp; I see these six approaches for mobile development:&amp;nbsp;&lt;/p&gt;
&lt;table cellpadding="6" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="250"&gt;&lt;strong&gt;Approach&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Build UI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Build Libs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Dev platforms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;UI Control experience&lt;/strong&gt;&lt;/td&gt;
&lt;td width="250"&gt;&lt;strong&gt;User Experience&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="250"&gt;&lt;strong&gt;Cross-platform toolkit with native components from each platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Native. But lowest common denominator of functionality and UI controls from platforms available&lt;/td&gt;
&lt;td width="250"&gt;No native experience form device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="250"&gt;&lt;strong&gt;Cross-platform toolkit with emulation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Emulated. Differences in behavior per platform. Less performance / responsiveness&lt;/td&gt;
&lt;td width="250"&gt;No native experience form device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="250"&gt;&lt;strong&gt;Cross-platform toolkit only for libraries&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple x&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;Multiple&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td width="250"&gt;Native experience form device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="250"&gt;
&lt;p&gt;&lt;strong&gt;Cross-platform toolkit but building &lt;/strong&gt;&lt;strong&gt;seperate apps for each platform&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;Multiple x&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td width="250"&gt;Native experience form device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="250"&gt;&lt;strong&gt;Mobile web apps instead of mobile apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1x&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td width="150"&gt;Web instead of device&lt;/td&gt;
&lt;td width="250"&gt;No native experience form device. No interaction with mobile hardware like GPS, Camera, etc. No offline usage possible&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;My conclusion can only be that building apps that work on all platforms&amp;nbsp;today&amp;nbsp;is quite hard. &lt;/p&gt;
&lt;p&gt;But everybody wants apps these days. Why? I don&amp;#39;t know, probably because it sounds cool.&lt;/p&gt;
&lt;p&gt;My advice: if you don&amp;#39;t need to interact with hardware from the device or need offline usage just keep doing web apps. Nothing wrong with that! In fact they&amp;#39;re even easier to build. Or am I missing a point?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=536377" width="1" height="1"&gt;</description></item><item><title>Duet Enterprise - What is it really?</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/12/30/duet-enterprise-what-is-it-really.aspx</link><pubDate>Thu, 30 Dec 2010 12:04:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:484499</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=484499</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/12/30/duet-enterprise-what-is-it-really.aspx#comments</comments><description>&lt;p&gt;Update: some changes to my original post. Thanks to &lt;a href="http://williamvanstrien.blogspot.com"&gt;William van Strien &lt;/a&gt;for pointing extra things out that I missed.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve been participating in the Rapid Deployment Program (RDP) and Duet Enterprise (DuetE) &lt;a href="http://blogs.technet.com/b/duetenterprise/archive/2010/12/01/duet-enterprise-general-availability-ga-update.aspx"&gt;seems to be GA&lt;/a&gt; so I can talk about it a bit more.&lt;/p&gt;
&lt;p&gt;First of all there is loads of marketing stuff surrounding DuetE which makes it hard to really nail down what it is. This is logical because the market of companies who do have some SAP back office systems and SharePoint for front ends is pretty large. So apparently SAP and MS put some money in marketing DuetE. The website and standard presentations are full with terms like &amp;ldquo;Meet changing business needs, manage costs, boost productivity, Flexible, Rapid, Focus, Accelerate, etc.&amp;rdquo; so it seems a product of which every manager think he or she needs it. &lt;/p&gt;
&lt;p&gt;But what is it really?&lt;/p&gt;
&lt;p&gt;Well it&amp;rsquo;s three fold. The three parts overview is given by this picture which comes from &lt;a href="http://www.sapevents.edgesuite.net/TechEd/TechEd_Vegas2010/Collateral/CD109.pdf"&gt;this presentation&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gerben/7142.DuetESummary.png"&gt;&lt;img height="330" width="536" src="http://bloggingabout.net/resized-image.ashx/__size/800x0/__key/CommunityServer.Blogs.Components.WeblogFiles/gerben/7142.DuetESummary.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll take the view from the SharePoint side since I&amp;#39;m not too familiar with SAP software development. Although&amp;nbsp;note that&amp;nbsp;the center of gravity for DuetE is on the SAP side. So what is it really for SharePoint for these three parts? &lt;/p&gt;
&lt;p&gt;Ready-to-use Capabilities:&amp;nbsp;SharePoint web parts delivered by DuetE to enable these ready-to-use capabilities. Good stuff because now you don&amp;rsquo;t need to build this yourself anymore. The web parts are mainly around use for collaboration / internal SharePoint websites. Besides the webparts DuetE also ships extra plumbing to get the SAP reporting functionality working in SharePoint and a profile sync mechanism to get SAP HR data to SharePoint.&lt;/p&gt;
&lt;p&gt;Tools and Business Content: Just some SharePoint site templates for some SAP objects. Also mainly around use for internal collaboration sites.&lt;/p&gt;
&lt;p&gt;Foundation: Provides a SAP Role sync provider to get SAP roles to work with SharePoint. Besides that all relying on SharePoint BCS here. DuetE just adds Single Sign On (SSO) and user mapping to SAP for you. Pretty nice, you don&amp;rsquo;t want to build this yourself. Could also be used for external facing SharePoint websites. According to the product team you can&amp;rsquo;t use this foundation without BCS. So disadvantage is that DuetE inherently suffers from the &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/12/30/when-to-use-sharepoint-2010-business-connectivity-services-bcs.aspx"&gt;BCS minuses that I wrote about earlier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;DuetE on the SharePoint side gives you some ready-to-use capabilities (webparts + extra plumbing), site templates and can handle security stuff like roles and SSO&amp;nbsp;to SAP for you. That&amp;acute;s it!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=484499" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/Duet+Enterprise/default.aspx">Duet Enterprise</category></item><item><title>When to use SharePoint 2010 Business Connectivity Services (BCS)</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/12/30/when-to-use-sharepoint-2010-business-connectivity-services-bcs.aspx</link><pubDate>Thu, 30 Dec 2010 11:13:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:484496</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=484496</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/12/30/when-to-use-sharepoint-2010-business-connectivity-services-bcs.aspx#comments</comments><description>&lt;p&gt;After viewing the usual conference sessions I was pretty enthusiastic about the possibilities of BCS. Seems to be nice at first, but when starting to design something real in the field I was thrown back to reality. BCS does give &amp;ldquo;free&amp;rdquo; things on your external data without too much coding. But there are some serious downsides like the one I described &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/12/30/sharepoint-2010-business-connectivity-services-bcs-complex-and-custom-types-not-properly-supported.aspx"&gt;before&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My current plusses en minuses lists for making decisions about when to use BCS usage in solutions is:&lt;/p&gt;
&lt;p&gt;+ Simple UI with SharePoint styling on your data without coding&lt;br /&gt;+ Offline support via SharePoint workspaces&lt;br /&gt;+ Single Sign On possibilities&lt;br /&gt;+ Includes your data in search&lt;br /&gt;+ MS office integration&lt;br /&gt;+ The external data can be accessed by sandbox solutions&lt;br /&gt;+ Out of the box throtling posibilities&lt;br /&gt;- BCS directly calls into the external system, no caching. Is the external system fast enough to support your users? Or will it slow down your SharePoint site?&lt;br /&gt;- No transaction support&lt;br /&gt;- No bulk processing?&lt;br /&gt;- Complex and custom types not properly supported&lt;br /&gt;- Strict requirements on the WSDL/Type schema of the external system. Will almost never work in the real world unless you can control the schema. No complex types allowed.&lt;br /&gt;- External Lists aren&amp;rsquo;t accessible via the SharePoint REST interface&lt;br /&gt;- Very limited control over WCF configuration settings. Or only in very bad ways &lt;a href="http://blogs.technet.com/b/meamcs/archive/2010/12/23/configuring-wcf-connection-timeout-for-bcs.aspx"&gt;like&amp;nbsp;for example timeout&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hope it helps you to decide if BCS is the right solution. Let me know&amp;nbsp;if I missed some plusses&amp;nbsp;or minuses.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=484496" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>SharePoint 2010 Business Connectivity Services (BCS) - Complex and custom types not properly supported</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/12/30/sharepoint-2010-business-connectivity-services-bcs-complex-and-custom-types-not-properly-supported.aspx</link><pubDate>Thu, 30 Dec 2010 10:41:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:484495</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=484495</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/12/30/sharepoint-2010-business-connectivity-services-bcs-complex-and-custom-types-not-properly-supported.aspx#comments</comments><description>&lt;p&gt;This&amp;nbsp;one is&amp;nbsp;annoying because data is almost never flat. Besides the&amp;nbsp;limitation on complex and custom types there are some more field limitations, check them out &lt;a href="http://blogs.msdn.com/b/bcs/archive/2010/02/19/overview-of-bcs-advanced-code-based-solutions.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is an &lt;a href="http://blogs.msdn.com/b/bcs/archive/2010/02/11/working-with-complex-data-types-in-business-connectivity-services.aspx"&gt;article&lt;/a&gt; available about how complex types are supported. But I don&amp;#39;t like the options outlined there.&lt;/p&gt;
&lt;p&gt;You have to work either via the Lists API or the lower-level APIs of the BDC OM. Seems to be nice at first but the BDC OM API&amp;rsquo;s are &lt;a href="http://msdn.microsoft.com/en-us/library/ff464415.aspx"&gt;really low level&lt;/a&gt; without any strong typing on your data available. The Lists API seems to be a better option since it now supports strong typing via SPMetal. But unfortunately SPMetal doesn&amp;rsquo;t work on external lists at the moment. So both APIs currently aren&amp;rsquo;t viable solutions for serious enterprise development, working with them feels like going back in time.&lt;/p&gt;
&lt;p&gt;You can do some workarounds to flatten your types out. You could add an extra service layer especially for SharePoint or a BCS .NET Connectivity assembly. This all adds quite some extra work while normally when you build an &amp;ldquo;advanced custom code&amp;rdquo; solution type you &lt;strong&gt;do&lt;/strong&gt; want to work with complex strongly typed data in your code. You &lt;strong&gt;don&amp;#39;t&lt;/strong&gt; have a need for flat data from that standpoint.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fabiangwilliams.wordpress.com/2010/01/03/how-to-using-spmetal-utility-in-sharepoint-2010-to-presumably-manipulate-data-on-a-bcs-external-list/"&gt;Another creative workaround&lt;/a&gt; is to create an extra normal SharePoint list and to use lookups in that one to your external lists. In that way strongly typing via SPMetal is supported again. Although this only works read only.&lt;/p&gt;
&lt;p&gt;The BCS team once outlined the&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/bcs/archive/2009/11/12/types-of-solutions.aspx"&gt;types of solutions&lt;/a&gt; that you can do with BCS. My current conclusion for BCS usage is to fully stay out of the advanced solution types and only use BCS only for the simple and intermediate solution types if that fits. Unless you badly need a feature that BCS gives you above custom coding.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=484495" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>IBM WMQ WCF Transport channel issues</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/12/20/ibm-wmq-wcf-transport-channel-issues.aspx</link><pubDate>Mon, 20 Dec 2010 14:51:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:484425</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=484425</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/12/20/ibm-wmq-wcf-transport-channel-issues.aspx#comments</comments><description>&lt;p&gt;There are some known nasty issues that my colleagues discovered while using the IBM WMQ WCF Transport channel. These where discovered with client version 7.0.1.3.&lt;/p&gt;
&lt;p&gt;The service will hit the faulted state and will not pick up further messages when:&lt;/p&gt;
&lt;p&gt;- A wrong, empty or no soap action is in the message&lt;br /&gt;- The codepage is different then UTF-8&lt;br /&gt;- The quemanager is reset or the (network) connection&amp;nbsp;to the queue manager is (temporary) lost&lt;/p&gt;
&lt;p&gt;Another one is that the service will throw &amp;quot;This buffer cannot be returned to the buffer manager because it is the wrong size&amp;quot; when the MQ message format (MQ header) is filled with MQSTR.&lt;/p&gt;
&lt;p&gt;Reported all these issues to IBM. Hope they will resolve them (very) soon.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=484425" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WMQ/default.aspx">WMQ</category></item><item><title>IBM WebSphere MQ WCF Channels updated</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/12/20/ibm-websphere-mq-wcf-channels-updated.aspx</link><pubDate>Mon, 20 Dec 2010 13:58:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:484421</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=484421</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/12/20/ibm-websphere-mq-wcf-channels-updated.aspx#comments</comments><description>&lt;p&gt;Some updates to &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/02/25/ibm-websphere-mq-wcf-channels.aspx"&gt;my original post&lt;/a&gt; since Microsoft Host Integration Server 2010 is released. My comparison now looks like this: &lt;/p&gt;
&lt;p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;IBM&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;HIS2009&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;HIS2010&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Fire-and-forget (oneway) client&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Fire-and-forget (oneway) service&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Request-reply client&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Request-reply service&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Local transactions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Distributed transactions (DTC)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Client side transactions (DTC)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Backout queue support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Message format&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;- &lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;AppFabric support / IIS Hosting&lt;br /&gt;(WAS listener for IIS7) &lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Works with .NET 3.x&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Works with .NET 4.0&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;WMQ6 support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;WMQ7 support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Sample code&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Documentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="211" valign="top"&gt;
&lt;p&gt;Licensing&lt;/p&gt;
&lt;/td&gt;
&lt;td width="60" valign="top"&gt;
&lt;p align="center"&gt;+&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p align="center"&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;So what has changed in the meanwhile with HIS2010 since HIS2009? &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Request-reply: Microsoft added request reply support to their channel for both the client and the service side. Not a big surprise that this was coming since when you paid attention you saw with Reflector that already some bits and pieces where available in the HIS2009 one. Request reply is available in a separate binding. Unfortunately the Microsoft implementation also suffers from the&lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/07/21/ibm-wmq-wcf-transport-channel-tips-and-tricks.aspx"&gt; #2 Oneway calls over WMQ can still block&lt;/a&gt; issue. Hope they resolve that soon. &lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Local transaction support through the WCF 4 ReceiveContext feature. Means you don&amp;#39;t always need DTC anymore when local transactions are sufficient.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;AppFabric support: HIS2010 added an&amp;nbsp; IIS7 WAS process listener for the WebSphere MQ (WMQ) protocol. This opens up AppFabric integration with WMQ. This means that you can now host WMQ services in IIS7 with the AppFabric dashboard functionality. No more custom build windows services!&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Support for AppFabric and the WCF 4 ReceiveContext feature also means the HIS2010 channel now only works with .NET 4.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Documentation mains pretty poor, haven&amp;#39;t found too much info.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Licensing unfortunately still means that you have to license via BizTalk. &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/02/25/ibm-websphere-mq-wcf-channels.aspx"&gt;See my original post for details&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Still no backout queue support: this in fact means that while transaction support (local and distributed) seems to be nice but is pretty useless. You always hit a poison message that goes on forever when a transaction fails. Normally you want these messages to go to a defined backout queue after n times tried.&lt;/li&gt;
&lt;br /&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;We&amp;rsquo;re still staying on the IBM channel for now. Maybe if the HIS team adds backout support to a future version we&amp;rsquo;ll consider switching for services. Services become more interesting in the HIS channel due to support for AppFabric which can save development and maintenance time. For client side we&amp;rsquo;ll probably stay on the IBM channel anyway due to the licensing costs of the Microsoft channel.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=484421" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WMQ/default.aspx">WMQ</category></item><item><title>IBM WMQ WCF Transport channel tips and tricks</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/07/21/ibm-wmq-wcf-transport-channel-tips-and-tricks.aspx</link><pubDate>Wed, 21 Jul 2010 08:24:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483740</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483740</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/07/21/ibm-wmq-wcf-transport-channel-tips-and-tricks.aspx#comments</comments><description>&lt;p&gt;Working with this transport channel now for a while, and discovered some interesting things which I&amp;rsquo;d like to share. With the transport channel I mean the &amp;ldquo;IBM.XMS.WCF.SoapJmsIbmTransportChannel&amp;rdquo; which you can find in the IBM.XMS.WCF assembly after installing WMQ 7 server or client. I&amp;rsquo;m currently using the 7.0.1.0 version.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#1 Skip SOAP/JMS over WMQ in a oneway service provider&lt;/strong&gt;&lt;br /&gt;The transport channel seemed to be tied to SOAP/JMS over WMQ. Although I discovered that you can skip this when you build a service provider.&lt;/p&gt;
&lt;p&gt;You can set the WCF service AddressFilterMode to any: [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]. If you do this then the service can just read plain text encoded SOAP envelopes without JMS and MQHRF2 stuff. But when doing request-reply then the replies that are send back by the service will again be in the SOAP/JMS format.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#2 Oneway calls over WMQ can still block&lt;/strong&gt;&lt;br /&gt;This one is interesting: WMQ is an asynchronous transport but WCF oneway calls can still block in the scenario described here. Although I hoped that IBM did this right I was already afraid that they didn&amp;rsquo;t since the WCF channel model is a bit quirky in this area. I blogged about this before for standard WCF bindings. The difference here is that even the operation call is blocking, not the proxy.Close().&lt;/p&gt;
&lt;p&gt;WMQ is an asynchronous transport but IBM does support request-reply in their WCF implementation by using the correlation identifier pattern: &lt;a href="http://www.eaipatterns.com/ramblings/09_correlation.html"&gt;http://www.eaipatterns.com/ramblings/09_correlation.html&lt;/a&gt;&lt;br /&gt;Microsoft doesn&amp;rsquo;t do this in their WCF MSMQ implementation. It only supports oneway, no request reply.&lt;/p&gt;
&lt;p&gt;WCF makes a difference between servicecontracts with oneway only operations and contracts that have oneway and request-reply operations mixed.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gerben/7127.onewayonly.png"&gt;&lt;img border="0" src="http://bloggingabout.net/resized-image.ashx/__size/800x0/__key/CommunityServer.Blogs.Components.WeblogFiles/gerben/7127.onewayonly.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Oneway only&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gerben/4606.rr.png"&gt;&lt;img border="0" src="http://bloggingabout.net/resized-image.ashx/__size/800x0/__key/CommunityServer.Blogs.Components.WeblogFiles/gerben/4606.rr.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Mixed&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So here is where it gets interesting: in WCF the choice of channel is just made once:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;ldquo;The proxy is a model of the service contract.&amp;nbsp; The choice of channel type is made once against the service contract rather than on a per-operation contract basis.&amp;nbsp; The channel shape with highest preference that supports all of the operations is selected.&amp;rdquo; (Nicholas Allen, Microsoft WCF Team)&lt;/p&gt;
&lt;p&gt;So here is where it goes wrong: The IBM WMQ WCF transport channel returns an IRequestChannel (request-reply) in the case of a mixed contract .This is fine for the request-reply operations but not for the oneway operations. This results in that the service consumer call on the oneway operation (like SayHello in the sample) &lt;strong&gt;blocks&lt;/strong&gt; until the service side responded. This can take a while when the service is busy, so this can cause timeouts on the service consumer side:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;WCFCH0310E: The timeout &amp;#39;00:01:00&amp;#39; was exceeeded while attempting to receive data from endpoint. The operation did not complete in the time allowed. Review the system status and configuration and increase the timeout if required.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;One of the reasons why I would pick the WMQ transport is that you have a disconnected service consumer and provider. But due to the implementation of the WCF transport and depending on how you contract look you might get different results. Microsoft doesn&amp;rsquo;t suffer from the problem with MSMQ and WCF since mixed contracts aren&amp;rsquo;t supported.&lt;/p&gt;
&lt;p&gt;The only work around that I&amp;rsquo;m aware of if to change the mixed contract to oneway only contracts. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#3 Assured delivery does not support multiple endpoints&lt;/strong&gt;&lt;br /&gt;You can only use the assured delivery mechanism when you only have a WMQ endpoint on your service. The behaviour will crash when you also for example add an HTTP endpoint. A HTTP endpoint for just WSDL publishing is no problem. Makes sense though because for the WMQ endpoint with assured delivery you could make some promises that you don&amp;rsquo;t loose messages. You can&amp;rsquo;t make these promises for an HTTP endpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#4 Sharing conversations&lt;/strong&gt;&lt;br /&gt;The &amp;ldquo;sharing conversations&amp;rdquo; setting from the WMQ connection channel trough which you connect may not be 0. In this case with channel I mean the thing on the WMQ server side to connect, has nothing to do with WCF channels. Otherwise you&amp;rsquo;ll hit some errors like &amp;ldquo;The specified value &amp;#39;IBM.XMS.Client.WMQ&amp;#39; is not allowed for &amp;#39;Expected ConnectionType = &amp;#39;.&amp;rdquo; or 2058 or 2059 reason codes.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483740" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WMQ/default.aspx">WMQ</category></item><item><title>Updated my IBM WebSphere MQ WCF post again</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/07/20/updated-my-ibm-websphere-mq-wcf-post-again.aspx</link><pubDate>Tue, 20 Jul 2010 13:51:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483737</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483737</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/07/20/updated-my-ibm-websphere-mq-wcf-post-again.aspx#comments</comments><description>&lt;p&gt;Updated the post again: &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/02/25/ibm-websphere-mq-wcf-channels.aspx"&gt;http://bloggingabout.net/blogs/gerben/archive/2010/02/25/ibm-websphere-mq-wcf-channels.aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now a clearer overview with a feature comparison.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483737" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WMQ/default.aspx">WMQ</category></item><item><title>So what happened to “Oslo”?</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/07/13/so-what-happened-to-oslo.aspx</link><pubDate>Tue, 13 Jul 2010 07:10:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483706</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483706</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/07/13/so-what-happened-to-oslo.aspx#comments</comments><description>&lt;p&gt;This question still pops up every now and then. You can find quite a clear explanation on MSDN: &lt;a href="http://msdn.microsoft.com/en-us/data/bb525059.aspx"&gt;http://msdn.microsoft.com/en-us/data/bb525059.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483706" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/Oslo/default.aspx">Oslo</category></item><item><title>Microsoft beta exams results published</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/07/01/microsoft-beta-exams-results-published.aspx</link><pubDate>Thu, 01 Jul 2010 15:18:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483672</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483672</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/07/01/microsoft-beta-exams-results-published.aspx#comments</comments><description>&lt;p&gt;The results for the .NET 4 wave beta exams are there. Received an email from Microsoft this morning. I only took the&amp;nbsp;70-513: TS: WCF Development with Microsoft .NET Framework 4, I found it pretty difficult but apparently I managed to pass :-)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483672" width="1" height="1"&gt;</description></item><item><title>BizTalk vs AppFabric</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/06/28/biztalk-vs-appfabric.aspx</link><pubDate>Mon, 28 Jun 2010 07:28:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483648</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483648</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/06/28/biztalk-vs-appfabric.aspx#comments</comments><description>&lt;p&gt;Lately I hear more and more people saying that BizTalk server has become obsolete. This because of the developments in the WCF4, WF4 and AppFabric space. While there is some truth in there, BizTalk server offers the following things today that makes it useful for several scenarios that are not in WCF4/WF4/AppFabric:&lt;/p&gt;
&lt;p&gt;- Publish / Subscribe model (messagebox)&lt;br /&gt;- Adapters (Legacy application access, non based WCF ones)&lt;br /&gt;- EDI, RFID, EDIFACT, ANSCI X12, HL7, HIPAA, RosettaNet and SWIFT support&lt;br /&gt;- Configurable retry logic with send and receive of messages&lt;br /&gt;- Flat file parsing&lt;br /&gt;- Debatching of messages&lt;br /&gt;- Business Activity Monitoring (BAM)&lt;br /&gt;- Visual mapper (BizTalk mapper)&lt;br /&gt;- Business Rules Engine (BRE)&lt;/p&gt;
&lt;p&gt;The new things in the WCF4, WF4 and AppFabric space that where previously unique to BizTalk:&lt;/p&gt;
&lt;p&gt;- Host out of the Box: Scalable, reliable, load balancedmonitorable&lt;br /&gt;- Durability and persistence&lt;br /&gt;- Suspend / resume functionality&lt;br /&gt;- Extensive set of tools provided for IT pros to administer and track execution &lt;br /&gt;- Health monitoring&lt;br /&gt;- Failed-message management&lt;br /&gt;- Message tracking + archiving and purging&lt;br /&gt;- Long running and atomic (ACID) transactions with compensation mechanisms&lt;/p&gt;
&lt;p&gt;So I think for quite some projects that I&amp;rsquo;m doing I&amp;rsquo;ll pick AppFabric now as the preferred platform where previously I would choose BizTalk. I prefer AppFabric since the development frameworks (WCF + WF) are more close to the core .NET platform.&lt;/p&gt;
&lt;p&gt;Let me know if you have any remarks or things to add.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483648" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category></item><item><title>What's new in WCF4?</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/04/21/what-s-new-in-wcf4.aspx</link><pubDate>Wed, 21 Apr 2010 07:51:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483137</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483137</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/04/21/what-s-new-in-wcf4.aspx#comments</comments><description>&lt;p&gt;Not showing up on the first page if you search around, but I think it currently is the best article around that shows the new stuff:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee354381.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee354381.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483137" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category></item><item><title>DevDays 2010 WCF Best Practices session slides</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/04/06/devdays-2010-wcf-best-practices-session-slides.aspx</link><pubDate>Tue, 06 Apr 2010 07:19:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483059</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483059</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/04/06/devdays-2010-wcf-best-practices-session-slides.aspx#comments</comments><description>&lt;p&gt;Wow, I was really surprised when starting my session. Had the last presentation slot at the last day so didn&amp;#39;t expect a whole lot of people. But it turned out to be pretty different, there actually wasn&amp;#39;t enough space for everybody, people had to stand in the back.&lt;/p&gt;
&lt;p&gt;Find the slide deck of my presentation below if you want to re read some stuff.&lt;/p&gt;
&lt;p&gt;Also I blogged about some of these practices with some more detail as in the slidedecks. You can&amp;nbsp;find them here: &lt;a href="http://bloggingabout.net/blogs/gerben/archive/2010/02/01/wcf-best-practices.aspx"&gt;http://bloggingabout.net/blogs/gerben/archive/2010/02/01/wcf-best-practices.aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Just let me know if you have any additional questions!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483059" width="1" height="1"&gt;</description><enclosure url="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.48.30.59/WCFBestPracticesDevDays2010.pptx" length="1251801" type="application/vnd.openxmlformats-officedocument.pres" /><category domain="http://bloggingabout.net/blogs/gerben/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Spolsky stops blogging</title><link>http://bloggingabout.net/blogs/gerben/archive/2010/03/22/spolsky-stops-blogging.aspx</link><pubDate>Mon, 22 Mar 2010 07:47:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483015</guid><dc:creator>Gerben van Loon</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/gerben/rsscomments.aspx?PostID=483015</wfw:commentRss><comments>http://bloggingabout.net/blogs/gerben/archive/2010/03/22/spolsky-stops-blogging.aspx#comments</comments><description>&lt;p&gt;Always enjoyed reading his articles and books. His writing really changed how&amp;nbsp;I approach things.&amp;nbsp;Good content combined with a great sense of humor.... sniff... sad to read that he stops blogging....&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.inc.com/magazine/20100301/lets-take-this-offline.html"&gt;http://www.inc.com/magazine/20100301/lets-take-this-offline.html&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483015" width="1" height="1"&gt;</description></item></channel></rss>
