<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-452667588427710943</id><updated>2011-11-16T05:18:25.869-05:00</updated><category term='C++'/><category term='ESB Toolkit'/><category term='Vista'/><category term='Mapper'/><category term='ENTSSO'/><category term='WCF'/><category term='Enterprise Library'/><category term='ESB'/><category term='SSOSQL'/><category term='BizTalk'/><category term='music'/><category term='SSL'/><category term='EntLib'/><category term='ESBT'/><category term='HotRod'/><title type='text'>The Glorious Monster</title><subtitle type='html'>I’m not a virtuoso guitar player. A virtuoso can play anything and I can’t. I can play only what I know -- Frank Zappa</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-2196659508905349091</id><published>2009-06-30T00:40:00.005-04:00</published><updated>2009-06-30T00:58:58.230-04:00</updated><title type='text'>Fixing ESBT 2.0 Installation Script Errors on 64-Bit OS</title><content type='html'>I mentioned in my &lt;a href="http://gloriousmonster.blogspot.com/2009/06/running-biztalk-esb-toolkit-20-on-vista.html"&gt;last post&lt;/a&gt; that I got an error running installation scripts for ESB Toolkit 2.0 on my 64-bit Vista machine. Brendon Birdoes from Microsoft on the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/biztalkesb/threads"&gt;ESBT Forum&lt;/a&gt; pointed out the solution. To run scripts that require a 32-bit OS, use the 32-bit version of cmd.exe, which is at \Windows\SysWOW64\cmd.exe. Not only does that fix the problem I reported, but it also allows the script to call ExplorerOM, which can only run in 32-bit mode.&lt;br /&gt;&lt;br /&gt;I had assumed that the Visual Studio 2008 Command Prompt (from Visual Studio Tools on the Start menu) is always 32-bit, even on 1 64-bit Vista machine. I assumed wrongly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-2196659508905349091?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/2196659508905349091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=2196659508905349091' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/2196659508905349091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/2196659508905349091'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/06/esbt-20-installation-script-errors-on.html' title='Fixing ESBT 2.0 Installation Script Errors on 64-Bit OS'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-8985555452706049100</id><published>2009-06-27T18:47:00.003-04:00</published><updated>2009-06-27T19:18:33.497-04:00</updated><title type='text'>Running BizTalk ESB Toolkit 2.0 on Vista</title><content type='html'>I've completed the installation and configuration of BizTalk ESB Toolkit 2.0 on my 64-bit Vista laptop. Aside from not having UDDI, Vista hasn't presented any problems yet. (Of course Microsoft claims not to have tested ESBT on Vista, so this installation is for development only.)&lt;br /&gt;&lt;br /&gt;I ran into three main issues during the install:&lt;br /&gt;&lt;br /&gt;1. Microsoft's late-breaking decision not to ship source code for the ESBT core components has led to some choppiness in the documentation. For instance the documentation neglects to mention that you need to unzip ESBSource.zip, and that you need to create a strong name key with sn.exe in the \Key folder. The documentation also tells you to install the management portal before you run the ESBT Configuration Wizard, which is backward. These and other documentation shortcomings are discussed by Saravana Kumar &lt;a href="http://blogs.digitaldeposit.net/saravana/post/2009/06/10/ESB-Toolkit-20-Configuring-Exception-Management-Portal.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. I got an error running the ManagementPortal installation script:&lt;br /&gt;&lt;br /&gt;The term 'C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com'&lt;br /&gt;is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.&lt;br /&gt;At C:\Program Files (x86)\Microsoft BizTalk ESB Toolkit 2.0\ESBSource\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1:19 char:3&lt;br /&gt;+     &amp;$ &lt;&lt;&lt;&lt; env:VS\devenv.com "$solutionPath\Samples\Management Portal\ESB.AlertService\ESB.AlertService.sln" /clean $buildType&lt;br /&gt;&lt;br /&gt;This is because Management_Install.ps1 assumes that Visual Studio is located in the \Program Files folder, but on 64-bit Vista it's in \Program Files (x86). This may be the case on other 64-bit platforms too.&lt;br /&gt;&lt;br /&gt;To fix, change line 12 of Management_Install.ps1 from&lt;br /&gt;&lt;br /&gt;$env:VS="${env:ProgramFiles}\Microsoft Visual Studio 9.0\Common7\IDE"&lt;br /&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;$env:VS="${env:ProgramFiles(x86)}\Microsoft Visual Studio 9.0\Common7\IDE"&lt;br /&gt;&lt;br /&gt;3. While trying to deploy the BAM definitions in Microsoft.BizTalk.ESB.BAM.Exceptions.xml, I got the BM.exe error, "OLE DB error: OLE DB or ODBC error: Cannot open database "BAMStarSchema" requested by the login. The login failed.; 42000." I found the solution on Henrik Olsson's blog &lt;a href="http://holsson.spaces.live.com/blog/cns!91D78390ECE48C0D!220.entry"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I must say that ESBT 2.0 is &lt;span style="font-style:italic;"&gt;far less harrowing&lt;/span&gt; to install than was ESB Guidance 1.0, but it can still take up an afternoon the first time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-8985555452706049100?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/8985555452706049100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=8985555452706049100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/8985555452706049100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/8985555452706049100'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/06/running-biztalk-esb-toolkit-20-on-vista.html' title='Running BizTalk ESB Toolkit 2.0 on Vista'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-532755522278373939</id><published>2009-06-26T15:46:00.006-04:00</published><updated>2009-06-26T16:41:19.083-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='EntLib'/><category scheme='http://www.blogger.com/atom/ns#' term='ESBT'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise Library'/><title type='text'>ESB Toolkit 2.0 Has A Surprise for Enterprise Library 4.1 Users</title><content type='html'>I use Enterprise Library 4.1 in a number of apps, and I'm glad that ESB Toolkit 2.0 uses it too. But I'm not so glad about the way ESBT handles its EntLib configuration. It does something the EntLib documents expressly say you should not do: tamper with EntLib configuration settings in machine.config.&lt;br /&gt;&lt;br /&gt;When you install ESBT the MSI adds the following to machine.config:&lt;br /&gt;&lt;br /&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&amp;lt;enterpriseLibrary.ConfigurationSource selectedSource="ESB File Configuration Source"&amp;gt;&lt;br /&gt;  &amp;lt;sources&gt;&lt;br /&gt;    &amp;lt;add name="ESB File Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" filePath="C:\Program Files (x86)\Microsoft BizTalk ESB Toolkit 2.0\esb.config"/&amp;gt;&lt;br /&gt;    &amp;lt;add name="ESB SSO Configuration Source" type="Microsoft.Practices.ESB.SSOConfigurationProvider.SSOConfigurationSource, Microsoft.Practices.ESB.SSOConfigurationProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" applicationName="ESB" description="ESB SSO Configuration" contactInfo="someone@microsoft.com" userGroupName="BizTalk Application Users" adminGroupName="BizTalk Server Administrators"/&amp;gt;&lt;br /&gt;  &amp;lt;/sources&amp;gt;&lt;br /&gt;&amp;lt;/enterpriseLibrary.ConfigurationSource&amp;gt;&lt;br /&gt;&lt;br /&gt;(On a 64-bit machine, this will happen in both 32-bit and 64-bit versions of machine.config.)&lt;br /&gt;&lt;br /&gt;What this does is, it forces Enterprise Library to ignore your app.config and/or web.config files and look for configuration information exclusively in ESBT's default configuration source, which happens to be the file "C:\Program Files (x86)\Microsoft BizTalk ESB Toolkit 2.0\esb.config". Since you probably didn't put your EntLib configuration settings in esb.config, EntLib won't find your apps' configuration at all, and they will crash. For example, a call to DatabaseFactory.CreateDatabase("myDatabase") will throw "System.Configuration.ConfigurationErrorsException: The requested database myDatabase is not defined in configuration."&lt;br /&gt;&lt;br /&gt;I posted this on Microsoft's ESBT Forum yesterday and got a prompt response that led to a solution. Enterprise Library still looks in your app./web.config first, so if you insert your own &amp;lt;enterpriseLibrary.ConfigurationSource&amp;gt; section there, Enterprise Library will honor it.&lt;br /&gt;&lt;br /&gt;So in my web.config file I inserted the following:&lt;br /&gt;&lt;br /&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&amp;lt;enterpriseLibrary.ConfigurationSource selectedSource="Local File Configuration Source"&amp;gt;&lt;br /&gt;  &amp;lt;sources&gt;&lt;br /&gt;    &amp;lt;add name="Local File Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" filePath="web.config"/&amp;gt;&lt;br /&gt;  &amp;lt;/sources&amp;gt;&lt;br /&gt;&amp;lt;/enterpriseLibrary.ConfigurationSource&amp;gt;&lt;br /&gt;&lt;br /&gt;This causes Enterprise Library to look for my app's configuration settings in my web.config file once again, and thus my app works as it did before ESBT came along.&lt;br /&gt;&lt;br /&gt;I'm even thinking that it's always a good idea to put a &amp;lt;enterpriseLibrary.ConfigurationSource&amp;gt; in every config file that uses Enterprise Library, since you never know when some joker is going to pull the same stunt as ESBT in machine.config.&lt;br /&gt;&lt;br /&gt;This is not a totally joyous solution though, because the Enterprise Library Configuration Editor tool seems not to understand that different &amp;lt;enterpriseLibrary.ConfigurationSource&amp;gt; sections can exist in machine.config and web.config at the same time, and so it complains when I try to use it to edit my web.config.&lt;br /&gt;&lt;br /&gt;For more details you can read the whole ESBT Forum thread &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/biztalkesb/thread/46c011b4-092f-40ab-8743-cd1edf02c56f"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-532755522278373939?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/532755522278373939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=532755522278373939' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/532755522278373939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/532755522278373939'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/06/esb-toolkit-20-has-surprise-for.html' title='ESB Toolkit 2.0 Has A Surprise for Enterprise Library 4.1 Users'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-8763369903509949505</id><published>2009-06-25T12:06:00.003-04:00</published><updated>2009-06-25T12:11:42.048-04:00</updated><title type='text'>Speaking on BizTalk at July 2009 Cleveland .NET SIG</title><content type='html'>I'll be giving another talk on BizTalk at the Cleveland .NET SIG on July 14, 2009. The topic will be "Achieving Reliable Message Delivery with BizTalk". I'll cover techniques common to BizTalk 2006 R2 and BizTalk 2009, as well as a look at some features in the new BizTalk Enterprise Toolkit 2.0.&lt;br /&gt;&lt;br /&gt;You can get more info and register here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bennettadelson.com/Events.aspx"&gt;http://www.bennettadelson.com/Events.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-8763369903509949505?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/8763369903509949505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=8763369903509949505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/8763369903509949505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/8763369903509949505'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/06/speaking-on-biztalk-at-july-2009.html' title='Speaking on BizTalk at July 2009 Cleveland .NET SIG'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-2810918338412887868</id><published>2009-06-07T16:42:00.004-04:00</published><updated>2009-06-26T16:42:15.420-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENTSSO'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='SSOSQL'/><title type='text'>Fixing BizTalk ENTSSO Failure on Windows Vista</title><content type='html'>I've been running BizTalk 2009 on my Windows Vista laptop, and suddenly today the Enterprise Single Sign-On Service stopped working. When I tried to start it manually, I got this error in the event log:&lt;br /&gt;&lt;br /&gt;Could not create SSOSQL. To fix the problem, reinstall SSO or try 'regasm SSOSQL.dll' from a Visual Studio command prompt.&lt;br /&gt; Error Code: 0x80131700&lt;br /&gt;&lt;br /&gt;It turns out this error told me everything I needed to know -- except the location of SSOSQL.dll. Took me a little digging, but I found it here:&lt;br /&gt;&lt;br /&gt;C:\Program Files\Common Files\Enterprise Single Sign-On\SSOSQL.dll&lt;br /&gt;&lt;br /&gt;So, navigating to that folder in the Visual Studio Commmand prompt and running 'regasm SSOSQL.dll' fixed it right up.&lt;br /&gt;&lt;br /&gt;The only lingering mystery is why the DLL got unregistered in the first place. I'm suspicious of Visual Studio 2010 Beta 1, which I installed yesterday. But I've got no proof of that.&lt;br /&gt;&lt;br /&gt;(And yes, I do install a lot of goodies on my laptop.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-2810918338412887868?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/2810918338412887868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=2810918338412887868' title='26 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/2810918338412887868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/2810918338412887868'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/06/fixing-entsso-failure-on-windows-vista.html' title='Fixing BizTalk ENTSSO Failure on Windows Vista'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>26</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-6901520423939658780</id><published>2009-04-21T12:48:00.004-04:00</published><updated>2009-06-26T16:42:41.979-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mapper'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='HotRod'/><title type='text'>Enhancing the BizTalk Mapper: How to Wrap XSLT in Custom Functoids</title><content type='html'>I've published an article on this topic in the latest issue of BizTalk HotRod, the online magazine for BizTalk developers. It's at page 44.&lt;br /&gt;&lt;br /&gt;&lt;a href="redir.aspx?C=e9cb0237b3b248c8bb6ab754c0401514&amp;amp;URL=http%3a%2f%2fbiztalkhotrod.com%2fDocuments%2fBizTalk_HotRod_Issue6_Q2_2009.pdf" target="_blank"&gt;http://biztalkhotrod.com/Documents/BizTalk_HotRod_Issue6_Q2_2009.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the article I describe a problem that's easy to solve using an Inline XSLT Call Template. Then I show how to turn the Inline XSLT Call Template into a custom functoid that can be deployed to the Mapper toolbox, so that developers with no XSLT knowledge can use it without seeing the script or writing any code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-6901520423939658780?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/6901520423939658780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=6901520423939658780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6901520423939658780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6901520423939658780'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/04/enhancing-biztalk-mapper-how-to-wrap.html' title='Enhancing the BizTalk Mapper: How to Wrap XSLT in Custom Functoids'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-3784049826571731103</id><published>2009-04-15T20:39:00.004-04:00</published><updated>2009-06-26T16:43:06.068-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><title type='text'>BizTalk 2009 on my Laptop</title><content type='html'>The RTM of BizTalk Server 2009 and installed it on my laptop. So far no problems! Imagine seeing BizTalk Administrative Console with glass!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NqTtDtHnOIQ/SeZ_vcocUBI/AAAAAAAAABA/UYPzp8n1a_g/s1600-h/BizTalkWithGlass.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 274px;" src="http://2.bp.blogspot.com/_NqTtDtHnOIQ/SeZ_vcocUBI/AAAAAAAAABA/UYPzp8n1a_g/s320/BizTalkWithGlass.jpg" alt="" id="BLOGGER_PHOTO_ID_5325084062528589842" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-3784049826571731103?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/3784049826571731103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=3784049826571731103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3784049826571731103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3784049826571731103'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2009/04/biztalk-2009-on-my-laptop.html' title='BizTalk 2009 on my Laptop'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NqTtDtHnOIQ/SeZ_vcocUBI/AAAAAAAAABA/UYPzp8n1a_g/s72-c/BizTalkWithGlass.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-7235742420726714296</id><published>2008-06-01T16:42:00.010-04:00</published><updated>2008-06-01T17:19:35.005-04:00</updated><title type='text'>Speaking on BizTalk ESB Guidance at MOCSDUG</title><content type='html'>I'm going to give the June presentation to the &lt;a href="http://www.mocsdug.org/"&gt;Mid-Ohio Connected Systems Developers User Group (MOCSDUG)&lt;/a&gt; on "Introduction to the Microsoft ESB Guidance for BizTalk Server 2006 R2". The talk will be on Thursday, June 5, 2008 at 6:00 PM. You can see it in person or over the web via LiveMeeting.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.codeplex.com/esb"&gt;ESB Guidance&lt;/a&gt; gives you free, prebuilt components and services, complete with source code, that allow you to turn BizTalk into a true Enterprise Service Bus.&lt;br /&gt;&lt;br /&gt;Here's some of what the ESB Guidance can do:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Discover and configure message endpoints at runtime&lt;/li&gt;&lt;li&gt;Discover and perform message transformations at runtime&lt;/li&gt;&lt;li&gt;Select which combination of services to execute, in what sequence, at runtime &lt;/li&gt;&lt;li&gt;Handle exceptions consistently from anywhere inside or outside BizTalk&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Many of the cool things we're expecting in Oslo are available in the ESB Guidance right now. So come check it out!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-7235742420726714296?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/7235742420726714296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=7235742420726714296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/7235742420726714296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/7235742420726714296'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/06/speaking-on-biztalk-esb-guidance-at.html' title='Speaking on BizTalk ESB Guidance at MOCSDUG'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-3480945309207589147</id><published>2008-05-22T01:05:00.007-04:00</published><updated>2008-05-22T01:30:22.564-04:00</updated><title type='text'>The 30-Day PowerShell Diet</title><content type='html'>Inspired by &lt;a href="http://www.coreyhaines.com/coreysramblings/2008/05/20/30DaysOfVegetarianism.aspx"&gt;this example&lt;/a&gt;, I have resolved to go on a 30-day PowerShell diet. For 30 days I will not use the Windows command window. I will use PowerShell instead. It should hopefully take only a few days to get used to using PowerShell to do all the things I normally do in a command window, and then I can start learning all the cool extra things in PowerShell. If after 30 days I don't like it,then I will stop using PowerShell for good.&lt;br /&gt;&lt;br /&gt;The first challenge to the beginner is getting hold of a copy. A quick search leads to &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx"&gt;the official Microsoft site&lt;/a&gt;, but unfortunately you can't download there without installing a Windows Genuine Advantage plug-in, which I avoid whenever possible. (Not that I'm a thief, but I consider WGA an intrusion of privacy.) Happily &lt;a href="http://www.petri.co.il/download_powershell_for_windows.htm"&gt;this site&lt;/a&gt; lets us take advantage of PowerShell downloading without any Genuine Advantage.&lt;br /&gt;&lt;br /&gt;After the installation I had a shortcut to PowerShell on my Start menu, which I copied to my desktop and thence to my Quick Start tray. And then came the second challenge. I almost never run the plain vanilla command window; instead I run the Visual Studio command window, which pre-loads path and environment variables so I'll be ready to run devenv.exe, sn.exe, wsdl.exe, and the whole rest of the Visual Studio tools. The command window shortcut does this by running a batch file, which in VS2008 is called vcvarsall.bat. If you try passing the batch file as a startup parameter to PowerShell you'll get syntax errors which I'm too green to understand yet. Plus, if you make it work it won't help, because PowerShell will run the batch file in a separate process, so it won't affect PowerShell's own environment.&lt;br /&gt;&lt;br /&gt;The solution is for the shortcut to run the batch file first, then launch PowerShell. And so I edited the shortcut's properties as follows:&lt;br /&gt;&lt;br /&gt;Start in: %HOMEDRIVE%%HOMEPATH%&lt;br /&gt;* this is the default&lt;br /&gt;&lt;br /&gt;Target: %comspec% /k ""D:\Programs\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86 &amp;amp;&amp;amp; %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe&lt;br /&gt;&lt;br /&gt;And now I think I'm ready to live in PowerShell for the next 29 days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-3480945309207589147?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/3480945309207589147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=3480945309207589147' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3480945309207589147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3480945309207589147'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/05/30-day-powershell-diet.html' title='The 30-Day PowerShell Diet'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-1368446606468895700</id><published>2008-05-19T09:34:00.003-04:00</published><updated>2008-05-19T17:23:32.923-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Security at Cleveland Day of .NET</title><content type='html'>I want to say that &lt;a href="http://www.clevelanddodn.org/"&gt;Cleveland Day of .NET&lt;/a&gt; was terrific experience for me. Between the excellent presentations and the stimulating conversations, I learned a lot and had a great time. I won't try to list all the folks I should thank, 'cause I'd leave some out, but to everyone who helped put on the event, Thank You and Well Done!&lt;br /&gt;&lt;br /&gt;I was gratified by the turnout at my presentation, on "WCF Security", especially considering that we started at 8:30 AM! A copy of the slides and the demo code is available from the &lt;a href="http://www.bennettadelson.com/technicalresources/presentations.aspx"&gt;Cleveland .NET SIG site&lt;/a&gt;. (I've discovered I can't upload the files directly to this blog. I don't pay anything to BlogSpot, so I guess I'm not in a position to complain.) I've also sent the material to DoDN  and will post a link to it on their site as soon as it's available.&lt;br /&gt;&lt;br /&gt;I've made a bunch of enhancements to the demo code. The service host now has five different endpoints, one for each demo scenario, and the test client calls all five in succession. The demo also includes the two scenarios that I didn't have time to show in the presentation. You're welcome to post comments here or contact me directly if you have any questions or suggestions.  I'm also planning to write some more blog posts about WCF Security in coming weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-1368446606468895700?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/1368446606468895700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=1368446606468895700' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/1368446606468895700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/1368446606468895700'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/05/cleveland-day-of-net.html' title='WCF Security at Cleveland Day of .NET'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-3740893762326868948</id><published>2008-05-13T14:16:00.002-04:00</published><updated>2008-05-13T14:20:46.035-04:00</updated><title type='text'>Speaking at Cleveland Day of .NET</title><content type='html'>I've been added to the speakers lineup at &lt;a href="http://www.clevelanddodn.org/"&gt;Cleveland Day of .NET &lt;/a&gt;this Saturday, May 17. This is such a late-breaking development that it's not on &lt;a href="http://www.clevelanddodn.org/"&gt;the schedule&lt;/a&gt; yet, though it may be by the time you read this. My topic will be "WCF Security", not the sexiest but it might help you keep your job (certainly helped me keep mine).&lt;br /&gt;&lt;br /&gt;And yes, it's been a while since I updated this blog! Stay tuned ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-3740893762326868948?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/3740893762326868948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=3740893762326868948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3740893762326868948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3740893762326868948'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/05/speaking-at-cleveland-day-of-net.html' title='Speaking at Cleveland Day of .NET'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-7298047884246886274</id><published>2008-04-23T20:23:00.003-04:00</published><updated>2008-04-23T21:02:02.295-04:00</updated><title type='text'>Review: John Stockton Silverlight 2.0 Presentation</title><content type='html'>Last night I got to the &lt;a href="http://www.clevelanddotnet.info/#PrevPresentations"&gt;Cleveland C#/VB.NET SIG&lt;/a&gt; to hear &lt;a href="http://tocode.blogspot.com/"&gt;John Stockton &lt;/a&gt;talk about &lt;a href="http://silverlight.net/GetStarted/"&gt;Silverlight 2.0 Beta 1&lt;/a&gt;. Although this beta has only been out a few weeks, John has already written a couple of apps in it, which he demonstrated. The first demo was based on a POC John had written for an actual client in about 10 days. It took an XML file containing a description of a telephone switching system, and it drew a two-dimensional picture of the system. Drawing the picture seemed straitforward enough (they're just boxes stacked in racks), but each box was animated to display its specs when touched with the mouse. The second demo was an early iteration of the web page that will display events at &lt;a href="http://www.clevelanddodn.org/"&gt;Cleveland Day of .NET&lt;/a&gt;. I was a bit disturbed by that one because it said John and I would be the only presenters. (Fear not, that will change!)&lt;br /&gt;&lt;br /&gt;Though he freely admits that he's still learning, John's experience playing with Silverlight 2.0 beta 1 from its day of release has made him already one of the world's top experts. I admired his willingness to get right to work with it, and he made it seem approachable to the rest of us.&lt;br /&gt;&lt;br /&gt;I still have a lot of questions about how ready Silverlight is for prime time. (How's the security? How's it deal with latency, concurrency, message brokering? Is the cross-platform cross-browser story real? How far can you really get away from Javascript?) And of course a lot of that approachability we perceived is because it's .NET and we're .NET developers. But the fastest way to the answers is to try the stuff out, as John has done.&lt;br /&gt;&lt;br /&gt;After the meeting a gang of 16 or so escaped to Winking Lizard, which appears to be a strong tradition with this SIG, although we're doing much more of it now in &lt;a href="http://www.bennettadelson.com/technicalresources/sig.aspx"&gt;that other Cleveland .NET SIG that I chair&lt;/a&gt;. I enjoyed meeting new .NET developers as well as catching up with Sam and some Twitterati.&lt;br /&gt;&lt;br /&gt;Overall a very enjoyable and informative geek night out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-7298047884246886274?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/7298047884246886274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=7298047884246886274' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/7298047884246886274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/7298047884246886274'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/04/review-john-stockton-silverlight-20.html' title='Review: John Stockton Silverlight 2.0 Presentation'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-5511314770003040281</id><published>2008-04-12T18:25:00.010-04:00</published><updated>2008-04-12T19:09:03.460-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Fixing BizTalk's WCF Message Contract Mix-Up, Part 3</title><content type='html'>The final solution to the Message Contract Mix-Up doesn’t  require you to define your own message contracts, but does require some tricks in both the operation contract and the BizTalk ports.&lt;br /&gt;&lt;br /&gt;First, modify the operation contract by adding a MessageParameterAttribute to the argument and return type:&lt;br /&gt;&lt;br /&gt;[OperationContract]&lt;br /&gt;[return:MessageParameter(Name="OrderStatus")] PurchaseOrderStatus PlaceOrder([MessageParameter(Name="PurchaseOrder")]PurchaseOrder po);&lt;br /&gt;&lt;br /&gt;MessageParameterAttribute lets you change the names that the parameter and return value will have in the SOAP body.  The names need to be changed to “PurchaseOrder” and “OrderStatus” so BizTalk can associate the schemas PurchaseOrder.xsd and OrderStatus.xsd with those elements. (Without MessageParameterAttribute, WCF would force the names of the parameter and return value to be “po” and “PlaceOrderResult”, which mean nothing to BizTalk).&lt;br /&gt;&lt;br /&gt;Now you need to modify the WCF adapter settings in the two-way receive location in BizTalk. For general instructions and screenshots illustrating the following steps see the BizTalk documentation &lt;a href="http://technet.microsoft.com/en-us/library/bb226478.aspx?wt.svl=prodtechnol"&gt;here&lt;/a&gt;.  Open the Messages tab of the WCF adapter.  Under “Specify the source of the inboud BizTalk message body”, check the third radio button, “Path – content located by body path”. In the text box type an XPATH expression consisting of the name of your operation contract, followed by the name of your data contract schema:&lt;br /&gt;&lt;br /&gt;                /*[local-name()='PlaceOrder']/*[local-name()='PurchaseOrder']&lt;br /&gt;&lt;br /&gt;Make sure the combo box below the text box, “Node encoding”, is set to XML.&lt;br /&gt;&lt;br /&gt;The first element in the XPATH is actually the WCF-generated message contract, which has the same name as the operation contract (“PlaceOrder”). The following element is the name of the parameter inside the message contract, which we forced to be “PurchaseOrder” by applying the MessageParameterAttribute.&lt;br /&gt;&lt;br /&gt;The consequence of these settings is that the WCF adapter will drill through the message contract and pass the PurchaseOrder element to BizTalk as the message body. Bingo!&lt;br /&gt;&lt;br /&gt;Since this is a two-way port, we need to return a data contract back to the caller, and to do that we need to tell the WCF adapter how to wrap the data contract inside a message contract. To do that, go to the bottom half of the tab and check “Template – content specified by template.”  In the text box below, be careful not to delete or change the bts-msg-body element that’s already there, since that represents the data contract part of the message. Instead, insert an XML element around the bts-msg-body to represent the message contract. The name of this element is the operation contract’s name plus the suffix “Response”, and it must include the correct XML namespace:&lt;br /&gt;&lt;br /&gt;&amp;lt;PlaceOrderResponse xmlns="urn://MyCompany.Purchasing.1_0_0.com" &amp;gt;&lt;br /&gt;&amp;lt;bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml" &amp;gt;&lt;br /&gt;&amp;lt;/PlaceOrderResponse &amp;gt;&lt;br /&gt;&lt;br /&gt;If this were a one-way send port we would follow the same procedure. &lt;br /&gt;&lt;br /&gt;The result is that BizTalk will send the return value to client wrapped inside the same message contract that WCF would have generated automatically if the service were hosted in a pure .NET application. Bingo Bingo!&lt;br /&gt;&lt;br /&gt;So there you have three ways to solve the Message Contract Mix-Up with the BizTalk WCF adapters.  If you’ve read all the way through this series, I surmise that you either find the subject fascinating, or you need to solve these problems as badly as I did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-5511314770003040281?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/5511314770003040281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=5511314770003040281' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/5511314770003040281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/5511314770003040281'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/04/biztalk-wcf-adapters-and-message.html' title='Fixing BizTalk&apos;s WCF Message Contract Mix-Up, Part 3'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-4154358868530074163</id><published>2008-04-12T17:02:00.008-04:00</published><updated>2008-04-12T18:56:36.114-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Fixing BizTalk's WCF Message Contract Mix-Up, Part 2</title><content type='html'>I know of three ways to fix the Message Contract Mix-Up discussed in the last post. The first two require changing the signatures of your operation contracts to replace the WCF-generated message contracts with message contracts you define yourself. (Perhaps you've read books or heard WCF experts who say you needn't bother defining message contracts except in the unusual case. Then I guess BizTalk is an unusual case, as you might have suspected.)&lt;br /&gt;&lt;br /&gt;1. Change the operation contract’s parameter and return value to message contracts with IsWrapped = false, like this:&lt;br /&gt;&lt;br /&gt;[ServiceContract(Namespace = "urn://MyCompany.Purchasing.1_0_0.com")]&lt;br /&gt;public interface IPurchasing&lt;br /&gt;{&lt;br /&gt;[OperationContract]&lt;br /&gt;OrderStatusMessage PlaceOrder(PurchaseOrderMessage message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[MessageContract(IsWrapped=false)]&lt;br /&gt;public class PurchaseOrderMessage&lt;br /&gt;{&lt;br /&gt;[MessageBodyMember(Namespace = "urn://MyCompany.Purchasing.1_0_0.com")]&lt;br /&gt;public PurchaseOrder PurchaseOrder;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[MessageContract(IsWrapped=false)]&lt;br /&gt;public class OrderStatusMessage&lt;br /&gt;{&lt;br /&gt;[MessageBodyMember(Namespace = "urn://MyCompany.Purchasing.1_0_0.com")]&lt;br /&gt;public OrderStatus OrderStatus;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;If you declare your own message contracts but set IsWrapped to false (the default is true), then WCF will not generate any message contract element in the SOAP message at all. Instead, WCF will place the field with the MessageBodyMember attribute – which happens to be your data contract, PurchaseOrder – directly at the root of the SOAP body. Thus the SOAP message received by BizTalk will have an element named PurchaseOrder at its message type. Bingo! The great thing about this solution is you don’t need to do anything special on the BizTalk side to make your WCF adapters behave as you originally expected.&lt;br /&gt;&lt;br /&gt;2. Same as 1. above, except the message contracts have IsWrapped = true. This will make the message contracts visible in your SOAP bodies, but you'll control their content instead of WCF. Generate XSD schemas for the message contracts and put them in your BizTalk project. Write message maps to transform message contract schemas to and from data contract schemas. Use the message maps to transform message contracts into data contracts in your inbound ports and to transform data contracts into message contracts in your outbound ports.&lt;br /&gt;&lt;br /&gt;This solution will increase the number of schemas and message maps you’ll maintain. But unlike the previous solution, this one makes the message structures consistent, whether you look at them from the perspective of the WCF contracts, the BizTalk schemas, or the actual SOAP messages on the wire.&lt;br /&gt;&lt;br /&gt;3. If you can’t, or aren’t willing, to define your own message contracts, but you’re able to add some WCF attributes, you can work out a compromise that allows BizTalk to navigate through the WCF-generated message contracts without knowing all about their schemas. The final post in this series will explain how to do that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-4154358868530074163?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/4154358868530074163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=4154358868530074163' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/4154358868530074163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/4154358868530074163'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/04/biztalk-wcf-adapter-gotchas-part-three.html' title='Fixing BizTalk&apos;s WCF Message Contract Mix-Up, Part 2'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-8959685533581652834</id><published>2008-04-12T15:33:00.007-04:00</published><updated>2008-04-12T19:06:09.075-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Fixing BizTalk's WCF Message Contract Mix-Up, Part 1</title><content type='html'>WCF developers often write OperationContracts that receive and return DataContracts, like so:&lt;br /&gt;&lt;br /&gt;[ServiceContract(Namespace = "urn://MyCompany.Purchasing.1_0_0.com")]&lt;br /&gt;public interface IPurchasing&lt;br /&gt;{&lt;br /&gt;[OperationContract]&lt;br /&gt;OrderStatus PlaceOrder(PurchaseOrder po);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Suppose you implement this service in BizTalk using an orchestration. First you use a tool such as XSD.exe or SVCUtil.exe to generate XSD schemas for the PurchaseOrder and OrderStatus data contracts. You add these schemas to a BizTalk project, write an orchestration that receives a PurchaseOrder and returns an OrderStatus, and deploy the schemas and orchestration to BizTalk. Then you bind the orchestration’s receive-send port to a two-way receive location using a WCF adapter and the XmlReceive pipeline.&lt;br /&gt;&lt;br /&gt;Your may be shocked to find that when a WCF client sends a message to BizTalk, an error occurs in the receive pipeline: “Finding the document specification by message type "urn://MyCompany.Purchasing.1_0_0.com #PlaceOrder" failed. Verify the schema deployed properly.”&lt;br /&gt;&lt;br /&gt;It turns out that the SOAP body that your WCF client sent to BizTalk doesn’t begin with the PurchaseOrder data contract. Instead it begins with a message contract that the WCF client generated behind the scenes. The name of this message contract is “PlaceOrder”, i.e. the name of the operation. Inside that message contract is an element named “po” which contains the data exposed by the data contract. Thus although BizTalk expects to receive a message type named PurchaseOrder, there is no element named PurchaseOrder anywhere in the SOAP body!&lt;br /&gt;&lt;br /&gt;There's a symmetrical problem at the other end, when the two-way receive port tries to return an OrderStatus to the caller. If the service were hosted in a .NET application, WCF would automatically generate a message contract element named PlaceOrderResponse and wrap it around the OrderStatus. But BizTalk by default will do no such thing.&lt;br /&gt;&lt;br /&gt;I call this impedence mismatch the "BizTalk WCF Message Contract Mix-Up". But so much for lingo, how do you fix it? I can suggest three solutions, each with its pros and cons. I’ll discuss them in the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-8959685533581652834?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/8959685533581652834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=8959685533581652834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/8959685533581652834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/8959685533581652834'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/04/biztalk-wcf-adapter-gotchas-part-two.html' title='Fixing BizTalk&apos;s WCF Message Contract Mix-Up, Part 1'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-5901233119351827009</id><published>2008-04-12T14:29:00.004-04:00</published><updated>2008-04-12T18:51:24.733-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>BizTalk WCF Adapters: OneWay to Nowhere</title><content type='html'>Newcomers to the WCF Adapters in BizTalk Server 2006 R2 must be aware of two “gotchas” that they're likely to face when sending or receiving WCF messages with the adapters.&lt;br /&gt;&lt;br /&gt;The first gotcha is that the IsOneWay property of operation contracts must be false. Luckily IsOneWay is false by default, but developers sometimes set it to true in an attempt to improve performance.&lt;br /&gt;&lt;br /&gt;But the BizTalk WCF adapters always set IsOneWay to false, and so will fail whenever sending to or receiving from a client or service that has IsOneWay = true. (There’s an exception for the NetMsmq adapter.) Details about the errors you’ll receive are in the BizTalk documentation &lt;a href="http://msdn2.microsoft.com/en-us/library/bb246060.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The simple solution is to set IsOneWay back to false on your client or service. If you’re able to do that, the problem goes straight away.&lt;br /&gt;&lt;br /&gt;If not – if for instance you lack authority to change the service contract – then you’ll have to put a wrapper service between BizTalk and the real service which, you guessed it, has the same WCF contracts as the real service except that IsOneWay is always false. This can be a pain, though it’s not hard to understand what you’re doing.&lt;br /&gt;&lt;br /&gt;The second gotcha requires some deeper knowledge of WCF, so I’ll save it for the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-5901233119351827009?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/5901233119351827009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=5901233119351827009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/5901233119351827009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/5901233119351827009'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/04/biztalk-wcf-adapter-gotchas-part-one.html' title='BizTalk WCF Adapters: OneWay to Nowhere'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-6415508932487581299</id><published>2008-04-11T19:53:00.002-04:00</published><updated>2008-04-11T19:54:54.908-04:00</updated><title type='text'>BizTalk Slides and Demos</title><content type='html'>The slides and demos from my Intelligent Programmer's Guide to BizTalk presentation are &lt;a href="http://www.bennettadelson.com/technicalresources/presentations.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-6415508932487581299?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/6415508932487581299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=6415508932487581299' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6415508932487581299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6415508932487581299'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/04/biztalk-slides-and-demos.html' title='BizTalk Slides and Demos'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-7465101165792751991</id><published>2008-03-28T22:12:00.000-04:00</published><updated>2008-03-28T22:52:44.140-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Painless SSL On Your Desktop</title><content type='html'>I was developing a WCF solution that called for UserNameOverTransport authentication. "OverTransport" meant using SSL. Since I'm a coding/architect kind of guy, I had to dig around to find out how to get an X509 certificate installed in my local IIS so I could run SSL on it.&lt;br /&gt;&lt;br /&gt;Creating a certificate is easy with makecert.exe, a utility that comes with the Visual Studio SDK. Getting one that works is another matter. By "works" I mean (1) you can install the certificate in IIS, (2) it will be fully trusted by WCF, and (3) you can use it with URLs containing "localhost" without hearing grief about the certificate being issued to a different name.&lt;br /&gt;&lt;br /&gt;The keys to success turn out to be (i) installing a ginned-up "authority" into the Trusted Root Certificate Authorities store, and (2) installing a certificate issued by that "authority", in the name of "localhost", into your Personal store.&lt;br /&gt;&lt;br /&gt;Getting makecert.exe to do these things requires a lot of fancy parameters. &lt;a href="http://blogs.technet.com/jhoward/archive/2005/02/02/365323.aspx"&gt;This fine blog post&lt;/a&gt; by Michael Howard explains most of what you need to do. The only shortcoming of Howard's otherwise excellent instructions is that he installs the issuer's certificate into the Personal store instead of into Trusted Root Certificate Authorities, and thus WCF won't trust it. To fix that I changed the -ss parameter from "MY" to "ROOT".&lt;br /&gt;&lt;br /&gt;Here is text of the batch file I used to create my fully SSL-ready certificate:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;@echo off&lt;br /&gt;&lt;br /&gt;makecert.exe -r -pe -n "CN=Acme Test And Dev Root Authority" -ss ROOT -sr LocalMachine -a sha1 -sky signature "Acme Test And Dev Root Authority.cer"&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;makecert -pe -n "CN=localhost" -ss MY -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -in "Acme Test And Dev Root Authority" -is ROOT -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 localhost.cer&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Once the batch file ran, I opened the IIS Admin Console and configured Default Web Site to use the certificate named "localhost" for SSL. &lt;em&gt;Et voila&lt;/em&gt;, I can use any address on my local machine beginning with &lt;span&gt;https://localhost/...,&lt;/span&gt; and it transports over SSL!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-7465101165792751991?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/7465101165792751991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=7465101165792751991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/7465101165792751991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/7465101165792751991'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/painless-ssl-on-your-desktop.html' title='Painless SSL On Your Desktop'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-3962153401934900341</id><published>2008-03-12T10:19:00.000-04:00</published><updated>2008-03-12T10:34:02.318-04:00</updated><title type='text'>BIzTalk Presentation at the Cleveland .NET SIG</title><content type='html'>Next month I'm going to give a presentation to the &lt;a href="http://www.bennettadelson.com/technicalresources/sig.aspx"&gt;Cleveland .NET SIG&lt;/a&gt; titled "The Intelligent Programmer's Guide to BizTalk". This will be geared to the BizTalk novice and will answer the question, "What can I do with BizTalk?" I'll have time for three demonstrations, which I'm currently planning to cover (1) how to set up decoupled publish/subscribe communication, (2) how to manage long-running transactions, and (2) how to achieve massive performance scalability.&lt;br /&gt;&lt;br /&gt;I'd welcome anybody's suggestions of things they like included.&lt;br /&gt;&lt;br /&gt;The meeting will be Tuesday, April 8, at 5:45. Directions and other info &lt;a href="http://www.bennettadelson.com/technicalresources/sig.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-3962153401934900341?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/3962153401934900341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=3962153401934900341' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3962153401934900341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3962153401934900341'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/biztalk-presentation-at-cleveland-net.html' title='BIzTalk Presentation at the Cleveland .NET SIG'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-671178239568427603</id><published>2008-03-07T10:02:00.000-05:00</published><updated>2008-03-07T13:50:28.063-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>... Which Sometimes Splits Too Fine</title><content type='html'>Then there are little gotchas in C++/CLI that just go to show how tough it is to get everything smoothed out in such a complex product.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can strong name your assemblies, but you'll get a runtime exception if you do it the way you're used to, in the AssemblyInfo file. Instead you must use a &lt;a href="http://blogs.msdn.com/shawnfa/archive/2005/07/14/438963.aspx"&gt;linker switch&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Visual Studio won't automatically &lt;a href="http://www.codeproject.com/KB/mcpp/WorkingWithConfigFiles.aspx"&gt;rename and copy an app.config&lt;/a&gt; file for you. You have to write a custom build event.&lt;/li&gt;&lt;li&gt;IntelliSense is brittle and feeble, like C# was in VS 2002. It's comforting that the C++ Team plans to &lt;a href="http://blogs.msdn.com/vcblog/archive/2008/02/29/intellisense-part-2-the-future.aspx"&gt;re-architect this feature &lt;/a&gt;in the next big release.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Perhaps my hordes of readers would like to post their own favorite glitches.&lt;/p&gt;&lt;p&gt;C++ fans are fond of &lt;a href="http://www.devsource.com/c/a/Languages/What-Sets-C-Developers-Apart/"&gt;sports car&lt;/a&gt; metaphores, and it's certainly not always built for comfort!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-671178239568427603?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/671178239568427603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=671178239568427603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/671178239568427603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/671178239568427603'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/dropping-brain.html' title='... Which Sometimes Splits Too Fine'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-3498243694357161839</id><published>2008-03-05T22:28:00.001-05:00</published><updated>2008-03-07T09:18:11.055-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>The Split-Brain Language</title><content type='html'>In C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CLI&lt;/span&gt; we have the merging of two nearly opposite things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;C++&lt;/em&gt;&lt;/strong&gt;, a language designed to generate &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;unmanaged&lt;/span&gt; code. It offers nearly unlimited run-time access to hardware, operating system and drivers, but almost no run-time access to the program's own type system.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;em&gt;&lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CLI&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;, a managed &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;runtime&lt;/span&gt;. It offers only limited access to hardware, OS and drivers, but rich access to the program's type system at run-time.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;CLI&lt;/span&gt; is a language that can write both managed or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;unmanaged&lt;/span&gt; code. We'll leave aside for now whether mixing managed and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;unmanaged&lt;/span&gt; code is something we'd like to do, and just look at how well C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;CLI&lt;/span&gt; supports managed code. (We can force the compiler to produce a 100% managed assembly using the /&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;clr&lt;/span&gt;:safe switch.)&lt;/p&gt;&lt;p&gt;There's no doubt that the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;unmanaged&lt;/span&gt; legacy of C++ makes some things more awkward, or at least more verbose, than they are in all-managed languages like C#. For instance, in C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;CLI&lt;/span&gt; you can't use the traditional C-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;ish&lt;/span&gt; syntax to declare a managed array, as you can in C#. That's because in C++ the C-style syntax is reserved for &lt;em&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;unmanaged&lt;/span&gt;&lt;/em&gt; arrays; so if you want a managed array you must &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;explicitly&lt;/span&gt; invoke the managed type:&lt;/p&gt;&lt;p&gt;int[] &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;someInts&lt;/span&gt; = {1,2,3}; // declares a managed array in C# but an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;unmanaged&lt;/span&gt; array in C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;CLI&lt;/span&gt;&lt;/p&gt;&lt;p&gt;array&lt;int&gt;^ &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;someInts&lt;/span&gt; = {1,2,3}; // what C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;CLI&lt;/span&gt; requires&lt;/p&gt;&lt;p&gt;Then there are time-honored C++ restrictions that, however necessary in the early 1970's, are useless today. For instance, the C++ compiler insists on reading a source file from top to bottom.&lt;/p&gt;&lt;p&gt;ref class A { B^ _b; }; // error: compiler can't find definition of B, even though it's on the next line&lt;br /&gt;ref class B {};&lt;/p&gt;&lt;p&gt;And so the programmer resorts to a forward declaration, just to make the compiler shut up:&lt;/p&gt;&lt;p&gt;ref class B; // declares B but doesn't define it&lt;br /&gt;ref class A { B^ _b; }; // compiler willing to be patient now&lt;br /&gt;ref class B {}; // definition of B&lt;/p&gt;&lt;p&gt;In the next post I'll look at whether the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;unmanaged&lt;/span&gt; legacy of C++ can help us (or force us) to write better managed code.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-3498243694357161839?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/3498243694357161839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=3498243694357161839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3498243694357161839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/3498243694357161839'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/split-brain-language.html' title='The Split-Brain Language'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-6628498609891653432</id><published>2008-03-03T12:45:00.001-05:00</published><updated>2008-03-03T13:01:02.926-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Another Monster</title><content type='html'>I now learn that there's a contemporary band out there named "&lt;a href="http://www.amazon.com/s/ref=nb_ss_gw/105-1074408-5430836?url=search-alias%3Daps&amp;amp;field-keywords=glorious+monster&amp;amp;x=0&amp;amp;y=0"&gt;Glorious Monster&lt;/a&gt;". According to &lt;a href="http://www.popmatters.com/pm/music/reviews/54052/glorious-monster-adventures-on-earth/"&gt;this review&lt;/a&gt; their music is "moody, electro-pop", and includes the lyric: “Am I a brain / Or is my brain me / Consciousness or biology?” I gotta love that, must give them a listen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-6628498609891653432?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/6628498609891653432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=6628498609891653432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6628498609891653432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6628498609891653432'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/another-monster.html' title='Another Monster'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-1939018776498707725</id><published>2008-03-03T00:25:00.000-05:00</published><updated>2008-03-07T09:19:14.731-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ as a Domain Modelling Language</title><content type='html'>In &lt;em&gt;Object Thinking&lt;/em&gt; David West says that C++ "inhibits the direct expression of application designs in any domain except that of the computer itself". In other words, C++ is great if you need to be intensely aware of the machine, but if you need to model a domain outside the machine -- say, an order entry system -- then C++ &lt;em&gt;inhibits&lt;/em&gt; you. He doesn't spell out what's so inhibiting about it, but no doubt he's thinking of the complexity of the language.&lt;br /&gt;&lt;br /&gt;When COM was king, Visual C++ was the only Microsoft language that let you really understand how COM worked and fully exploit what COM could do. A lot of us who struggled to program COM in C++ fancied we could design better programs in C++ than in Visual Basic. But did the ability to express &lt;em&gt;COM&lt;/em&gt; better bring along the power to express the problem domain better?&lt;br /&gt;&lt;br /&gt;I am going to argue on this blog that C++, whether in its traditional &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;unmanaged&lt;/span&gt; form or in .NET C++/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CLI&lt;/span&gt;, is as strong a language for domain modelling as any other, and I'll try and show that it is actually stronger than simpler languages like C# and Java. If that succeeds, then C++ will have a legitimate claim to being the best language (still) for all-purpose programming.&lt;br /&gt;&lt;br /&gt;Perhaps I'll not succeed in persuading you, or even myself. But to find out, I (and perhaps you) will need to start attempting to use C++ to accomplish the same sorts of programming tasks that we now do in our "day job" languages (C#, in my case). Now that nothing forces me to use C++, it will take some extra effort to find out if I want to use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-1939018776498707725?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/1939018776498707725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=1939018776498707725' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/1939018776498707725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/1939018776498707725'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/c-as-domain-modelling-language.html' title='C++ as a Domain Modelling Language'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-452667588427710943.post-6560007037323745348</id><published>2008-03-02T21:23:00.000-05:00</published><updated>2008-03-02T21:33:59.590-05:00</updated><title type='text'>The Title</title><content type='html'>"The Glorious Monster" is the title of an all-percussion piece by Max Roach. He composed it for his 8-man drumming ensemble, MBoom!, and it appears on MBoom!'s first album. It is notable for featured solos on xylophone, vibraphone and orchestral tom-toms.&lt;br /&gt;&lt;br /&gt;"The Glorious Monster" was, for a long time, my pet nickname for my favorite and most dreaded progamming language, C++. The name has a sense of dread and delight, no?&lt;br /&gt;&lt;br /&gt;And now I also apply that name to my favorite and most dreaded server technology, Microsoft BizTalk Server 2006 R2.&lt;br /&gt;&lt;br /&gt;So this is going to be a blog about programming and software design, but maybe with some music thrown in. Let C++, BizTalk and Max Roach be the blog's xylophone, vibraphone and tom-toms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/452667588427710943-6560007037323745348?l=gloriousmonster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gloriousmonster.blogspot.com/feeds/6560007037323745348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=452667588427710943&amp;postID=6560007037323745348' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6560007037323745348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/452667588427710943/posts/default/6560007037323745348'/><link rel='alternate' type='text/html' href='http://gloriousmonster.blogspot.com/2008/03/title.html' title='The Title'/><author><name>Richard Broida</name><uri>http://www.blogger.com/profile/14283782549603072469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_NqTtDtHnOIQ/R-2gNVb0JWI/AAAAAAAAAAU/0UJlfntJtbg/S220/Picture+7.jpg'/></author><thr:total>1</thr:total></entry></feed>
