<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>El Grego</title>
        <link>http://geekswithblogs.net/gwiele/Default.aspx</link>
        <description>BizTalk blog</description>
        <language>nl-BE</language>
        <copyright>Gregory Van de Wiele</copyright>
        <managingEditor>Gregory@eai.be</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>El Grego</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/gwiele/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>CharacterTranscoder pipeline component on github.com</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/09/21/134943.aspx</link>
            <description>&lt;a style="font-family: Tahoma;" href="http://github.com/gvdwiele/CharacterTranscoder"&gt;CharacterTranscoder&lt;/a&gt;&lt;span style="font-family: Tahoma;"&gt; is a&lt;/span&gt;&lt;span style="font-family: Tahoma;" title="Click to edit!" class="edit" id="repository_description" rel="/gvdwiele/CharacterTranscoder/edit/update"&gt; BizTalk pipeline component + stream class that can transcode a stream from a configurable source encoding to a configurable target encoding.&lt;br /&gt;
&lt;br /&gt;
The source is now available on &lt;a href="http://github.com"&gt;github.com&lt;/a&gt;. &lt;/span&gt;Git takes some time to get used to. &lt;br /&gt;
I managed to put something online somehow, which means everybody should be able to :-)&lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Microsoft also offered a free support case for the&lt;a href="http://geekswithblogs.net/gwiele/archive/2009/08/03/133872.aspx"&gt; FFASM bug&lt;/a&gt; and the behavior is already reproduced at their side. Nice!&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134943"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134943" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/134943.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/09/21/134943.aspx</guid>
            <pubDate>Mon, 21 Sep 2009 12:50:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/134943.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/09/21/134943.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/134943.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/134943.aspx</trackback:ping>
        </item>
        <item>
            <title>Question marks in your flatfile output CONTINUED</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/08/06/133935.aspx</link>
            <description>&lt;span style="font-family: Tahoma;"&gt;In order to get the FFASM encoding bug looked at, Microsoft Support asked me to call an 0800 number and provide payment info :-(&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Since I am still convinced every bug should be reported I will try again next month when I have my client's support contract details (the guy with the info is on a very long summer holiday :).&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;In the mean time I have developed a custom fix which you may use at your own risk... &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;This &lt;a href="http://codepaste.net/e1s7d4"&gt;TranscodingStream&lt;/a&gt; class is a binary transformation stream decorator: while reading, the underlying bytes are transcoded on the fly from a source to a target encoding. Both source and target encoding are configurable.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;You can make your own pipeline component that replaces the incoming message its bodypart stream by this TranscodingStream (and a context property to dynamically set the target encoding). In fact I have built it already, if you want it just let me know. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;This way you can leave the FFASM to its default (UTF8) and let this new component do the work right-after. Also mind that the TranscodingStream doesn't prefix a BOM, which could be problem for UTF-16 (for the simple reason I didn't need it, like in YAGNI).&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;In retrospect my stream decorator could have been done a bit better. It violates the &lt;a href="http://www.lostechies.com/blogs/chad_myers/archive/2008/03/07/pablo-s-topic-of-the-month-march-solid-principles.aspx"&gt;single responsibility principle&lt;/a&gt; since it does decoding + encoding in 1 step. This explains the Read's method cyclomatic complexity being too high. A cleaner design would have been: DecodingStream decorator that translates whatever source encoding to Unicode + EncodingStream decorator that translates Unicode to whatever target encoding.  &lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133935"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133935" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/133935.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/08/06/133935.aspx</guid>
            <pubDate>Thu, 06 Aug 2009 08:19:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/133935.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/08/06/133935.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/133935.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/133935.aspx</trackback:ping>
        </item>
        <item>
            <title>Question marks in your flatfile output?</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/08/03/133872.aspx</link>
            <description>&lt;span style="font-family: Tahoma;"&gt;Or how to fix a bug while introducing another one that's a lot nastier. Let's start by describing the original bug: the BizTalk flatfile assembler has issues with custom target (output) encodings.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;When compiling a custom pipeline with the FF assembler and configuring the 'target charset' in the pipeline designer everything works as expected and you will get your messages in the desired encoding.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;When you want to dynamically control the encoding, according to the docs, you should also be able to do this by writing the &lt;a href="http://msdn.microsoft.com/en-us/library/ee267840(BTS.10).aspx "&gt;XMLNORM.TargetCharSet&lt;/a&gt; property onto the message context. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;In my case the desired output was 'Windows-1252'. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;I was able to verify that this technique indeed works using a default XmlTransmit assembler pipeline.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;With a custom FF assembling pipeline though I got a question mark in the flatfile output for every special character.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Since the only differentiator being the pipeline I am quite confident that it's a FFASM assembler bug. &lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Now to come to the second problem: apparently this bug was already discovered over &lt;a href="http://www.eggheadcafe.com/conversation.aspx?messageid=31508710&amp;amp;threadid=31508710"&gt;a year ago &lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;and I guess it was never reported to Microsoft (since it is still not fixed in BTS 2009, the RC I checked). &lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;It might be a regression since people reported that it only happens from version 2006 R2. &lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;Instead, the author decided the shortest path to success was to develop a &lt;a href="http://www.eggheadcafe.com/conversation.aspx?messageid=31508717&amp;amp;threadid=31508710"&gt;custom encoding pipeline component&lt;/a&gt; that takes care of the output encoding. The issue showed up a few more times since then and it looks like other people were &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/biztalkgeneral/thread/d4ece651-d48e-4d5d-805b-d18e487984e5"&gt;inspired&lt;/a&gt; by his workaround.&lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Now take a good &lt;a href="http://www.eggheadcafe.com/conversation.aspx?messageid=31508717&amp;amp;threadid=31508710"&gt;look again&lt;/a&gt; at how the author implemented the custom encoding. There is something terribly wrong with it.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;HINT: the input encoding is UTF-8, a variable byte length encoding. Inside the loop a fixed number of bytes is read from the input. Got it?&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133872"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133872" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/133872.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/08/03/133872.aspx</guid>
            <pubDate>Mon, 03 Aug 2009 09:54:05 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/133872.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/08/03/133872.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/133872.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/133872.aspx</trackback:ping>
        </item>
        <item>
            <title>BizTalk Arbitrary Binary Email Attachments (or how to fix unreadable attachments)</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/07/13/133454.aspx</link>
            <description>&lt;span style="font-family: Tahoma;"&gt;Recently we have been receiving another series of complaints from clients that had trouble reading the pdf attachment of a BizTalk dynamic generated email. For some years we have been using the MIME encoder pipeline component and dynamically buildup our emails as multi-part message from inside orchestration. We got the mustard from &lt;/span&gt;&lt;a href="http://winterdom.com/2006/08/arbitrarybinaryattachmentstomultipartmessages" style="font-family: Tahoma;"&gt;here&lt;/a&gt;&lt;span style="font-family: Tahoma;"&gt;. &lt;/span&gt;&lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; As said, it wasn't the first time we had these complaints. But it was always for a small minority of users only. Hence it sounded more like a user-specific issue. Since the smoke kept coming back I decided to start looking for a small fire at our side. Which I think I found:&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; By default the MIME encoder pipeline component puts 'text/plain' as the MIME content-type. &lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;This will always work if your content is in fact of type 'text', but for all the other types such as a pdf it is not correct in the strict sense.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;Success will depend on the mail-client: apparently GMAIL doesn't care that much about it, same story for the majority of our Exchange/Outlook clients. If you want 100% coverage, the only good solution is to specify the correct MIME type for every attachment. For a pdf attachment it should be 'application/pdf':&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
 &lt;span style="font-family: Tahoma;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;img alt="" src="http://img.skitch.com/20090713-xykphcb1tb7794nwp8mqfmimee.png" style="font-family: Tahoma;" /&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-style: italic;"&gt;Please note that the BizTalk 2006/2009 SMTP adapter can take care of the correct MIME encoding (but if the content is already MIME encoded inside the pipeline it is kept intact). According to various blog entries the new SMTP adapter's MIME encoder will take care of setting the correct content-type. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Tahoma;"&gt;&lt;br /&gt;
I preferred a small update to my existing code instead of a global rewrite to leverage these new options. &lt;br /&gt;
Luckily you can override the MIME encoder's default by specifying the content type of the XLANGPart like this:&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; part.SetPartProperty(typeof(Microsoft.XLANGs.BaseTypes.ContentType), contentType);&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; The only thing left to-do is to find out the correct MIME-type per attachment. &lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;I have wrote a small function that does exactly that by using the file extension:&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;img alt="" src="http://img.skitch.com/20090713-tuq9em8ji3d51a3qri7ngf1awq.png" style="font-family: Tahoma;" /&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
etc...&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;&lt;br /&gt;
The default content-type for unknown extensions is "application/octet-stream". &lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;This alone could have been enough to fix the issue but I've tried to put in as much detail and content-types as are documented &lt;/span&gt;&lt;a href="http://www.w3schools.com/media/media_mimeref.asp" style="font-family: Tahoma;"&gt;here&lt;/a&gt;&lt;span style="font-family: Tahoma;"&gt;. &lt;br /&gt;
&lt;br /&gt;
Here is a &lt;a href="http://users.telenet.be/elgrego/AttachmentHelper.cs"&gt;sample class&lt;/a&gt; (original sample credits go to &lt;a href="http://winterdom.com/"&gt;Tomas Restrepo&lt;/a&gt; with content-type update).&lt;br /&gt;
&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133454"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133454" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/133454.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/07/13/133454.aspx</guid>
            <pubDate>Mon, 13 Jul 2009 11:35:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/133454.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/07/13/133454.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/133454.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/133454.aspx</trackback:ping>
        </item>
        <item>
            <title>BAM Typed API alternative</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/06/23/133004.aspx</link>
            <description>&lt;span style="font-family: Tahoma;"&gt;The previous BAM portal post reminded me of some BAM classes I re-use but never blogged about... &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;  &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; Here is my small-scale proven semi-automated alternative based on the mapper pattern and nullable fields. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; The core functionality comes from a 'BAM gateway class' which is composed with a IMapper&amp;lt;A,B&amp;gt; instance, responsible for mapping strongly typed activities to an object array. This object array contains the activity property names and corresponding values just like the eventstreams likes them, ready to be writen. Here is my favorite mapper:&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; public class NonDefaultValuesMapper : IMapper&amp;lt;IActivity, object[]&amp;gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; It is generic in the sense that it just checks if the activity instance properties are set or not. It also maps class' property-name to the activity field-name. The activity class of-course has to support this and use nullable fields/properties for the value typed fields. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; For every activity I write a state-only class that derives from my IActivity interface (a DTO object if you like). &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; public class TrainWaybillActivity : IActivity&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; {&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     const string _activityName = "TrainWaybill";&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     string _activityId;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     public TrainWaybillActivity(string activityId)&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     {&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;             this._activityId = activityId;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     }&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     string FromStationName { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     string ToStationName { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     DateTime? Start { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     DateTime? Sent { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     DateTime? Approved { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     DateTime? Denied { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     DateTime? Ready { get;set;}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; }&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; A gateway class (per activity) contains specific methods which cover all activity interaction necessary and that all BAM clients must use. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; Some of the gateway methods are intended for orchestration and accept a class based message parameter (created with xsd.exe, for XmlSerializer). &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; class TrainWaybillActivityGateway &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; {&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     public readonly string _activityID;     &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     IActivityWriter _writer;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     private IMapper&amp;lt;TrainWaybillActivity, object[]&amp;gt; _fieldMapper;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     private IMapper&amp;lt;IFTTOI, TrainWaybillActivity&amp;gt; _mapperIFTTOI;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     private IMapper&amp;lt;APERMS, TrainWaybillActivity&amp;gt; _mapperAPERMS;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     public void Start(IFTTOI waybill) {}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     public void WaybillSent() {}&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;     public void SetAcknowledged(APERMS acknowledgment)&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; }&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; This way messages can be passed in and be used to extract activity field values. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; I again use the mapper pattern for transforming messages to activities (such as IMapper&amp;lt;APERMS, TrainWaybillActivity&amp;gt;).&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; I also wanted the gateway classes to be universally usable: from orchestration, pipelines as well as from custom code. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; Therefore BizTalk has different evenstream classes with different behavior targeting different scenarios. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; Unfortunately they do not all derive from a common base EventStream interface so in order to make the gateway universal I had to create a custom 'IEventStream' interface. I had to create these 2 adapters:&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; The OrchestrationEventStreamAdapter delegates calls to the BizTalk static OrchestrationEventStream methods. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; The EventStreamAdapter is composed with a BizTalk EventStream instance and delegates all calls to this instance.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; The OrchestrationEventStreamAdapter has an empty Flush() implementation. It also throws an exception when  StoreCustomEvent is called. I could have removed this method from the interface (especially because I have no clue why anybody would want to use it). From MSDN documentation I learned that custom events are objects of type DelayedSpCall: A serialized stored-procedure call, which is just a form of a serialized command-object, queued for later execution (by the event bus in this case). Anybody??&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;  &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; This approach was used on several small-scaled BAM projects (well, large projects with small BAM requirements). &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; I am not sure if things have moved on since the GenerateTypedBAMAPI xsl based code generator. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; Maybe I should make a generator too?&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; All feedback is welcome.&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt; If the picture is not totally clear: here is some &lt;/span&gt;&lt;a style="font-family: Tahoma;" href="http://users.pandora.be/elgrego/BAM.zip"&gt;code&lt;/a&gt;&lt;span style="font-family: Tahoma;"&gt;.&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133004"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133004" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/133004.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/06/23/133004.aspx</guid>
            <pubDate>Tue, 23 Jun 2009 15:31:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/133004.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/06/23/133004.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/133004.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/133004.aspx</trackback:ping>
        </item>
        <item>
            <title>Configuring a Static WCF Port to Behave as a Dynamic Port</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/06/16/132843.aspx</link>
            <description>&lt;font size="2"&gt;&lt;span style="font-family: Tahoma;"&gt;Yesterday I've tried to reproduce the scenario 'Configuring a Static Port to Behave as a Dynamic Port' from the excellent MSDN article '&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd203050.aspx" style="font-family: Tahoma;"&gt;Consuming and Hosting WCF Services with Custom Bindings in BizTalk Server&lt;/a&gt;&lt;span style="font-family: Tahoma;"&gt;' but with a twist: instead of writing the BTS.OutboundTransportLocation context property inside a custom pipeline component I've tried doing this from inside orchestration. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;It didn't work. I had to do it differently. Let me explain...&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;If you manually promote a custom value for the BTS.OutboundTransportLocation on your outgoing message inside an orchestration message construct and send the message to a static send port, the BTS.OutboundTransportLocation property is magically overwritten with the address from the statically configured send port. The fact that this property is automatically set by the engine seems logical because it is necesarry for a regular static send. I only hoped it wouldn't be overriden when already present.  &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Why magically? Because it doesn't show up like that in HAT! If you look into HAT the message-context 'before pipeline execution' you can see that the custom value is there: it was successfully written to the context inside the orchestration. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;But by adding some traces to a dummy pipeline component I can CONFIRM that those custom values are indeed already erased and reset to the address from the send port configuration @pipeline-execution. This indicates that there is an additional step after tracking and before the adapter triggers the pipeline execution, where the engine adds all sorts of properties from the port configuration. So e&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-family: Tahoma;"&gt;ven when you are using a passthru send pipeline the message 'after pipeline execution' has a different context then 'before pipeline execution'. &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-family: Tahoma;"&gt;Another clear case of opacity ;-) &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-family: Tahoma;"&gt;And that's where my confusion came from. One might wonder why they didn't choose to track&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-family: Tahoma;"&gt;&lt;/span&gt; the 'before pipeline execution' right after the engine added its properties. There is probably a good reason for that...&lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Anyway, I needed to take a step back and reconsider the approach from the article ie setting the value inside a pipeline component. But hardcoding or configuring an address inside a pipeline isn't really 'dynamic'. &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;So here is the final piece of the puzzle: &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Roll in your own 'address' property that is written on the message context inside orchestration and is re-written into the BTS.OutboundTransportLocation property during pipeline execution.&lt;/span&gt;&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132843"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132843" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/132843.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/06/16/132843.aspx</guid>
            <pubDate>Tue, 16 Jun 2009 09:26:09 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/132843.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/06/16/132843.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/132843.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/132843.aspx</trackback:ping>
        </item>
        <item>
            <title>BAM Portal Related Document Links That Actually Work</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/05/28/132469.aspx</link>
            <description>&lt;span style="font-family: Tahoma;"&gt;For a couple of years I have been tracking message-bodies inside BAM but only recently I was asked to make a BAM Portal document link to these message bodies that actually works :-) &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;Strangely enough I couldn't find any solution on Google so I tried to figure this one out myself. Guess what? I had to jump through quite a few hoops. I decided to share those hoops with my other 2 blog readers (yes you).&lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;/span&gt; &lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;span style="font-family: Tahoma;"&gt;Hoop 1: the 1st and most obvious step is getting the message bodies into the BAM tables using the eventstreams. This can be done using the &lt;a href="javascript:void(0);/*1243515417933*/"&gt;AddReference&lt;/a&gt; method.  &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;&lt;br /&gt;
es.AddReference(activityName, activityID, referenceType, referenceName, referenceData, longReferenceData);&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;/div&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;Put the body string inside longReferenceData and freely choose your referenceType and referenceName. Making referenceType unique comes in handy later because you can query on a specific referenceType thru the web service (and not on referenceName).    &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;/div&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;You should now have your body inside the BAM table (check: bam_{activityName}_AllRelationships). You can easily query his table via the BAM Management web service like this:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width="50%" align="middle" src="http://img.skitch.com/20090528-pq6mtbsh4hfyuban37bagub5ub.png" alt="web service" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;span style="font-family: Tahoma;"&gt;Hoop 2: You need to find a way to query the BAM management web service for a specific reference through a simple link instead of a http post soap request. &lt;br /&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Tahoma;"&gt;&lt;br /&gt;
&lt;/span&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;Jesus and Joe's great &lt;a href="javascript:void(0);/*1243515551537*/"&gt;BAM paper&lt;/a&gt; suggest a restful API which sounds great but unfortunately isn't a fact yet. My workaround consists of httpget-enable the web service. Adding this snippet inside the system.web section of the web.config file in the folder C:\Program Files\Microsoft BizTalk Server 2006\BAMPortal\BAMManagementService will get you exactly that:&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-left: 80px;"&gt;&lt;span style="font-family: Tahoma;"&gt;    &amp;lt;webServices&amp;gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;        &amp;lt;protocols&amp;gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;            &amp;lt;add name="HttpGet"/&amp;gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;        &amp;lt;/protocols&amp;gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;    &amp;lt;/webServices&amp;gt;&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;/div&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;Now the web service sample invoke page will also show a sample 'get' request:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width="50%" align="middle" src="http://img.skitch.com/20090528-xeq79fmjaqh66mt9j48j4icey3.png" alt="asmx sample" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br style="font-family: Tahoma;" /&gt;
&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;span style="font-family: Tahoma;"&gt;Hoop 3: You need to put a link to the http get url as a 'document link'  on the BAM portal. You can do this again via the stream by adding a reference of type 'DocumentUrl'  and putting the relative link inside the referenceData field. &lt;br /&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;&lt;br /&gt;
es.AddReference(activityName, activityID, &lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;'DocumentUrl'&lt;/span&gt;&lt;span style="font-family: Tahoma;"&gt;, referenceName, referenceData, "");&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;span style="font-family: Tahoma;"&gt;&lt;/span&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;My link string format looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;string link =&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;/div&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Tahoma;"&gt;            string.Format(&lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;            "/bam/bammanagementservice/bammanagementservice.asmx/GetReferences?viewName={0}&amp;amp;activityName={1}&amp;amp;activityInstanceId={2}&amp;amp;referenceType={3}", &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;            "put your activity view name here", &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;            "put your activity view name here", &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;            "activityID here", &lt;/span&gt;&lt;br style="font-family: Tahoma;" /&gt;
&lt;span style="font-family: Tahoma;"&gt;            "referenceName here");&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That's about it.&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132469"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132469" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/132469.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/05/28/132469.aspx</guid>
            <pubDate>Thu, 28 May 2009 20:02:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/132469.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/05/28/132469.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/132469.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/132469.aspx</trackback:ping>
        </item>
        <item>
            <title>Some thoughts on Service Location (SL) and Dependency Injection (DI) with BizTalk...</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2009/02/24/129636.aspx</link>
            <description>&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;My motivation for this post comes from the fact that I could only find 1 blogpost related to BizTalk and DI: it was about DI using Spring.net and late binding, and it was in fact rather about SL. I'm not pretending to be an expert on the subject but a second blogpost with a little bit of background on the subject of dependency resolution in the context of BizTalk can surely make a difference...&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
When developing O.O. components there are 2 popular patterns for organizing your objects' dependencies in an elegant way:&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
1. service locator pattern aka 'dependency pull': your library objects explicitly make a call to a pre-configured locator-component in order to resolve all dependencies.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
2. dependency injection: your library objects' missing dependencies are part of the public interface and are automatically managed and injected by an IoC container that you specifically configure per client application, which is referred to as 'wiring up' the components.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; There are multiple variants of how the injection can happen: setter based= properties are set automatically, constructor based=missing constructor parameters are resolved automatically, etc...&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
Also, to further complicate things, you might be tricked into thinking you are doing proper DI because you are using a DI framework while you are in fact applying the locator pattern. In reality you could might as well be abusing your container by letting your objects pull out dependencies from it directly, via a hard-coded reference to the container, or via service locator gateway to the container. Then you are in fact doing service location, regardless of the container framework. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
Theoretically though, both patterns are different and purists &lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/10/03/WhatisallthefuzzaboutthenewcommonIServiceLocator.aspx"&gt;say&lt;/a&gt; that in practice a clean design should choose 1 of both and stick to the choice. Personally, I totally agree...&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;   &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; Others are convinced they have valid reasons to exceptionally break this rule. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; For example some prefer using constructor-based dependency injection for all concern-specific dependencies + exceptional service location for all your 'infrastructure dependencies'. The main reason for this is trying to have at least as possible setters or constructor parameters for cross cutting concerns, which would otherwise only obfuscate the self explaining nature of a nice clean O.O. object. Logging could for-example be considered a cross cutting concern which you'd rather not have an interface for in every other constructor. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
This way the constructors remain mostly clean, but you still end-up with 1 non-concern specific parameter-constructor or setter (for passing the service locator). The static gateway pattern as described and explained in great detail by JP Boodhoo is a nice testable solution for not having to pass around a service locator to every object in your model, while not having to revert to hard to test singletons.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
When creating an über static gateway, the ServiceLocatorGateway (JP calls it the 'DependencyResolver', &lt;a href="http://blog.jpboodhoo.com/TheStaticGatewayPattern.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://blog.jpboodhoo.com/TheStaticGatewayPattern.aspx"&gt;here&lt;/a&gt;), you can 'completely eliminate the need for static fields and initialization method in about everything but the main Static Gateway itself' to use his words. His sample also has a method for registering components.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; Again, some purists say it is still bad to have occasional service location when primarily relying on DI.  &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; If you'd still want to do mainly dependency injection with only occasional service resolution, then the locator should only serve as a gateway to the container. You would prefer a service locator with no support for registration. You should also never reference a specific container framework directly from a service locator implementation. Define a service locator interface. The CSL, &lt;a href="http://www.codeplex.com/CommonServiceLocator"&gt;CommonServiceLocator&lt;/a&gt;, can be used as an extra level of separation and is the best option. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; This way you don not force clients to use a specific DI framework and they can benefit from a ready-made CSL specific adapter for most of the DI frameworks. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
Unfortunately static gateways, as well as any other library-scoped static variable, will not always play nice along BizTalk.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; Since all BizTalk artifacts such as orchestrations and all referenced libraries are deployed to and are run by a single logical application, the XLANG engine hosts,  everything that gets loaded will run inside the same application domain by default (yes, I know this can be changed through xml configuration) and will be static for the whole collection of BizTalk apps. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; So static gateways work well with 1 BizTalk app but as soon as 2 BizTalk applications both reference the same library, both will call 'InitializeWIth' (or similar) and they will override each others' settings at runtime.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
If you are forced to use a third party library relying on a static gateway, and you need to find a workaround/hack to make it work with multiple BizTalk apps without changing the global xml config: I'v got a &lt;a href="http://users.pandora.be/elgrego/scopedservicelocator%20-%20public.zip"&gt;sample workaround&lt;/a&gt; (BTS2009, VS.NET2008). I have defined a ServiceLocator decorator for CSL that adds some dynamic reflection-based behavior: the call-stack is walked to find a specific ServiceLocator implementation that was registered for the assembly calling the library. Of course this has a performance-impact. Of course, it is only sample... &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
        /// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         /// When the library depends on static initialization by multiple BizTalk Apps, &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         /// make sure every BizTalk application decorates using the AssemblyServiceLocator&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         /// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         public IServiceLocator GetAssemblyServiceLocator()&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         {&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;             return new AssemblyServiceLocator(GetServiceLocator());&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;         }&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
The correct functionality of DI also relies on the fact that the caller 'wires up' the components, and that you have an 'entry point' into the container: a boot object is retrieved from the container with a Start() method. But not so in case of BizTalk.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; BizTalk artifacts are service hosted and fired without you having very much control over it. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; How exactly depends on the type of Biztalk component: a pipeline component, a receiver / send adapter or in most cases: an orchestration instance. So what if you were handed over a shared library that relies on the caller for its DI container configuration, and you need to use it from an XLANG? &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
An orchestration instance is externally managed and can dehydrate and rehydrate after a host instance restart (or maybe inside another host instance on a different server). So when to initiate a service locator or to wire up the IoC container? &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
Since we haven't got any obvious entry point for an orchestration you need to create multiple 'static entry points' and use the library in a stateless manner to be on the safe side. At most you could optimize by making the container a static.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; Route all calls from your orchestration to your library, via a solution-specific gateway class and put the container creation code inside the static initializer, which is guaranteed to run once per application domain. You need to mirror all the library methods you want to call from XLANG, and instantiate library-variables by using the static container variable (or alternatively create the container and dispose of it for every method in the wrapper, which will have a bigger performance impact; another option is to create inner containers in case of autofac).  &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
What about using container-managed instances as orchestration variables? Is this safe? I don't know...&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; If the library also relies on a client side statically initialized SL: after rehydration the locator won't be initialized by default to start with. Some containers can also generate 'factory' delegates (which forward an object creation request to a constructor, filling in all missing parameters from whats defined in the container) which might be a problem.  &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; I have tried to make the container an orchestration instance variable to keep the wiring intact after runtime serialization...but then you would have to pass this into the wrapper class for every method call. So it needs some further investigation.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
As usual a little disclaimer:&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt; There is no guarantee whatsoever and nothing has been thoroughly tested.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129636"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129636" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/129636.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2009/02/24/129636.aspx</guid>
            <pubDate>Tue, 24 Feb 2009 17:26:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/129636.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2009/02/24/129636.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/129636.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/129636.aspx</trackback:ping>
        </item>
        <item>
            <title>Biztalk Server AS2 certificates</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2008/12/17/127997.aspx</link>
            <description>&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;Astute readers might have noticed I have switched to a more narrow skin named  'Leafy skin'. That, of course, is not a coincidence. This technically lightweight blog posting, apart from its subject, also serves a hidden agenda:  scraping the dust of my rusty old blog. Thanks to this updated skin and by ensuring the first post showing up is dated from 2008, it is my goal to mislead many of you who never take the time to scroll down and check the date of the post just underneath. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
line feed, &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
line feed, &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
line feed, &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
give it up. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
To the subject of the day.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
Find a friend that has switched to the white side. He might be able to help you create a self signed certificate with his certificate assistant in Mac Os X keychain that works for BizTalk.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
Apparently BizTalk is very picky about the key usage extensions (or the extended key usage extensions, don't know). I couldn't get it working right-away using the command line tools on my Windows machine. So I gave it a try on my Mac: &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
&lt;img alt="" src="http://img.skitch.com/20081217-nkf2hdtrjaujw3d9syfjtxebn2.png" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
&lt;img alt="" src="http://img.skitch.com/20081217-x15smq36q5fmkm7xgwceafxeuq.png" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
And the AS2 connections just worked, no more complaints. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Tahoma;"&gt;&lt;font size="2"&gt;&lt;br /&gt;
All the Biztalkers that don't have Apple friends and need an AS2 certificate that works may drop me an email. I can sell those private keys on Ebay later on, for a good cause :-)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127997"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127997" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/127997.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2008/12/17/127997.aspx</guid>
            <pubDate>Wed, 17 Dec 2008 18:26:31 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/127997.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2008/12/17/127997.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/127997.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/127997.aspx</trackback:ping>
        </item>
        <item>
            <title>About compatibility…</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2005/09/26/55007.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;The BizTalk 2006 version and API is 100% backwards compatible with the 2004 version and API. BizTalk 2006 is built against .NET2.0 while the BizTalk 2004 assemblies were built against .NET1.1. Although I&amp;#8217;m not working for Microsoft this surely means that for the BizTalk 2006 version the Microsoft BizTalk product team has:&lt;BR&gt;&amp;nbsp;&lt;BR&gt;1. &lt;A href="http://msdn.microsoft.com/library/en-us/dnnetdep/html/netfxcompat.asp?frame=true"&gt;Checked&lt;/A&gt; the re-used BizTalk 2004 code parts against the new .NET version for incompatibilities and resolved all of them for the BizTalk 2006 release&lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;2. Rewritten parts of the original BizTalk 2004 implementation in order to benefit from the new framework version (such as a performance gain) without breaking compatibility with the previous BizTalk version. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;3. Added a lot of new BizTalk functionality written from scratch in .NET2.0 code. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;In general .NET framework supports installing and running different framework versions side-by-side on a single machine. By default your custom old .NET1.1 applications will run with .NET2.0 when you run them on a machine with 2.0 installed. If you detect incompatibilities you can instruct .NET to load the old runtime version you originally built your application against (by means of configuration). Or you can choose to fix the incompatibility in your code and recompile for .NET2.0. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Whole different story for your newly written .NET2.0 applications: they only run with 2.0 or higher compatible version (for example 2.1).&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Microsoft BizTalk 2006 is a &amp;#8216;new application&amp;#8217; and is &amp;#8216;built against&amp;#8217; .NET 2.0 (beta) and as a consequence will only run with .NET framework 2.0 or higher compatible version. The BizTalk 2006 host instances will load and execute code using CLR .NET2.0 and as a consequence the assemblies it loads will&amp;nbsp;execute within .NET 2.0. Your assemblies used inside orchestrations, your custom adapters and your pipeline components and their dependencies will all have to be compatible with .NET2.0. You don&amp;#8217;t have the option to instruct to load the .NET framework version you built your assembly against because loading 2 different CLR versions in the same process is not supported. Here is a good post from Junfeng Zhang about the subject: &lt;A href="http://blogs.msdn.com/junfeng/archive/2005/05/26/422014.aspx"&gt;The CLR Side by Side and Compatibility&lt;/A&gt;&lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;This means that as a BizTalk developer you should at least perform step 1 from the above steps for all your BizTalk 2004 custom code. If you&amp;#8217;re lucky you detect no incompatibilities and it will work by default. But if you do detect incompatibilities&lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt; then you&amp;#8217;ll have to re-code and re-compile. For more information on the .NET CLR see &lt;A href="http://blogs.msdn.com/suzcook/default.aspx"&gt;Suzanne Cook&amp;#8217;s weblog&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=55007"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=55007" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/55007.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2005/09/26/55007.aspx</guid>
            <pubDate>Mon, 26 Sep 2005 14:53:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/55007.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2005/09/26/55007.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/55007.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/55007.aspx</trackback:ping>
        </item>
        <item>
            <title>BizTalk 2006 SDK: new BaseAdapter </title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2005/09/23/54729.aspx</link>
            <description>&lt;P&gt;The SDK of BizTalk 2006 Beta2 will include a new version of the adapter base classes. These will not be backwards compatible with the original BizTalk 2004 SDK classes.&lt;/P&gt;
&lt;P&gt;The API has changed and the internals have changed (uses System.Transactions for example). Adapters that have been originally built with the 2004 adapter base classes should continue to use and be deployed with this version.The .NET1.1 compiled assembly of the old base classes should by default work with.NET2.0 CLR. &lt;/P&gt;
&lt;P&gt;You could of course&amp;nbsp;prefer to re-compile for .NET2.0 but you will get some warnings during compilation time.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=54729"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=54729" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/54729.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2005/09/23/54729.aspx</guid>
            <pubDate>Fri, 23 Sep 2005 11:40:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/54729.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2005/09/23/54729.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/54729.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/54729.aspx</trackback:ping>
        </item>
        <item>
            <title>Some great news...</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2005/04/06/28439.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Although I'm still recovering from an earlier *shock* (from when I received the totally awesome MVD award), I'm proud to announce &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;that as of this month I'm a genuine, fully-fledged Microsoft MVP for BizTalk Server. This is really fantastic!&lt;/FONT&gt; &lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=28439"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=28439" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/28439.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2005/04/06/28439.aspx</guid>
            <pubDate>Wed, 06 Apr 2005 22:08:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/28439.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2005/04/06/28439.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/28439.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/28439.aspx</trackback:ping>
        </item>
        <item>
            <title>‘Processing convoy workflow scenarios’ patent</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2005/03/21/26864.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;For those who are wondering why I&amp;#8217;m not blogging very regularly: It&amp;#8217;s not that I&amp;#8217;m lying on my back and sun-bathing on the beach or anything (which was never been an option since it has been snowing a lot),&amp;nbsp;I'm just rather busy lately. I was doing a SP1 evaluation earlier, for which MS has granted me a prestigious award for &amp;#8216;Most Valuable Debugger&amp;#8217;. It&amp;#8217;s a kind of a joke, but nevertheless I&amp;#8217;m very proud and amused at the same time :-). I guess I will have to change my blogging style in order to make it up in the future. So expect some more &amp;#8216;publish some ideas quickly&amp;#8217; posts soon&amp;#8230; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.freshpatents.com/Processing-convoy-workflow-scenarios-dt20050120ptan20050015776.php"&gt;Here&lt;/A&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt; is something very interesting - I&amp;#8217;ve discovered it some time ago when I was searching for general background information about convoys. This explains why it&amp;#8217;s so hard to find anything theoretical and not directly from MS. More precisely, the &amp;#8216;Processing convoy workflow scenarios&amp;#8217; patent has been linked to 8 different people, amongst them 1 very famous blogger named Lee. &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=26864"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=26864" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/26864.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2005/03/21/26864.aspx</guid>
            <pubDate>Mon, 21 Mar 2005 14:06:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/26864.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2005/03/21/26864.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/26864.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/26864.aspx</trackback:ping>
        </item>
        <item>
            <title>BizTalk WMI programming: How to write cleaner WMI code a lot faster</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2005/03/16/26469.aspx</link>
            <description>&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;I&amp;#8217;ve seen numerous handy WMI scripts and code samples from fellow BizTalk bloggers and from the BizTalk help. Amazingly every one of these samples use late-bound objects calls to invoke methods and access properties from the BizTalk management objects. This makes the code rather verbose, it&amp;#8217;s very inconvenient and also very error prone. There's a better way to write your WMI code. Therefore you have to download first and then install the &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=62d91a63-1253-4ea6-8599-68fb3ef77de1&amp;amp;DisplayLang=en"&gt;&lt;FONT face=Verdana size=2&gt;'Management (WMI) Extensions for Visual Studio .NET 2003 Server Explorer'&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;. This tool makes WMI programming much easier and enjoyable (at least for me). It's no rocket science or anything but it comes in very handy for making your first steps on the WMI moon. You don&amp;#8217;t have to take my word on it, look for yourself:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi7.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 372px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 202px" tabIndex=-1 height=202 src="http://users.pandora.be/elgrego/WMI/wmi7.jpg" width=372 border=0 v:shapes="_x0000_i1026" xmlns:v="urn:v" ?&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi6.jpg"&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 300px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 286px" tabIndex=-1 height=286 src="http://users.pandora.be/elgrego/WMI/wmi6.jpg" width=300 border=0 xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" v:shapes="_x0000_i1026" xmlns:v="urn:v"&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;COMMENT&gt;&lt;/COMMENT&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;FONT style="FONT-SIZE: 12pt"&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;After having installed the extension you can go into your Visual Studio&amp;#8217;s Server Explorer and select the namespace you want to add management classes from (select &amp;#8216;add classes&amp;#8217; from the context menu). &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi1.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 384px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 280px" tabIndex=-1 height=280 src="http://users.pandora.be/elgrego/WMI/wmi1.jpg" width=384 border=0 v:shapes="_x0000_i1028" xmlns:v="urn:v"&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 320px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 392px" tabIndex=-1 height=392 src="http://users.telenet.be/elgrego/WMI/wmi2.jpg" width=320 border=0 xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" v:shapes="_x0000_i1028" xmlns:v="urn:v"&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT style="FONT-SIZE: 12pt"&gt;&lt;/FONT&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;After selecting the desired classes from your namespace (&amp;#8216;root&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; \&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;MicrosoftBizTalkServer&amp;#8217; I assume) the Server Explorer window will contain a list of the selected management object-types. &lt;FONT style="FONT-SIZE: 12pt"&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;It also shows a list of all instances for a given class when you click it. When having selected an instance, all of its properties will be shown inside the property-window (you could modify them from there too, but I wouldn&amp;#8217;t recommend doing it this way). &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi9.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 354px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 241px" tabIndex=-1 height=241 src="http://users.pandora.be/elgrego/WMI/wmi9.jpg" width="354%" xmlns:v="urn:v" _x0000_i1029?&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;FONT style="FONT-SIZE: 12pt"&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;Also methods can be invoked on classes and instances; this is nice for testing purposes. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;STRONG&gt;*No big deal*&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; you are thinking of course; now pay attention:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;When selecting 'Generate Managed Class' from the menu, the extension will automatically generate a wrapper class and add it to your solution&amp;#8217;s startup project (it targets your .net project language). &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi3.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 353px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 165px" tabIndex=-1 height=161 src="http://users.pandora.be/elgrego/WMI/wmi3.jpg" width="351%" xmlns:v="urn:v" _x0000_i1030?&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi8.jpg"&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 192px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 165px" tabIndex=-1 height=165 src="http://users.telenet.be/elgrego/WMI/wmi8.jpg" width=192 border=0 xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" v:shapes="_x0000_i1030" xmlns:v="urn:v"&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;The generated classes have strongly typed properties and methods, so you have access to and can invoke by simply using their name (even enum-types are created). You benefit from good old Intellisense again. Behind the covers the generated wrapper classes still use late-bound objects and calls of course, but you don&amp;#8217;t have to care at least about this, nor write ugly late binding code. Now you can write clean high-level WMI code a lot faster. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;Take a look at this little WMI sample (where I make a call to &amp;#8216;GetInstances&amp;#8217;: this overloaded method is created automatically and it requires only the where-part of the WQL query to return a typed collection of your WMI object-type).&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi4.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 626px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 257px" tabIndex=-1 height=233 src="http://users.pandora.be/elgrego/WMI/wmi4.jpg" width="540%" xmlns:v="urn:v" _x0000_i1032?&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;Try to rewrite the following method (please don&amp;#8217;t focus on the language change; it&amp;#8217;s purely for educational purposes. I&amp;#8217;ve never executed a single line of this code :-)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi11.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 732px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 272px" tabIndex=-1 height=242 src="http://users.pandora.be/elgrego/WMI/wmi11.jpg" width=719 border=0 v:shapes="_x0000_i1033" xmlns:v="urn:v"&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;Into this:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;A href="http://users.telenet.be/elgrego/WMI/wmi10.jpg"&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 730px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 167px" tabIndex=-1 height=159 src="http://users.pandora.be/elgrego/WMI/wmi10.jpg" width=719 border=0 v:shapes="_x0000_i1034" xmlns:v="urn:v"&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0cm; MARGIN-TOP: 0cm; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT face=Verdana size=2&gt;Which one do you prefer? &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=26469"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=26469" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/26469.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2005/03/16/26469.aspx</guid>
            <pubDate>Wed, 16 Mar 2005 11:00:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/26469.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2005/03/16/26469.aspx#feedback</comments>
            <slash:comments>16</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/26469.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/26469.aspx</trackback:ping>
        </item>
        <item>
            <title>Enterprise Library is -also- there...</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2005/02/01/21645.aspx</link>
            <description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;A Biztalker's focus is primarily on the BizTalk SP1 release nowadays so I thought it might be useful to post about the arrival of the &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Enterprise&lt;/st1:place&gt;&lt;/st1:City&gt; library. Yep, it's finally out! For more information check &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/entlib.asp"&gt;MSDN&lt;/A&gt;.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;Here are 2 fine bloggers that blog about the EL like we do on BTS:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;A href="http://weblogs.asp.net/scottdensmore/"&gt;Being Scott Densmore&lt;/A&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;A href="http://weblogs.asp.net/tomholl/"&gt;Tom Hollander's blog&lt;/A&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=21645"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=21645" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/21645.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2005/02/01/21645.aspx</guid>
            <pubDate>Tue, 01 Feb 2005 15:00:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/21645.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2005/02/01/21645.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/21645.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/21645.aspx</trackback:ping>
        </item>
        <item>
            <title>The BizTalk SQL Server Adapter isolation level</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/11/25/15974.aspx</link>
            <description>&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;The isolation setting is fixed and is SERIALIZABLE. So beware that even your most basic receive locations that only execute those very simple SQL statements such as 'select * from tablename' can generate locks. BTW, this is a general misconception: usually people think that select-statements never lock resources. Nothing is less true of course. &lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;While having a shared lock on a range of keys, in addition to the keys themselves having locked, no records can be inserted.&amp;nbsp; &lt;BR&gt;Here's a sample to demonstrate the effects of the SERIALIZABLE isolation setting: &lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Open your SQL Query analyzer&lt;BR&gt;Open 2 seperate query windows to the local Pubs database &lt;BR&gt;Copy &amp;amp; paste these samples statements:&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Window A:&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;SET TRANSACTION ISOLATION LEVEL SERIALIZABLE&lt;BR&gt;BEGIN TRAN&lt;BR&gt;Select * from authors where contract = 1&lt;BR&gt;GO&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Window B:&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;BEGIN TRAN&lt;BR&gt;INSERT INTO [pubs].[dbo].[authors]([au_id],[au_lname], [au_fname],&amp;nbsp; [contract])&lt;BR&gt;VALUES('666-66-6666','Grego', 'El', 1)&lt;BR&gt;GO&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Now, if you try to execute both queries you will see that the second query will always be blocked by the first, irrespective of the order. You can immediately unblock the process by typing, selecting and executing 'ROLLBACK TRAN' in the blocking transaction's window. Now repeat this test and replace 'SERIALIZABLE' with 'READ COMMITTED' and you will see that when you first start batch A, you can still execute Batch B simultaneously (which wasn't so with the SERIALIZABLE level).&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Here are the isolationlevel-enumerator values from system.data:&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;[Flags]&lt;BR&gt;public enum IsolationLevel&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Fields&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chaos = 0x10,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReadCommitted = 0x1000,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReadUncommitted = 0x100,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RepeatableRead = 0x10000,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serializable = 0x100000,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unspecified = -1&lt;BR&gt;}&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;The BizTalk SQL adapter always uses 0x100000. You can check this by viewing the requested locks in Enterprise Manager:&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;A href="http://users.pandora.be/elgrego/SQLTransportRequiredLocksForSelect.JPG"&gt;&lt;IMG style="WIDTH: 795px; HEIGHT: 457px" tabIndex=-1 src="http://users.pandora.be/elgrego/SQLTransportRequiredLocksForSelect.JPG"&gt;&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Now, I believe the above will rarely be a problem in real-life. You should only expect performance problems when you have a lot of transactions and a lot of simultaneous lock requests for the same heavy resource while having a bad database-design (having no or having the wrong indexes). You should also know that lock waits are perfectly normal: a simple wait for a lock is different from a deadlock. The waiting process will get the lock anyway when the process that's holding the lock completes. 
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;If you use SERIALIZABLE my best advice is to tune you sql statements&amp;nbsp;for performance (also having correct db-design, normalization, the right indexes,...) in order to&amp;nbsp;make&amp;nbsp;your select statement execute as fast as possible .&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;FONT color=#ff0000&gt;**UPDATED**&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;Is there a solution? &lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;If you try to add the 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED' to a select-statement based receive location then you may have no issues at design time. But when you try to add a RL based on this SQL statement in the&amp;nbsp; BizTalk Explorer you will get a 'The SQL statement must be either a select or an exec' error. &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;You can add &amp;#8216;With (Readcommitted)&amp;#8217; to the tables in the select, or data modification statement. 'Select * from authors with (Readcommitted) where contract = 1'. This will override the default Serializeable isolation level, and keep the number of locked records to a minimum. Credits go to Dirk Gubbels from Microsoft...&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV align=left xmlns="http://www.w3.org/1999/xhtml"&gt;SQL Server locking experts' comments are very welcome...&lt;/DIV&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=15974"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=15974" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/15974.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/11/25/15974.aspx</guid>
            <pubDate>Thu, 25 Nov 2004 22:35:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/15974.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/11/25/15974.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/15974.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/15974.aspx</trackback:ping>
        </item>
        <item>
            <title>About publisher policy assembly chaining</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/11/23/15741.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I've just found out the hard way that GAC'ed publisher policy assemblies do not chain. When you have a policy.1.0, redirecting the binding of assembly v1.0.0.0 to assembly v1.1.0.0 and also having a policy.1.1, for redirecting the binding of assembly 1.1 to assembly 1.2, this doesn't result in a binding to the assembly 1.2 when your app requests 1.0 (but rather to 1.1). If you want this kind of binding-behavior I guess you will have to use publisher policy versioning.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Why do I tell all this? Well, I've never read anything about this before so I thought it would be nice to mention here. &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I also want to thank Alan Shi, who confirmed and explained this binding behavior to me. For more excellent information regarding the GAC and Fusion you should definitely visit his blog &lt;a href="http://blogs.msdn.com/alanshi"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=15741"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=15741" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/15741.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/11/23/15741.aspx</guid>
            <pubDate>Tue, 23 Nov 2004 17:14:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/15741.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/11/23/15741.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/15741.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/15741.aspx</trackback:ping>
        </item>
        <item>
            <title>The BizTalk Configuration Dilemma</title>
            <link>http://geekswithblogs.net/gwiele/archive/2004/11/17/15168.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I’ve watched several times Jurgen Willis’ excellent online presentation about the Business Rule Engine (BRE). One of the BRE usage scenarios demoed by him contains a sample orchestration that uses the BRE to dynamically configure a delay time. &lt;br/&gt;This confused me since it added another option to accomplish dynamic configuration of business processes. We are definitely facing a configuration dilemma now; here are some of the alternatives:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul xmlns="http://www.w3.org/1999/xhtml" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc"&gt;
&lt;li&gt;&lt;strong&gt;Config Files&lt;/strong&gt;&lt;br/&gt;Use the default .NET config files as the store (BTSNTSvc.exe.config) for your key-value pairs or custom types. You can easily read the settings using the default .net classes from inside your orchestrations.&lt;br/&gt;This is definitely the easiest option. But it makes your business processes host-instance depended (every host instance can be differently configured). It’s also not easily deployable, when having different environments you will have to manually copy paste your configuration sections, you could easily make mistakes. I guess there are no tools available for the business users to manage the values.&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul xmlns="http://www.w3.org/1999/xhtml" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc"&gt;
&lt;li&gt;&lt;strong&gt;Business Rule Engine&lt;br/&gt;&lt;/strong&gt;Although I have the feeling the BRE and its terminology is not really geared towards this simple functionality (storing key-value pairs). Most of the BizTalk included samples use schema-facts, some of them use class-facts but none addresses the config management purpose which was demoed in the presentation. &lt;br/&gt;I’ve tested a couple of things myself, including calling the BRE from code inside an orchestration by using several Stringbuilder instances or a Hashtable as the argument(s). This seemed a very strange solution to me (it’s not easy to define the rules/vocabularies when having several instances of the same class).  Another option is to create a custom configuration class which gets and sets the values, this will simplify the vocabulary. Or you could always use the classic approach and create a custom schema to hold your configuration values.&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul xmlns="http://www.w3.org/1999/xhtml" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc"&gt;
&lt;li&gt;&lt;strong&gt;The Configuration Management Application Block for .NET&lt;br/&gt;&lt;/strong&gt;I have no prior experience with this block. Is this the perfect partner for BizTalk to do business process configuration management? Until now I’ve not heard of any samples/guidelines proving this to be a winner-combo. For more info check &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/cmab.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/cmab.asp&lt;/a&gt;. Anyone?&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Finally I emailed Jurgen, who appeared to be a very friendly and helpful man. He pointed me out that the BRE is in fact not specifically targeted at this scenario and that, in general, it focuses more on complex types than on using value types (especially when multiple instances are evaluated in the same policy).  &lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=15168"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=15168" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/15168.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/11/17/15168.aspx</guid>
            <pubDate>Wed, 17 Nov 2004 11:25:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/15168.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/11/17/15168.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/15168.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/15168.aspx</trackback:ping>
        </item>
        <item>
            <title>Executing pipelines from inside an orchestration: Introducing the LOOPBACK adapter</title>
            <link>http://geekswithblogs.net/gwiele/archive/2004/11/10/14737.aspx</link>
            <description>&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;Let's go over some of the out-of-the-box options for executing a pipeline from inside your orchestration.&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;It struck my mind first that the MSMQT adapter IS in fact the messagebox.&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;OL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=1 xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;&lt;STRONG&gt;MSMQT&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;UL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=disc xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;Set up a schedule with 1 MSMQT send port and 1 MSMQT receive port&amp;nbsp;sharing&amp;nbsp;the same&amp;nbsp;MSMQT queue name (for example ' loopback' would make a lot of sense) 
&lt;LI&gt;Create a correlation type and set based on the my MSMQT label property. 
&lt;LI&gt;Assign the MSMQT message-label to a newly created GUID inside your orchestration.&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;Try to&amp;nbsp;do a send and a receive&amp;nbsp;and you will see&amp;nbsp;that&amp;nbsp;your pipelines will be executed. As a test I could successfully parse a message from inside a schedule.&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;Another very simple option is&amp;nbsp;using&amp;nbsp;the HTTP adapter, credits go 100% to &lt;A href="http://www.traceofthought.net/default.aspx"&gt;Scott Colestock&lt;/A&gt;. Scott used this as just a temporary approach to get past this problem, and then switched to the loopback adapter below...&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;OL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=1 xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;&lt;STRONG&gt;HTTP&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;UL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=disc xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;Use a solicit-response send port&amp;nbsp; 
&lt;LI&gt;Use bogus HTTP page that simply echoes the content back.&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;% @ webhandler language="C#" class="LoopbackHandler" %&gt;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;using System; &lt;BR&gt;using System.Web; &lt;BR&gt;using System.IO; &lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;public class LoopbackHandler : IHttpHandler &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public bool IsReusable &lt;BR&gt;&amp;nbsp;&amp;nbsp; { get { return true; } } &lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; public void ProcessRequest(HttpContext context) &lt;BR&gt;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using(StreamReader sr = new StreamReader(context.Request.InputStream, true))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamWriter sw = new StreamWriter(context.Response.OutputStream, sr.CurrentEncoding );&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(sr.ReadToEnd());&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Flush();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;} &lt;BR&gt;&lt;/DIV&gt;
&lt;UL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=disc xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;Call it loopback.ashx for example, use IIS to host the page&amp;nbsp;(for example &lt;A href="http://localhost/loopback/loopback.ashx"&gt;http://localhost/loopback/loopback.ashx&lt;/A&gt;).&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;This can be easily explained because it requires no knowledge of correlation types and correlation sets, since you are using request/response ports the whole way. If simplicity is the main goal then this solution is probably superior to the MSMQT one. &lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;OL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=1 xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;&lt;STRONG&gt;Custom&amp;nbsp;LOOPBACK Adapter.&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;I also had another idea.&amp;nbsp;Why not&amp;nbsp;make your own loopback adapter by&amp;nbsp;writing a bogus solicit-response adapter&amp;nbsp;that&amp;nbsp;returns a response BizTalk IBaseMessage that is&amp;nbsp;a copy of the original request message.&amp;nbsp;Recreate&amp;nbsp;the original individual message-parts&amp;nbsp;and&amp;nbsp;copy of the&amp;nbsp;request stream to the response stream.&amp;nbsp;It's very simple -&amp;nbsp;download&amp;nbsp;my &lt;A href="http://users.pandora.be/elgrego/Loopback%20Adapter%20MSI.zip"&gt;sample loopback adapter &lt;/A&gt;here.&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;UL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=disc xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;It's a custom coded VB.NET non-batched but non-blocking (async) adapter that really doesn't do anything. 
&lt;LI&gt;Uses limited memory-footprint, streams to disk.&amp;nbsp; 
&lt;LI&gt;To install use the MSI package. Don't forget to add the adapter by using BizTalk administration... 
&lt;LI&gt;It auto generates the transmit location&amp;nbsp;URI (in fact it's a GUID). I also added a Boolean property to specify&amp;nbsp;whether you want the original message and part properties to be copied on to the response-message and parts. &lt;/LI&gt;&lt;/UL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;Here are some of the benefits:&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;UL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=disc xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;Trigger pipeline execution from inside your orchestration. Just define your outbound and inbound pipelines and they will be executed. 
&lt;LI&gt;Send pipeline errors can be catched by adding a deliveryfailure-exception handler. Also&amp;nbsp;adapter exceptions can be catched there, but since&amp;nbsp;this adapter really&amp;nbsp;doesn't do anything this will be very rare (at least I hope so). 
&lt;LI&gt;Receive pipeline errors can be catched by adding a general SOAP-exception handler. 
&lt;LI&gt;Execute mappings from inside your orchestration by defining a map on the inbound and outbound port. When you use the later, mapping failures&amp;nbsp;will be catched by the SOAP-exception handler. 
&lt;LI&gt;It's a black-hole adapter if you want.&amp;nbsp;It can be used to ignore&amp;nbsp;the processing of certain incoming&amp;nbsp;messages. Make a send-port, name it 'VANISH'&amp;nbsp;and subscribe to a given message-type or receive-port name for example. 
&lt;LI&gt;It's very useful for doing in-order processing. You can for example receive messages from MSMQT through a pass-through pipeline (which is recommended BTW) and &lt;U&gt;process messages in-order from start-to-end while doing exception-handled parsing/validation/mapping by implementing a serial convoy&lt;/U&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;Here's a &lt;A href="http://users.pandora.be/elgrego/Loopback%20Sample1.zip"&gt;sample&amp;nbsp;project &lt;/A&gt;that demonstrates some of the benefits.&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV align=center xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;A href="http://users.pandora.be/elgrego/sample-loopback1.JPG"&gt;&lt;IMG style="BORDER-RIGHT: #000000 1pt solid; BORDER-TOP: #000000 1pt solid; BORDER-LEFT: #000000 1pt solid; WIDTH: 540px; BORDER-BOTTOM: #000000 1pt solid; HEIGHT: 571px" tabIndex=-1 src="http://users.pandora.be/elgrego/sample-loopback1.JPG" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xd:inline="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"&gt;&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;BR&gt;Remarks:&lt;/DIV&gt;
&lt;DIV xmlns="http://www.w3.org/1999/xhtml"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;UL style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type=disc xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;LI&gt;The code can definitely be improved. It has been written very quickly in the scope of a POC. Alternatively you could make a better one&amp;nbsp;using the&amp;nbsp;adapter base classes and the wizard. In fact I'm hoping the community will see the benefit of&amp;nbsp;this loopback adapter and someone else will make a better one. I'm not (yet, ha!)&amp;nbsp;a streaming and multi-threading expert. 
&lt;LI&gt;Apparently&amp;nbsp;it is advised&amp;nbsp;to return a read-only forwarding stream to the receive-pipeline. At least until SP1 arrives. I just used the VirtualStream class from the BizTalk Streaming assembly. 
&lt;LI&gt;Do not forget, and as usual: there's no warranty at all. I haven't tested this very thoroughly yet so&amp;#8230;use the adapter at your own risk.&lt;/LI&gt;&lt;/UL&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=14737"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=14737" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/14737.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/11/10/14737.aspx</guid>
            <pubDate>Wed, 10 Nov 2004 09:24:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/14737.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/11/10/14737.aspx#feedback</comments>
            <slash:comments>20</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/14737.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/14737.aspx</trackback:ping>
        </item>
        <item>
            <title>Leveraging MSMQT acknowledgments </title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/09/20/11380.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;You all probably know that MSMQ stands for 'Microsoft Message Queuing' and MSMQT is the acronym for describing the BizTalk MSMQ adapter. A quick reminder for those who already forgot: the "T" in MSMQT stands for transactional (not “Transport”)&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Probably less common knowledge is what MSMQ acknowledgments (ACKs) are, so I have chosen this to be the topic for my first post. What are ACKS and in what flavors do they come?&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Acknowledgments are system-generated confirmation messages that are sent to the administration queues specified by the sending application. When an application sends a message, it can request that Message Queuing return acknowledgment messages indicating the success or failure of the original message.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;A reach acknowledgment tells you that the message reached its destination queue. &lt;/li&gt;
&lt;li&gt;A receive acknowledgment basically tells you that some application successfully received a message from a queue. &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;Both acknowledgment types have positive (ACK) and negative (NACK) variants indicating - this is too straightforward - a success or a failure: positive arrival acknowledgments, positive read acknowledgments, negative arrival acknowledgments, and negative read acknowledgments. &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;If you want to get rapidly acquainted with acknowledgments you should definitely read this excellent article on MSDN: &lt;a href="http://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnetasync2.asp"&gt;Reliable Messaging with MSMQ and .NET &lt;/a&gt;(Building Distributed Applications)&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Personally having no prior experience with MSMQ acknowledgments, I started my first tests having big expectations. I built a .NET application and sent my 1st MSMQ message with an ACK-level set to full_reach and full_receive using a non-transactional admin queue. (my machine is a simple MSMQ independent client so I send to other machines using outgoing queues). Also not wanting to be too haughty I targeted my first message send at a regular MSMQ server. As expected my message arrived quickly at its destination queue where I subsequently could read the message through code.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Wonderful, I had 2 ACKs in my sending machine's admin queue: &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;strong&gt;ACK1 MSMQ message class = The message reached the queue. &lt;br/&gt;ACK2 MSMQ message class = The message reached the queue.&lt;/strong&gt;&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;Since this first test being a big success I already wondered what would happen if I'd send the same message again, but now targeted to the BizTalk MSMQT adapter. &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I quickly set up a BizTalk MSMQT receive location with a passthru pipeline and a file send port subscribing to the MSMQT port. After BizTalk created the flat output message I was really surprised - even a bit disappointed at the same time - because I only found 1 acknowledgment in my admin queue:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;strong&gt;ACK1 MSMQ message class = The message reached the queue.&lt;/strong&gt;&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;Where the heck did the receive ack go? Did I make a mistake? I did have a valid subscription and it was consumed correctly because I had a file. After doing some research, newsgroup postings and e-mailing, a very helpful person from MS gave me the answer: 'For Biztalk, multiple "applications" can receive the message and MSMQT doesn't know how many got it, so it was decided that receive ACKs would only confuse the customers.'&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Slowly getting over my depression I started focusing on the ACK I did receive. I started to think about the opportunities this ACK creates: you now have a level of traceability at the sender's side. For my next test I sent a message to an invalid MSMQT queue - more precisely I used an invalid name being a non existing queue on MSMQT. Admin queue:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;strong&gt;NACK1 MSMQ message class = The destination queue does not exist&lt;/strong&gt;&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Event viewer: Destination queue 'wrong queue' cannot be reached. For local BizTalk queues, the receive location may not exist or may be disabled. &lt;/li&gt;
&lt;li&gt;HAT: Nothing&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Exactly what I expected! This reminded me of some interesting must-read posts on this subject by Darren Jefford's blog titled &lt;a href="http://blogs.msdn.com/darrenj/archive/2004/03/31/105025.aspx"&gt;MSMQT, Transactional Queues and Xml Validating Pipelines &lt;/a&gt;and &lt;a href="http://blogs.msdn.com/darrenj/archive/2004/03/31/105036.aspx"&gt;MSMQT: Debugging and Getting hold of malformed messages&lt;/a&gt;. &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Conclusion: if the sending of a message fails the sender receives a NACK message in the admin queue and eventually after exhaustion of the retries MSMQ places the bad message from the outgoing queue in the dead-letter queue (optional: see below for more information). Darren Jefford advices to always use passthru pipelines for MSMQT receive locations. Now let's ignore his advice and try the opposite. What would happen if I would send a message to an existing queue but an exception is raised from inside the receive pipeline? &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I quickly configured my MSMQT receive location to use a pipeline implementing the flat file parse (FFDASM) component. Next I intentionally sent a malformed FF message to the MSMQT queue - generating a parsing error. Here is what I got in my admin queue:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;strong&gt;NACK1 MSMQ message class = The destination queue does not exist &lt;/strong&gt;&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;I expected to have a more meaningful description as for example 'Parsing failed', but I received the same - now totally irrelevant - description. As a consequence the message sender cannot see the difference between these 2 different types of errors. I asked my MS contact again and he gave me this explanation: 'because we cannot define new values for MSMQMessage.Class, we were pretty much stuck with the existing ones.' This means, I think, that they were stuck with the standard MSMQ API error enumerators. &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;So here's my conclusion: If you send messages to MSQMT receive locations you should always choose between &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;(A) Use a passthru pipeline on the receive location or&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;(B) Use a custom pipeline but specify a dead-letter queue for the message and/or implement acknowledgments/logic to handle failed messages due to pipeline execution errors.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;As for the sake of completeness I also want to mention that MSMQT also sends positive ACKS for each successful message receival. This assures us that your message was handled fine and survived pipeline execution without any error.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Now having all these extra bits of information regarding ACKS I'd like to finish by issuing a little warning. An example of a bad design would be to create some kind of service that sends messages 1 by 1 to a MSMQT node - while waiting in between each send for an acknowledgment. This would probably work from a functionality point of view but never from a performance perspective. Read this: &lt;a href="http://www.4guysfromrolla.com/webtech/041300-1.5.shtml"&gt;'Using the Right Tool for the Right Job' &lt;/a&gt;chapter&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;To finish my article I'd like to comment on the overall very fine transcript of the &lt;a href="http://support.microsoft.com/default.aspx?scid=%2Fservicedesks%2Fwebcasts%2Fen%2Ftranscripts%2Fwct030204.asp"&gt;Microsoft Support WebCast - BizTalk Message Queuing in Microsoft BizTalk Server 2004 &lt;/a&gt;where Rajan Dwivedi states 'As far as interaction between MSMQT and MSMQ is concerned, MSMQT can receive messages from MSMQ, and it can also send messages to MSMQ without any difference.' Well Rajan, I'm not so sure ;-)&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11380"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11380" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/11380.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/09/20/11380.aspx</guid>
            <pubDate>Mon, 20 Sep 2004 05:30:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/11380.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/09/20/11380.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/11380.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/11380.aspx</trackback:ping>
        </item>
        <item>
            <title>Custom BizTalk Instrumentation with EIF </title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/09/20/11382.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;The MSBTS_ServiceInstanceSuspendedEvent WMI event is fired by the BizTalk Engine whenever a "message" is suspended. This happens (amongst other reasons) when all send retries fail (for example when a connected system is down) or whenever exceptions occur during the pipeline execution (for example when message validation fails).&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;For this little article I'd like to focus on the first category: outbound suspended messages caused by systems being temporarily unavailable. Usually admins like to receive notifications whenever one of their systems goes off-line. You can set up a NT service that consumes BizTalk MSBTS_ServiceInstanceSuspendedEvents and notifies the admins for example by e-mail (to the Biztalk admin and/or appropriate system admin). They can then fix the problem and bring their failed system back up.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Now the problem is that you still have to deal with those suspended messages that sit in the message box as a result of the failure. They simply have to be resubmitted and this can be done using the HAT tool. This can be a quite repetitive task that's very prone to errors (try resending the wrong message). In many cases an automatic solution would make a better one. Let's see what can be done:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;One could react by upping the retry count to its maximum value? Ok, this would automate things a lot but has 1 very big disadvantage: you lose your notifications because the message will never suspend :-( Who will bring the system back online? You NEED these notifications so this isn't a viable solution: you have to lower the retry count back to an acceptable level. Is there another solution? Yes there is: add your own custom WMI events to BizTalk Server!&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;What if we could add extra custom events that create the functionality to receive notifications upon the retry itself - without requiring a message to be suspended? This sounds very complicated but is in fact a very easy task when you use the Microsoft Enterprise instrumentation Framework to create a custom event class.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;For those that never heard of it, this is what&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenethowto14.asp"&gt; EIF &lt;/a&gt;can do for you! From the EIF README:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;'The Microsoft Enterprise Instrumentation Framework (EIF) enables you to instrument .NET applications to provide better manageability in a production environment. EIF is the recommended approach for instrumenting .NET applications. It provides a unified API for instrumentation that uses the existing eventing, logging, and tracing mechanisms built into the Microsoft Windows® operating system, such as Windows Event Log, Windows Trace Log, and Windows Management Instrumentation (WMI). Members of an operations team can use existing monitoring tools to diagnose application health, faults, and other conditions.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;An application instrumented with EIF can provide extensive information such as errors, warnings, audits, diagnostic events, and business-specific events.'&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;The EIF also forms the basis/prerequisite for the Microsoft .NET Logging Application Block. This block represents the 'new' way to do logging /exception management - replacing the older EMAB (exception management application block).&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Let us - by means of example - add the following events to our BizTalk Server 'event source':&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;TransportLostEvent: a system goes down for the 1st time = First failure&lt;/li&gt;
&lt;li&gt;TransportRecoveredEvent: a system comes back up again = A retry succeeds&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I have used very basic sample classes for these events. Feel free to e-mail me to get the sample - I haven't got uploads working yet :-(&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;The context of the message will provide us with our basic building blocks and determine when these events have to be triggered. The 'http://schemas.microsoft.com/BizTalk/2003/system-properties' namespace contains 3 unpromoted properties named ActualRetryCount, RetryCount and RetryInterval. &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;RetryInterval is a static value representing the value set on the Send Port. &lt;/li&gt;
&lt;li&gt;RetryCount - on the other hand is - very confusing - not a static value but represents the number of retries still available - and is lowered by 1, by the Engine for each failed transmission attempt. &lt;/li&gt;
&lt;li&gt;ActualRetryCount, which BTW returns no results when you look for it in the help, is also a dynamic value that is incremented by 1 for each transmission attempt.&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;So how can we make this all fit together, wherefrom can we trigger our events? There are 2 scenarios possible: a custom adapter and a custom pipeline component (for integrating with existing adapters).&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Here's a sample piece for a custom adapter:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;'If message transmission succeeded&lt;br/&gt;oProperty = msg.OriginalMessage.Context.Read("ActualRetryCount","&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;")&lt;br/&gt;If Not oProperty Is Nothing Then&lt;br/&gt;'A previously failed send operation has now succeeded actualretrycount&amp;gt;0 and msg.TransmitSuccesfull is true)&lt;br/&gt;If System.Convert.ToInt32(oProperty) &amp;gt; 0 Then&lt;br/&gt;myTransportRecovered = New TransportRecoveredEvent&lt;br/&gt;obj = msg.OriginalMessage.Context.Read(InterchangeIDProperty.Name.Name, InterchangeIDProperty.Name.Namespace)&lt;br/&gt;If Not IsNothing(obj) Then myTransportRecovered.InterchangeId = System.Convert.ToString(obj)&lt;br/&gt;'Continue to build and finally raise the event&lt;br/&gt;.&lt;br/&gt;myEventSource.Raise(myTransportRecovered)&lt;br/&gt;Else&lt;br/&gt;'If message transmission failed&lt;br/&gt;'If actualretrycount is 0 then this means that system failed for the 1st time: raise TransportDownEvent&lt;br/&gt;oProperty = msg.OriginalMessage.Context.Read("ActualRetryCount", RetryIntervalProperty.Name.Namespace)&lt;br/&gt;If Not oProperty Is Nothing Then&lt;br/&gt;If System.Convert.ToInt32(oProperty) = 0 Then&lt;br/&gt;myTransportLost = New TransportLostEvent&lt;br/&gt;and so on...&lt;br/&gt;myEventSource.Raise(myTransportLost)&lt;br/&gt;.&lt;br/&gt;A very nice idea would be to develop an "EIF enhanced" version of the adapter base classes that trigger additional events. Anyone interested?&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I've also succeeded into making a sample pipeline component that raises the TransportLostEvent from inside a pipeline - creating the opportunity to integrate this functionality with existing adapters. I tested this very rapidly/effectively thanks to the &lt;a href="http://martijnh.blogspot.com/2004/08/update-pipeline-component-wizard-v-13.html"&gt;pipeline component wizard &lt;/a&gt;by Martijn Hoogendoorn...&lt;br/&gt;The downside for pipelines is that - if I'm correct - we have no notion of the current transmission attempt result from inside (the result) so we cannot raise the TransportRecoveredEvent. What we do have, is the result of the previous attempt and the actualretrycount - creating the possibility to trigger the TransportLostEvent upon the first message retry.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;As a final note always remember that WMI events do have a performance impact. So you may want to just send them to the WTE (trace events) sink if you don't need them and performance is an issue. The nice thing about the EIF is that this can be done dynamically and doesn't require a restart of the 'Event Source' or changing the pipeline. See the configuration section in the readme of the EIF for more info.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Here are some stats for the curious - Event sink Average events per second:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Windows Event Log 220&lt;/li&gt;
&lt;li&gt;MSMQ 120&lt;/li&gt;
&lt;li&gt;WMI 520 &lt;/li&gt;
&lt;li&gt;SQL Server Basic Log 300 &lt;/li&gt;
&lt;li&gt;SQL Server Flexible Log 70&lt;/li&gt;
&lt;li&gt;EMAB with the Windows Event Log 120&lt;br/&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11382"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11382" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/11382.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/09/20/11382.aspx</guid>
            <pubDate>Mon, 20 Sep 2004 05:34:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/11382.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/09/20/11382.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/11382.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/11382.aspx</trackback:ping>
        </item>
        <item>
            <title>Doing fast and easy mapping updates with BizTalk 2004 </title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/09/20/11381.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Do you remember those good old BizTalk 2002 days when you only had to make a couple of clicks through the BizTalk messaging manager to refresh a mapping? Well it's time to share with you a nice technique that makes BizTalk 2004 mapping updates just as easy to make and deploy:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;For this technique to work you have to make sure you always compile and distribute your mappings into a 'mapping only' assembly - this will simplify things a lot. Do not put your referenced schemas inside this mapping assembly. &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Keep always track of the version-number your mapping assembly has (by setting the version number in the assembly config file.). Remember that version numbers are in the format "Major.Minor.Build.Revision". &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Deploy your finished solution into your production environment. This can be done in a variety of ways: using an msi or you could just deploy assemblies manually using the deployment wizard. Usually you make this decision depending on the complexity of your solution. &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Now you discover a mapping error requiring an update after everything is already deployed. You are afraid to touch the installed assemblies - you know how complicated things can get when undeploy redploy. You don't want to break any dependencies or anything...but it's not a breaking change - just a fix - changing a couple of mapping links... &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;The solution: Just recompile your updated mappings project and up the version number and deploy your updated assembly using the deployment wizard while leaving your old assembly in place. You can deploy your new assembly to the GAC and optionally - not mandotary - also into BizTalk. This makes then a total of 2 versions of your mapping assembly deployed side-by-side into Biztalk at the same time (the original and the updated one). This doesn’t affect your running solution at all, because BizTalk references mappings strongly, it will still keep using the original assembly from the GAC. &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Now change the .NET assembly binding behavior by inserting a binding redirection into the XML config file.&lt;br/&gt;You can do binding redirections on both application level (BTSNtsvc.exe.config in our case) and on machine level by updating the machine.config file. You can update config files manually or use the .NET configuration framework mmc snap-in that we will use for simplicity sake. Here's a sample binding redirecting from my machine.config file: &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;  &amp;lt;runtime&amp;gt;&lt;br/&gt;    &amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;br/&gt;      &amp;lt;dependentAssembly&amp;gt;&lt;br/&gt;        &amp;lt;assemblyIdentity name="StoraEnso.Mappings.Fenix" publicKeyToken="15b134fbf6ea6bf5" /&amp;gt;&lt;br/&gt;        &amp;lt;bindingRedirect oldVersion="1.0.0.0" newVersion="1.1.0.0" /&amp;gt;&lt;br/&gt;      &amp;lt;/dependentAssembly&amp;gt;&lt;br/&gt;    &amp;lt;/assemblyBinding&amp;gt;&lt;br/&gt;  &amp;lt;/runtime&amp;gt; &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Recycle (restart) the BizTalk host instances - to recycle the app domains that use the mapping assembly. Voila: BizTalk is now using the new version! &lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;ul style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" type="disc" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;li&gt;Not happy with the result? Manually remove the binding redirection again or using the snap in, recycle the hosts and you are back to the old version, it's just that easy!&lt;/li&gt;&lt;/ul&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;For the curious: I've also tested BizTalk assembly redirections using a publisher policy assembly and it seems to work fine. Remember to up the Major or Minor part of the version for this to work. You now have the capability to create an msi that installs/uninstalls an updated mapping assembly.&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Additionally I'd also like to mention that binding redirections can be used for BizTalk schema assemblies too. This, though, creates extra complications because BizTalk will always match duplicate assemblies to a given message type if you have 2 versions deployed into BizTalk. As a consequence you will have to make all your receives/pipelines what I call 'Strongly Typed' and this indicates extra property promotion work (the type) and I had to play with SchemaWithNone in my code to make FFDASM and other pipeline components work correctly...&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;So I guess - never tested this myself - it's better to only GAC updated schema assemblies - if you'd want to use this technique at all for schema assemblies....&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;A final word of advice: technically it's possible to keep on patching forever and ever - though this would make a very bad practice ;-) &lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11381"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11381" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/11381.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/09/20/11381.aspx</guid>
            <pubDate>Mon, 20 Sep 2004 05:31:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/11381.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/09/20/11381.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/11381.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/11381.aspx</trackback:ping>
        </item>
        <item>
            <title>Rule engine - Another way to debug the rule engine</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/10/05/12186.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;This simulates an orchestration callrules action from code:&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;MyArrayList = new System.Collections.ArrayList();&lt;br/&gt;MyPolicy = new Microsoft.RuleEngine.Policy(YourPolicyName);&lt;br/&gt;MyTracer = new Microsoft.RuleEngine.DebugTrackingInterceptor();&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;You will have to create your facts in here. Use TypedXmlDocuments or custom objects (see the BizTalk help for samples)&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;MyArrayList.Add(MyFact1);&lt;br/&gt;MyArrayList.Add(MyFact2);&lt;br/&gt;MyPolicy.Execute(MyArrayList.ToArray(),MyTracer);&lt;br/&gt;MyPolicy.Dispose();&lt;br/&gt;System.Diagnostics.Trace.WriteLine(MyTracer.GetTraceOutput());&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;The above line will redirect the traces to the windows event trace.&lt;br/&gt;Use the excellent &lt;a href="http://www.sysinternals.com/ntw2k/freeware/debugview.shtml"&gt;debugview&lt;/a&gt; utility from sysinternals to view the traces.&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=12186"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=12186" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/12186.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/10/05/12186.aspx</guid>
            <pubDate>Tue, 05 Oct 2004 10:16:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/12186.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/10/05/12186.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/12186.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/12186.aspx</trackback:ping>
        </item>
        <item>
            <title>Flat File Parser Annotations</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/10/04/12124.aspx</link>
            <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Here's a &lt;a href="http://users.pandora.be/elgrego/Flat%20File%20Parsing.ppt"&gt;presentation&lt;/a&gt; containing an overview of the flat file parser annotations that can be manually inserted into the BizTalk message schema. This is part of a presentation I gave at the Belgian BTS user group meeting a couple of weeks ago. There is also a &lt;a href="http://users.pandora.be/elgrego/Parsing.zip"&gt;sample project&lt;/a&gt; containing different schemas per annotation showing each annotation's purpose. My main source of information was the BizTalk newsgroups where David Downing makes the beautiful weather for this topic. Just for the record: as usual everything is 'AS IS', so there's no warranty at all...&lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;/div&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;BTW this is my first post using the &lt;a href="http://weblogs.asp.net/guowu/category/6612.aspx"&gt;Simple Blog Editor InfoPath&lt;/a&gt; form that I found thanks to &lt;a href="http://sphear.demon.nl/weblogs/carlo"&gt;Capo&lt;/a&gt;… &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=12124"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=12124" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/12124.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/10/04/12124.aspx</guid>
            <pubDate>Mon, 04 Oct 2004 10:23:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/12124.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/10/04/12124.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/12124.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/12124.aspx</trackback:ping>
        </item>
        <item>
            <title>1st Post - Welcome!</title>
            <category>BizTalk - EAI - B2B</category>
            <link>http://geekswithblogs.net/gwiele/archive/2004/09/20/11379.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;'Hello world!': These are the words I&amp;#8217;d like to welcome you with. During the past couple of months I must have read almost every BizTalk blog available. Each and every one of them has proven to be an incredible source of information. More than once, fellow BizTalk bloggers have inspired me and provided me with extra insights and missing links for my customer projects. You have definitely proven to be one of my biggest assets - something which an independent consultant like me can only dream of. So now it's about time for me to do something in return... &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11379"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=11379" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gwiele/aggbug/11379.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gregory Van de Wiele</dc:creator>
            <guid>http://geekswithblogs.net/gwiele/archive/2004/09/20/11379.aspx</guid>
            <pubDate>Mon, 20 Sep 2004 05:20:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gwiele/comments/11379.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gwiele/archive/2004/09/20/11379.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gwiele/comments/commentRss/11379.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gwiele/services/trackbacks/11379.aspx</trackback:ping>
        </item>
    </channel>
</rss>