<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-8073758</id><updated>2009-07-15T01:02:22.989-04:00</updated><title type="text">BizTalk Server 2004 : B2B, EAI and .NET</title><subtitle type="html">“The significant problems we face cannot be solved at the same level of thinking we were at
when we created them.” — Albert Einstein</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/Biztalk2004ConsultantExperiences" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-8073758.post-112690141445038001</id><published>2005-09-16T16:08:00.000-04:00</published><updated>2006-10-09T06:38:41.646-04:00</updated><title type="text">I'm now blogging at..</title><content type="html">I'm now blogging at &lt;a href="http://www.geekswithblogs.net/devdutt10"&gt;Geeks-with-Blogs&lt;/a&gt;. C'ya there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-112690141445038001?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/112690141445038001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=112690141445038001" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/112690141445038001" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/112690141445038001" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2005/09/im-now-blogging-at.html" title="I'm now blogging at.." /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-111723503804890165</id><published>2005-05-27T18:51:00.000-04:00</published><updated>2005-05-27T19:12:28.803-04:00</updated><title type="text">About Zombies and Convoys...</title><content type="html">&lt;p&gt;This week was Load Testing week for our latest set of Interfaces. Incidentally, this was our first set of Interfaces which implemented Uniform Sequential Convoys in their Orchestrations. The implementation was more or less like &lt;a href="http://devdutt10.blogspot.com/2005/04/non-deterministic-sequential-convoys.html"&gt;my previous post&lt;/a&gt;. Meaning the convoys had a timeout mechanism, which lead the Orchestration to completion, if no new messages would arrive for a period of time.&lt;br /&gt;&lt;br /&gt;So far - so good. But under a realistic amount of load, we observed that almost 1 out of every 5-6 messages would fail to go through to the destination. The HAT would show the following:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://devdutt10.m6.net.16.m6.net/App/ZombieInHat.jpg" /&gt;&lt;br /&gt;&lt;strong&gt;Completed with discarded messages &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Of course the 1/5 is a very subjective number, depending upon the actual convoy implementation in question. After some snooping around (mostly at &lt;a href="http://blogs.msdn.com/biztalk_core_engine/archive/2004/06/30/169430.aspx" target="_blank"&gt;Lee Graber’s blog&lt;/a&gt;), I figured out that the source of the problem. But no amount of the aforementioned snooping yielded any easy and/or elegant solution to this little pickle.&lt;br /&gt;&lt;br /&gt;What happens is that the control might pass to the delay branch of the Listen shape where we implement some logic to escape the loop. During this time interval, if a message arrives at the MessageBox, Biztalk sees our Orchestration as “Running” and since our Orchestration is a match for the Message’s subscription, Biztalk assigns this orchestration to take care of this message. Now our orchestration is blissfully unaware that it has a message or messages to take care of, and runs to completion. Hence, these message(s) are left in the message box with no one to process them or in other words in a Zombie state.&lt;br /&gt;&lt;br /&gt;In my opinion, the first thing to do in this situation is (and I am not being facetious here) to verify that your correlation set is actually exact enough for your business scenario. For e.g. if we are transmitting patient medical records, we need to correlate only the same patients and not ALL patients. In other words don’t correlate JUST on MessageType if you can correlate on MessageType AND PatientID.&lt;br /&gt;&lt;br /&gt;Secondly set your delay interval to an appropriate value. Setting it too low creates more such race timespans, per unit time. This will reduce your Zombie chances, but won’t give you a 100% success guarantee.&lt;br /&gt;&lt;br /&gt;Thirdly have a proper plan to deal with these Zombies according to your business scenario. Retransmit? Discard? What?&lt;br /&gt;&lt;br /&gt;Finally ponder about the “Receive Draining” pattern mentioned in &lt;a href="http://blogs.msdn.com/biztalk_core_engine/archive/2004/06/30/169430.aspx" target="_blank"&gt;Lee Graber’s blog&lt;/a&gt;, and if you have a nice elegant way of doing it, tell me about it FIRST!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-111723503804890165?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/111723503804890165/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=111723503804890165" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/111723503804890165" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/111723503804890165" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2005/05/about-zombies-and-convoys.html" title="About Zombies and Convoys..." /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-111263313021784112</id><published>2005-04-04T12:36:00.000-04:00</published><updated>2005-04-04T12:45:30.220-04:00</updated><title type="text">'Non-Deterministic' Sequential Convoys</title><content type="html">&lt;p&gt;A long, long break between posts. Actually was working on some custom adapters, which kinda left me with little to post. Anyways, today morning a colleague of mine was facing a problem with &lt;a href="http://devdutt10.blogspot.com/2004/08/uniform-sequential-convoys-in-bts-2004.html"&gt;Sequential Convoys&lt;/a&gt;. He didn’t know how many messages he was going to receive in a particular convoy. Consequently, he didn’t know how many times to loop the Receives that follow the co-relation set (Hence, the "Non-Deterministic" in the title).&lt;br /&gt;&lt;br /&gt;A simple solution exists to solve this problem. Use a Listen shape! A Listen shape with the Following Receive(s) in one branch and a Delay shape in the other, provides us with a graceful 'Timeout' kind of mechanism. Here’s a screen shot of how to plug in the Listen logic in your sequential convoys.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devdutt10.m6.net.16.m6.net/App/SeqConvoyListener.JPG"&gt;&lt;img style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; MARGIN: 2px; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" src="http://devdutt10.m6.net.16.m6.net/App/SeqConvoyListenerSmall.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most information in my previous post about &lt;a href="http://devdutt10.blogspot.com/2004/08/uniform-sequential-convoys-in-bts-2004.html"&gt;Uniform Sequential Convoys&lt;/a&gt; holds true in this case too.&lt;br /&gt;&lt;br /&gt;Post a comment if you need any clarifications. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-111263313021784112?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/111263313021784112/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=111263313021784112" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/111263313021784112" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/111263313021784112" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2005/04/non-deterministic-sequential-convoys.html" title="'Non-Deterministic' Sequential Convoys" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-110434570826713420</id><published>2004-12-29T13:41:00.000-05:00</published><updated>2004-12-29T13:41:48.266-05:00</updated><title type="text">The South-East Asia Earthquake and Tsunami</title><content type="html">Totally off topic but very important nevertheless. For those of you who wish to find the right places to contribute towards the Relief Operations for Tsunami victims in South-Asia, please visit the following link.
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://tsunamihelp.blogspot.com/"&gt;The South-East Asia Earthquake and Tsunami&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-110434570826713420?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="related" href="http://tsunamihelp.blogspot.com/" title="The South-East Asia Earthquake and Tsunami" /><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/110434570826713420/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=110434570826713420" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110434570826713420" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110434570826713420" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/12/south-east-asia-earthquake-and-tsunami.html" title="The South-East Asia Earthquake and Tsunami" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-110078752719580151</id><published>2004-11-18T09:15:00.000-05:00</published><updated>2004-11-18T09:20:34.313-05:00</updated><title type="text">Getting the BizTalk SQL Server DB Name</title><content type="html">A quick one. How to get the name of the SQL Server that BizTalk is running? A relatively easy way is to get it from the registry. Heres a code sippet that does just that.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; strBtsSvrSubKey =
&lt;br /&gt;         "Software\\Microsoft\\BizTalk Server\\3.0\\Administration";
&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; strBtsSqlSvrKey = "MgmtDBServer";
&lt;br /&gt;Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(strBtsSvrSubKey);
&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; strBtsSqlSvrName = key.GetValue(strBtsSqlSvrKey).ToString();
&lt;br /&gt;
&lt;br /&gt;Any queries, post a comment.
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-110078752719580151?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/110078752719580151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=110078752719580151" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110078752719580151" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110078752719580151" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/11/getting-biztalk-sql-server-db-name.html" title="Getting the BizTalk SQL Server DB Name" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-110064289408254817</id><published>2004-11-16T16:38:00.000-05:00</published><updated>2004-11-16T17:12:14.683-05:00</updated><title type="text">HIPAA Accelerator 3.0 Error deciphering</title><content type="html">The BizTalk Accelerator for HIPAA 3.0 throws up a mighty detailed error in the event log when it fails during Xml to EDI translation and/or validation. These errors tend to look a little scary (they scared me at the very least). An example would be :
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;Status report details: SRH DevBT03 200411122204111 DEFAULT 2 DEFAULT
&lt;br /&gt;SRM 00000000 00010168 101 0 837 004010HC09translate failed 0000010000010000000000010 10168
&lt;br /&gt;SRE 0010&lt;span style="color:#ff0000;"&gt;30&lt;/span&gt;ProcessSegment 00053 000&lt;span style="color:#ff0000;"&gt;TS837Q1_2420A_NM103__RenderingProviderLastOrOrganizationName&lt;/span&gt; source format: [101 0 ,XML 1.0]\r\nsource document: [837 004010DEFAULT X X098A1,Health Care Claim: Professional]\r\nsource segment: [data#53,def#232,name=TS837Q1_2420A_NM1_RenderingProviderName]\r\nsource element: [def#4,elm#0,comp#0,name=TS837Q1_2420A_NM103__&lt;/strong&gt;
&lt;br /&gt;&lt;strong&gt;RenderingProviderLastOrOrganizationName], (msgnr:1 segnr:53)(line:2 pos:11671 filepos:11953)&lt;/strong&gt;
&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;br /&gt;Look for the last numeric code following the SRE element. In this case its 001030. Ignore the 0010 part and you are left with 30. Open &lt;strong&gt;[document's home]\HIPAA_EDI\Subsystem\EIF\live.eif &lt;/strong&gt;with notepad. &lt;em&gt;&lt;span style="color:#ff0000;"&gt;Please be careful not to edit this file!!&lt;/span&gt; &lt;/em&gt;&lt;span style="color:#ff0000;"&gt;&lt;em&gt;Preferrably create and open a copy. &lt;/em&gt;&lt;span style="color:#000000;"&gt;The first section of the file contains code to message mapping entries like :&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;&lt;strong&gt;ET100000&lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;The path does not exist. Check the folder location.&lt;/strong&gt;
&lt;br /&gt;
&lt;br /&gt;Look for the entry matching our code i.e. 30. We have :
&lt;br /&gt;&lt;strong&gt;ET10000&lt;span style="color:#ff0000;"&gt;30&lt;/span&gt;The document does not contain a required element. Contact the sender.&lt;/strong&gt;
&lt;br /&gt;
&lt;br /&gt;So, the actual interpretation of the event log message is :
&lt;br /&gt;"The required element/attribute &lt;em&gt;&lt;span style="color:#ff0000;"&gt;TS837Q1_2420A_NM103__RenderingProviderLastOrOrganizationName&lt;/span&gt;&lt;/em&gt; in the segment &lt;span style="color:#ff0000;"&gt;&lt;em&gt;TS837Q1_2420A_NM1_RenderingProviderName &lt;/em&gt;&lt;span style="color:#000000;"&gt;is&lt;/span&gt;&lt;em&gt; &lt;/em&gt;&lt;span style="color:#000000;"&gt;missing.&lt;/span&gt;&lt;/span&gt;"
&lt;br /&gt;
&lt;br /&gt;Now that's a LOT less frightening I think. :)
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-110064289408254817?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/110064289408254817/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=110064289408254817" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110064289408254817" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110064289408254817" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/11/hipaa-accelerator-30-error-deciphering.html" title="HIPAA Accelerator 3.0 Error deciphering" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-110019069670478889</id><published>2004-11-11T11:07:00.000-05:00</published><updated>2004-11-23T08:51:32.073-05:00</updated><title type="text">HIPAA Accelerator 3.0 Gotchas</title><content type="html">I stumbled across a couple of things w.r.t the BTS 2K4 and the HIPAA Accelerator 3.0, which I feel are worthy of a mention.
&lt;br /&gt;
&lt;br /&gt;&lt;ol&gt;&lt;li&gt;SQL Server 2000 client components are needed on the BizTalk boxes when SQL Server 2000 is installed on a separate box.&lt;/li&gt;&lt;li&gt;DTC (Distributed Transaction Coordinator) must be enabled for Network Access (via Windows Component Setup) on all computers participating in the configuration, administration and message processing.&lt;/li&gt;&lt;li&gt;The user under which the HIPAA EDI windows service is configured to run, must be a member of the &lt;strong&gt;BizTalk Application Users &lt;/strong&gt;group.&lt;/li&gt;&lt;li&gt;All HIPAA 3.0 schemas should be validated using the &lt;strong&gt;XSD2EDI utility&lt;/strong&gt; located at &lt;strong&gt;......Program Files\Microsoft BizTalk Accelerator for HIPAA 3.0\HIPAA_EDI\Subsystem &lt;/strong&gt;at least once (on all BizTalk boxes where HIPAA is installed) before the HIPAA Accelerator can start processing messages. &lt;/li&gt;&lt;li&gt;For multi-box BizTalk Installations you might want to consider making the &lt;strong&gt;HIPAA Documents Home&lt;/strong&gt; directory a network share.&lt;/li&gt;&lt;li&gt;For ANSI 835p there exists a context property named &lt;strong&gt;CountOfTranslatedDocs&lt;/strong&gt;, which can be used for correlating 835's from a single file into a sequential convoy.&lt;/li&gt;&lt;li&gt;Ensure that the login credentials for the HIPAA EDI Windows service and the BizTalk Host under which the HIPAA Adapter runs, match.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;More additions later. Any queries, post a comment.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-110019069670478889?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/110019069670478889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=110019069670478889" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110019069670478889" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/110019069670478889" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/11/hipaa-accelerator-30-gotchas.html" title="HIPAA Accelerator 3.0 Gotchas" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-109648123123594844</id><published>2004-09-29T13:49:00.000-04:00</published><updated>2006-03-08T14:34:37.470-05:00</updated><title type="text">Non-Uniform Sequential Convoys in BTS 2004 using Correlation</title><content type="html">This is another primer on Sequential Convoys, but non-uniform ones this time. With a uniform Sequential Convoy, correlated messages have to be of the same type. But there might be situations where we would want to implement Sequential Convoys with different messages. The sample below illusatrates this concept by taking 2 messages of different types, and merging them to produce 1 output message. The input messages are correlated into a single orchestration instance by a promoted property called "Primary".
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://devdutt10.m6.net.16.m6.net/App/NonUniSeqConvoy.jpg"&gt;&lt;img style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; MARGIN: 2px; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" src="http://devdutt10.m6.net.16.m6.net/App/NonUniSeqConvoySmall.jpg" border="0" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;strong&gt;Non-Uniform Sequential Convoy&lt;/strong&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Most information in my previous post about &lt;a href="http://devdutt10.blogspot.com/2004/08/uniform-sequential-convoys-in-bts-2004.html"&gt;Uniform Sequential Convoys&lt;/a&gt; holds true in this case too.
&lt;br /&gt;
&lt;br /&gt;You can get the source files &lt;a href="http://uk.f2.pg.briefcase.yahoo.com/bc/skullhole2000/vwp2?.tok=bcQxvJUBYOgXK6iv&amp;.dir=/My+Documents&amp;amp;.dnm=NonUniform+Sequential+Convoy.zip&amp;amp;.src=bc"&gt;here&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Post a comment if you need any clarifications.
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-109648123123594844?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/109648123123594844/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=109648123123594844" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109648123123594844" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109648123123594844" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/09/non-uniform-sequential-convoys-in-bts.html" title="Non-Uniform Sequential Convoys in BTS 2004 using Correlation" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-109630406696813665</id><published>2004-09-27T13:28:00.000-04:00</published><updated>2004-10-12T22:30:33.700-04:00</updated><title type="text">Using XmlSerializer in the BizTalk Web Service Proxy.</title><content type="html">This is something that most people will be aware of but might be helpful for newbies. The BizTalk Web Services Publishing Wizard, creates new datatypes for input and output messages during creation of the Web Service that exposes Orch/Schemas. Adding a web reference to this web service will generate the same datatypes, whose definitions can be found in the Reference.cs file. If the external system already generates XML, creating the input message object can be a drag.
&lt;br /&gt;A quick way of creating the input message objects from XML and converting the output message objects to XML, is by using the XML Serializer class. Here's the sample code.
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//creating a new RequestMsg &lt;/em&gt;
&lt;br /&gt;objectRequestMsg objRequestMsg = new RequestMsg();
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Create an XML Serializer for RequestMsg document&lt;/em&gt;
&lt;br /&gt;XmlSerializer serRequestMsg = new XmlSerializer(objRequestMsg.GetType(), "&lt;a href="http://schemas.devdutt.com/XMLSchema/v1/InputMsg.xsd"&gt;http://schemas.devdutt.com/XMLSchema/v1/InputMsg.xsd&lt;/a&gt;");
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Deserializing XML into RequestMsg class&lt;/em&gt;
&lt;br /&gt;&lt;em&gt;//strRequestMsgXml is the XML String&lt;/em&gt;
&lt;br /&gt;objRequestMsg = (RequestMsg)(serRequestMsg.Deserialize(new XmlTextReader(new StringReader(strRequestMsgXml))));
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Call RequestMsg Web Service and send the Request&lt;/em&gt;
&lt;br /&gt;&lt;em&gt;//orchInvoker is the Web Service Proxy Object&lt;/em&gt;
&lt;br /&gt;&lt;em&gt;//Submit is the Web Method&lt;/em&gt;
&lt;br /&gt;object obj = (orchInvoker.Submit(objRequestMsg));
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Create an XML Serializer for OutputMsg document&lt;/em&gt;
&lt;br /&gt;XmlSerializer serResponseMsg = new XmlSerializer(obj.GetType(), "&lt;a href="http://schemas.devdutt.com/XMLSchema/v1/OutputMsg.xsd"&gt;http://schemas.devdutt.com/XMLSchema/v1/OutputMsg.xsd&lt;/a&gt;");
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Create a temporary memory object for storing xml stream&lt;/em&gt;
&lt;br /&gt;MemoryStream ms = new MemoryStream();
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Serialize the output document&lt;/em&gt;
&lt;br /&gt;serResponseMsg.Serialize(ms, obj);
&lt;br /&gt;
&lt;br /&gt;&lt;em&gt;//Convert the memory stream into the string buffer&lt;/em&gt;
&lt;br /&gt;string strResponseMsgXml = System.Text.Encoding.ASCII.GetString(ms.GetBuffer());
&lt;br /&gt;
&lt;br /&gt;Any questions, post a comment.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-109630406696813665?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/109630406696813665/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=109630406696813665" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109630406696813665" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109630406696813665" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/09/using-xmlserializer-in-biztalk-web.html" title="Using XmlSerializer in the BizTalk Web Service Proxy." /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-109555949192096771</id><published>2004-09-18T21:25:00.000-04:00</published><updated>2006-11-01T21:57:05.296-05:00</updated><title type="text">Using recursion in the In-line XSLT Template type Scripting Functoid</title><content type="html">People using In-Line XSLT Templates in their scripting functoids often run into the need for looping, WITHOUT using an &lt;span style="font-family:courier new;font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;&amp;lt;xsl:for-each&amp;gt;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;. An example in the BizTalk context would be, if you had a comma separated string in the source schema and wanted to tokenize it into multiple destination schema elements. The following XSLT template does that for you.
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-family:courier new;color:#999999;"&gt;&lt;span style="font-size:130%;color:#666666;"&gt;&lt;em&gt;&amp;lt;xsl:template name="TokenizeCommaSepString"&amp;gt;
&lt;br /&gt;&amp;lt;xsl:param name="stringToTokenize" /&amp;gt;
&lt;br /&gt;&amp;lt;xsl:param name="destinationElementName" /&amp;gt;
&lt;br /&gt;
&lt;br /&gt;&amp;lt;xsl:if test="$stringToTokenize != ''"&amp;gt;
&lt;br /&gt;&amp;lt;xsl:choose&amp;gt;
&lt;br /&gt;&amp;lt;xsl:when test="contains($stringToTokenize, ',')=0"&amp;gt;
&lt;br /&gt;&amp;lt;xsl:element name="{$destinationElementName}"&amp;gt;
&lt;br /&gt;&amp;lt;xsl:value-of select="$stringToTokenize" /&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:element&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:when&amp;gt;
&lt;br /&gt;&amp;lt;xsl:otherwise&amp;gt;
&lt;br /&gt;&amp;lt;xsl:element name="{$destinationElementName}"&amp;gt;
&lt;br /&gt;&amp;lt;xsl:value-of select="substring-before($stringToTokenize, ',')" /&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:element&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:otherwise&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:choose&amp;gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color:#666666;"&gt;&lt;strong&gt;&amp;lt;xsl:call-template name="TokenizeCommaSepString"&amp;gt;
&lt;br /&gt;&amp;lt;xsl:with-param name="stringToTokenize" select="substring-after($stringToTokenize,',')" /&amp;gt;
&lt;br /&gt;&amp;lt;xsl:with-param name="destinationElementName" select="$destinationElementName" /&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;/strong&gt;
&lt;br /&gt;&amp;lt;/xsl:if&amp;gt;
&lt;br /&gt;&amp;lt;/xsl:template&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;p&gt;&lt;?xml:namespace prefix = xsl /&gt;&lt;xsl:for-each&gt;Drag a &lt;em&gt;Scripting functoid&lt;/em&gt; onto the BizTalk Mapper. Go to properties and choose &lt;em&gt;Configure functoid script&lt;/em&gt;. Choose &lt;em&gt;Inline XSLT Call Template&lt;/em&gt; as the Script Type. Paste the above code in the Script Buffer text area. This functoid will take the comma separated string in as the first parameter and the destination element name as the second parameter. It will split the string into parts and create a sequence of elements in the destination message. &lt;/xsl:for-each&gt;&lt;/p&gt;&lt;p&gt;&lt;xsl:for-each&gt;Observe the use of recursion (marked in bold), to solve similar problems. Have a&lt;/xsl:for-each&gt;&lt;xsl:for-each&gt;ny questions, post a comment.&lt;/xsl:for-each&gt;&lt;/p&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-109555949192096771?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/109555949192096771/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=109555949192096771" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109555949192096771" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109555949192096771" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/09/using-recursion-in-in-line-xslt.html" title="Using recursion in the In-line XSLT Template type Scripting Functoid" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-109399003944035042</id><published>2004-08-31T17:56:00.000-04:00</published><updated>2006-09-27T17:45:09.816-04:00</updated><title type="text">Sending Messages as FORM Variables with the HTTP Adapter</title><content type="html">Here's a quickie. If you want to send a message, as a FORM Variable in a HTTP request, this is what you do:&lt;br /&gt;&lt;br /&gt;1) Set the &lt;strong&gt;Content Type&lt;/strong&gt; property of the HTTP send port, to &lt;strong&gt;application/x-www-form-urlencoded&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;2) Create a custom pipeline and plug-in a Custom Pipeline Component, that pre-pends &lt;em&gt;&lt;strong&gt;Variable-Name&lt;form-variable-name&gt;&lt;formvariablename&gt;=&lt;/strong&gt;&lt;/em&gt; in front of the message, and url encode it. e.g: &lt;strong&gt;ClaimPacket=&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;3) Use this pipeline with your HTTP send port, and you are done!&lt;br /&gt;&lt;br /&gt;Post a comment for a sample.&lt;br /&gt;&lt;br /&gt;Update : Screen shot of the Content Type property:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://devdutt10.m6.net.16.m6.net/App/ContentType.JPG" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-109399003944035042?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/109399003944035042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=109399003944035042" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109399003944035042" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109399003944035042" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/08/sending-messages-as-form-variables.html" title="Sending Messages as FORM Variables with the HTTP Adapter" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-109354556171717354</id><published>2004-08-26T14:26:00.000-04:00</published><updated>2004-08-26T22:56:46.306-04:00</updated><title type="text">Event Log Message Interception with WMI</title><content type="html">Out of the box pipeline components have decent error logging, but often don't give us the flexibility to do our own thing. In addition to a suspended queue listener (see Martinjn's blog), an Event Log Watcher windows service might be a good failover mechanism. Below is some skeleton code for going about it.
&lt;br /&gt;
&lt;br /&gt;using System;
&lt;br /&gt;using System.Collections;
&lt;br /&gt;using System.ComponentModel;
&lt;br /&gt;using System.Data;
&lt;br /&gt;using System.Diagnostics;
&lt;br /&gt;using System.ServiceProcess;
&lt;br /&gt;using System.Management;
&lt;br /&gt;using System.IO;
&lt;br /&gt;
&lt;br /&gt;namespace MyEventLogWatcher
&lt;br /&gt;{
&lt;br /&gt;public class BizTalkEventLogWatcher : System.ServiceProcess.ServiceBase
&lt;br /&gt;{
&lt;br /&gt;private System.Management.ManagementEventWatcher eventLogWatcher;
&lt;br /&gt;/// &lt;summary&gt;
&lt;br /&gt;/// Required designer variable.
&lt;br /&gt;/// &lt;/summary&gt;
&lt;br /&gt;private System.ComponentModel.Container components = null;
&lt;br /&gt;
&lt;br /&gt;public BizTalkEventLogWatcher()
&lt;br /&gt;{
&lt;br /&gt;// This call is required by the Windows.Forms Component Designer.
&lt;br /&gt;InitializeComponent();
&lt;br /&gt;}
&lt;br /&gt;&lt;span class="fullpost"&gt;
&lt;br /&gt;static void Main()
&lt;br /&gt;{
&lt;br /&gt;System.ServiceProcess.ServiceBase ServiceToRun;
&lt;br /&gt;
&lt;br /&gt;ServiceToRun = new BizTalkEventLogWatcher();
&lt;br /&gt;
&lt;br /&gt;System.ServiceProcess.ServiceBase.Run(ServiceToRun);
&lt;br /&gt;}
&lt;br /&gt;#region Component Designer generated code
&lt;br /&gt;/// &lt;summary&gt;
&lt;br /&gt;/// Required method for Designer support - do not modify
&lt;br /&gt;/// the contents of this method with the code editor.
&lt;br /&gt;/// &lt;/summary&gt;
&lt;br /&gt;private void InitializeComponent()
&lt;br /&gt;{
&lt;br /&gt;this.eventLogWatcher = new System.Management.ManagementEventWatcher();
&lt;br /&gt;//
&lt;br /&gt;// eventLogWatcher
&lt;br /&gt;//
&lt;br /&gt;
&lt;br /&gt;this.eventLogWatcher.Query = new System.Management.EventQuery("SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA \"Win32_NTLogEvent\"" +
&lt;br /&gt;" AND TargetInstance.Logfile = \"Application\"");
&lt;br /&gt;
&lt;br /&gt;//
&lt;br /&gt;// BizTalkEventLogWatcher
&lt;br /&gt;//
&lt;br /&gt;this.ServiceName = "BizTalkEventLogWatcher";
&lt;br /&gt;
&lt;br /&gt;}
&lt;br /&gt;#endregion
&lt;br /&gt;
&lt;br /&gt;/// &lt;summary&gt;
&lt;br /&gt;/// Clean up any resources being used.
&lt;br /&gt;/// &lt;/summary&gt;
&lt;br /&gt;protected override void Dispose( bool disposing )
&lt;br /&gt;{
&lt;br /&gt;if( disposing )
&lt;br /&gt;{
&lt;br /&gt;if (components != null)
&lt;br /&gt;{
&lt;br /&gt;components.Dispose();
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;}
&lt;br /&gt;base.Dispose( disposing );
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;/// &lt;summary&gt;
&lt;br /&gt;/// Set things in motion so your service can do its work.
&lt;br /&gt;/// &lt;/summary&gt;
&lt;br /&gt;protected override void OnStart(string[] args)
&lt;br /&gt;{
&lt;br /&gt;eventLogWatcher.Scope = new System.Management.ManagementScope("\\\\"+Environment.MachineName+"\\root\\CIMV2");
&lt;br /&gt;eventLogWatcher.EventArrived += new System.Management.EventArrivedEventHandler(eventLogWatcher_EventArrived);
&lt;br /&gt;eventLogWatcher.Start();
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;/// &lt;summary&gt;
&lt;br /&gt;/// Stop this service.
&lt;br /&gt;/// &lt;/summary&gt;
&lt;br /&gt;protected override void OnStop()
&lt;br /&gt;{
&lt;br /&gt;eventLogWatcher.Stop();
&lt;br /&gt;}
&lt;br /&gt;protected void eventLogWatcher_EventArrived(object sender, EventArrivedEventArgs e)
&lt;br /&gt;{
&lt;br /&gt;string strEventSourcesToIntercept = "";
&lt;br /&gt;try
&lt;br /&gt;{
&lt;br /&gt;PropertyData propData = e.NewEvent.Properties["TargetInstance"];
&lt;br /&gt;StringBuilder strUserFriendlyMsg = new StringBuilder();
&lt;br /&gt;if(propData != null)
&lt;br /&gt;{
&lt;br /&gt;ManagementBaseObject mgmtObj = propData.Value as ManagementBaseObject;
&lt;br /&gt;if((mgmtObj.Properties["Message"].Value != null)&amp;&amp;amp;
&lt;br /&gt;(mgmtObj.Properties["Source"].Value.ToString().Equals("strEventSourcesToIntercept")))
&lt;br /&gt;{
&lt;br /&gt;
&lt;br /&gt;}
&lt;br /&gt;}
&lt;br /&gt;}
&lt;br /&gt;catch(Exception Ex)
&lt;br /&gt;{
&lt;br /&gt;//error handling
&lt;br /&gt;}
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;}
&lt;br /&gt;}
&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-109354556171717354?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/109354556171717354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=109354556171717354" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109354556171717354" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109354556171717354" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/08/event-log-message-interception-with.html" title="Event Log Message Interception with WMI" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8073758.post-109345062339528174</id><published>2004-08-25T11:59:00.000-04:00</published><updated>2006-08-15T06:35:05.190-04:00</updated><title type="text">Uniform Sequential Convoys in BTS 2004 using Correlation</title><content type="html">This orchestration is a small primer if you want to implement a "Sequential Convoy " with BizTalk 2004. You would want to do this if:
&lt;br /&gt;
&lt;br /&gt;a) You have to force messages coming in at a particular port to correlate together and get processed by the same orchestration instance.
&lt;br /&gt;(Correlation with multiple ports is a topic of a subsequent post)
&lt;br /&gt;b) You want your output messages to be delivered in the same order that the orchestration got them.
&lt;br /&gt;c) Some pipeline components you use, take one message but give out multiple messages, but you want to process these multiple messages together. For eg: the HIPAA and HL7 disassembler components.
&lt;br /&gt;
&lt;br /&gt;...and probably some more scenarios that I can't think of right now.
&lt;br /&gt;
&lt;br /&gt;The attached orchestration correlates messages w.r.t ReceivedFileName (think about the HIPAA 835 scenario mentioned above). You can use whatever correlation parameters you desire.
&lt;br /&gt;
&lt;br /&gt;TIP: Whatever properties you choose to correlate the incoming messages with, make sure that these properties are promoted when the message(s) reach the MessageBox. Since the RecievedFileName property is not promoted by default, I have also attached a pipeline component which promotes it before it reached the MessageBox.
&lt;br /&gt;
&lt;br /&gt;You can get the source files &lt;a href="http://uk.f2.pg.briefcase.yahoo.com/bc/skullhole2000/vwp2?.tok=bcniL.TBXLRZcNnB&amp;.dir=/My+Documents&amp;amp;.dnm=Correlated+Convoy+Sample.zip&amp;amp;.src=bc"&gt;here&lt;/a&gt; .
&lt;br /&gt;
&lt;br /&gt;Any questions, lemme know. Cheers!
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8073758-109345062339528174?l=devdutt10.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://devdutt10.blogspot.com/feeds/109345062339528174/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8073758&amp;postID=109345062339528174" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109345062339528174" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8073758/posts/default/109345062339528174" /><link rel="alternate" type="text/html" href="http://devdutt10.blogspot.com/2004/08/uniform-sequential-convoys-in-bts-2004.html" title="Uniform Sequential Convoys in BTS 2004 using Correlation" /><author><name>Devdutt</name><uri>http://www.blogger.com/profile/03111464649546431281</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="12308604597355928345" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></entry></feed>
