<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Connected Systems in the Great White North : SOA</title><link>http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx</link><description>Tags: SOA</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Disabling Itinerary Encryption in the ESB Toolkit 2.0</title><link>http://blogs.msdn.com/pkelcey/archive/2009/06/08/disabling-itinerary-encryption-in-the-esb-toolkit-2-0.aspx</link><pubDate>Mon, 08 Jun 2009 23:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9709292</guid><dc:creator>pkelcey</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9709292.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9709292</wfw:commentRss><description>&lt;P&gt;Those of you that worked with the CTP of the ESB Toolkit 2.0 will notice a new feature in the final release, namely "Itinerary Encryption". The Itinerary Design now allows you to use a certificate to encrypt your itineraries before you export them out of Visual Studio. This is a key new piece of functionality since your itineraries may potentially contain sensitive configuration information or sensitive processes that you do not want to leave exposed as open text XML.&lt;/P&gt;
&lt;P&gt;In the properties window for the Itinerary Designer you can see a new property called "Encryption Certificate". You can use this property to select a certificate from a certificate store.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://ukh0la.bay.livefilestore.com/y1pbQRpJ_qh_WywZlCv3ZEVIzRENYE_U_OfvCIe9f8VTvdUripuStxx5SCqVEGyR3ytDwWn8roLlJawl30m7H3TFnFBhzrYUuNZ/EncryptCert.jpg" mce_src="http://ukh0la.bay.livefilestore.com/y1pbQRpJ_qh_WywZlCv3ZEVIzRENYE_U_OfvCIe9f8VTvdUripuStxx5SCqVEGyR3ytDwWn8roLlJawl30m7H3TFnFBhzrYUuNZ/EncryptCert.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Now as important as this option is, what I'm going to write about is how to disable this.&amp;nbsp;&amp;nbsp;On my dev machine, I did not have any valid certificates installed, so I wasn't able to select one to use or encryption. This prevented me from validating or exporting my itinerary since the validation tool kept throwing an error. Since this was only a dev machine, I didn't care about the security of these itineraries, so I really wanted to disable this feature so that I could keep working. Fortunetly, there is a simple and easy way to do this.&lt;/P&gt;
&lt;P&gt;If you have installed the ESBT to the default location, you should be able to find a file called "ruleset.config" in the "C:\Program Files\Microsoft BizTalk ESB Toolkit 2.0\Tools\Itinerary Designer" folder. This file contains a list of validation rules the the Itinerary Designer uses when validating or exporting your itinerary.&amp;nbsp; If you open this file in Visual Studio, you will find a node called &amp;lt;property name="EncryptionCertificate"&amp;gt;. Inside this node, you will see there are two rules that define how the validation of certificates should be handled. The first rule is the one the designer uses by default and it says that an error should be thrown if you do not have a certificate assigned. I commented out this rule and when I ran the validation routine again, I only received a warning message about the lack of a cert. I was then able to export my itinerary.&amp;nbsp; Here's what the modified file looked like for my system.&lt;/P&gt;
&lt;P&gt;&amp;lt;property name="EncryptionCertificate"&amp;gt;&lt;BR&gt;&amp;lt;!--&amp;lt;validator type="Microsoft.Practices.Modeling.Validation.X509CertificateContainerValidator, Microsoft.Practices.Modeling.Validation"&lt;BR&gt;messageTemplate="A X509 Certificate is required in the model property '{0}' to encrypt any sensitive property in the designer."&lt;BR&gt;name="EncryptingCertificate validator"/&amp;gt;--&amp;gt;&lt;BR&gt;&amp;lt;!-- Warning message when not enforcing encryption --&amp;gt;&lt;BR&gt;&amp;lt;validator type="Microsoft.Practices.Modeling.Validation.X509CertificateContainerValidator, Microsoft.Practices.Modeling.Validation"&lt;BR&gt;messageTemplate="Some data may not be secured because no X509 Certificate was specified in the model property '{0}'."&lt;BR&gt;tag="Warning"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;name="EncryptingCertificate (warning) validator"/&amp;gt;&lt;BR&gt;&amp;lt;/property&amp;gt;&lt;/P&gt;
&lt;P&gt;Cheers and keep on BizTalking&lt;/P&gt;
&lt;P&gt;Peter&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9709292" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+Howto_2700_s/default.aspx">BizTalk Howto's</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB/default.aspx">ESB</category></item><item><title>Content from the Canadian Connected Systems Conference</title><link>http://blogs.msdn.com/pkelcey/archive/2008/11/05/content-from-the-canadian-connected-systems-conference.aspx</link><pubDate>Wed, 05 Nov 2008 17:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9044381</guid><dc:creator>pkelcey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9044381.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9044381</wfw:commentRss><description>&lt;P&gt;We've been to Vancouver and Toronto so far and lots of people have been asking about the presentations that we delivered at the Connected Systems Conference.&amp;nbsp; We're uploading them now to a skydrive site and you should be able to access them at &lt;/P&gt;
&lt;P&gt;&lt;A href="http://cid-ece4536d84e10155.skydrive.live.com/browse.aspx/Connected%20Systems%20Conference%202008/Final%20Slides"&gt;http://cid-ece4536d84e10155.skydrive.live.com/browse.aspx/Connected%20Systems%20Conference%202008/Final%20Slides&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The site should be open for anyone to download the presentations and you won't need a password or ID.&amp;nbsp; It may take us a day to get all of the presenters to upload their decks, so if you don't see the one you wanted, give it a day and then check back.&lt;/P&gt;
&lt;P&gt;Cheers and keep on BizTalking&lt;/P&gt;
&lt;P&gt;Peter&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9044381" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pkelcey/archive/tags/Integration/default.aspx">Integration</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BPM_2F00_BPI+Community/default.aspx">BPM/BPI Community</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006+R2/default.aspx">BizTalk 2006 R2</category></item><item><title>Announcing free training on the ESB Guidance (Canada only)</title><link>http://blogs.msdn.com/pkelcey/archive/2008/03/24/announcing-free-training-on-the-esb-guidance-canada-only.aspx</link><pubDate>Mon, 24 Mar 2008 21:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8334011</guid><dc:creator>pkelcey</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/8334011.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=8334011</wfw:commentRss><description>&lt;P&gt;The concept of Service Oriented Architecture and the Enterprise Service Bus is huge topic for many organizations now days.&amp;nbsp; To address this, our patterns and practices team have recently released the Enterprise Service Bus Guidance which organizations can use to implement an practical and effective ESB solution using our .NET technologies.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In order to accelerate your understanding of this guidance, the Canadian BizTalk team is excited to announce that we will be running a one day deep dive training course focused entirely on the ESB Guidance.&amp;nbsp; We have created this training course to radically accelerate your understanding and adoption of it. The course will be held on April 16&lt;SUP&gt;th&lt;/SUP&gt; at the Microsoft Canada Head Office in Mississauga (Full details are on the registration page).&amp;nbsp; This is significant event as there will be no cost to attend and attendees will get some real deep hands on experience with the solution.&amp;nbsp; This is the first public offering of a course that we recently delivered internally to our MCS community which received very positive reviews.&amp;nbsp; The course includes architectural discussions on the ESB concept, deep dive views into its internals as well as proctored hands-on labs. &lt;/P&gt;
&lt;P&gt;This course will be focused towards the deeper technical components within the ESB, so this is best suited for architects, developers and other technical roles.&lt;/P&gt;
&lt;P&gt;The agenda for the course is a follows:&lt;/P&gt;
&lt;P&gt;1) The ESB as an architecture concept. What is it? What should it do? Why would I need it?&lt;/P&gt;
&lt;P&gt;2) Getting Started – Installing and configuring the ESBG&lt;/P&gt;
&lt;P&gt;3) The Core ESBG Engine: What are the core components and how do I use them?&lt;/P&gt;
&lt;P&gt;4) ESBG External Services: How are these different from the Core Engine?&lt;/P&gt;
&lt;P&gt;5) The ESB Exception Management Framework and Administration Portal&lt;/P&gt;
&lt;P&gt;6) Introduction to Microsoft's ESB &amp;amp; SOA Governance Partners&lt;/P&gt;
&lt;P&gt;7) Bits and Bites: Miscellaneous Topics&lt;/P&gt;
&lt;P&gt;If you are interested in attending, you can access the registration page at:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373531&amp;amp;Culture=en-CA" mce_href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373531&amp;amp;Culture=en-CA"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373531&amp;amp;Culture=en-CA&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Hope to see you there.&lt;/P&gt;
&lt;P&gt;Cheers and keep on BizTalking...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8334011" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006+R2/default.aspx">BizTalk 2006 R2</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB/default.aspx">ESB</category></item><item><title>ESB Exception Management fails with Canadian Regional Settings</title><link>http://blogs.msdn.com/pkelcey/archive/2008/01/24/esb-exception-management-fails-with-canadian-regional-settings.aspx</link><pubDate>Thu, 24 Jan 2008 22:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7225923</guid><dc:creator>pkelcey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/7225923.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=7225923</wfw:commentRss><description>&lt;P&gt;I spent an hour or so this morning working with a college to debug a strange error he was getting when he tried to use on of the Exception Management Framework samples that are in the ESB guidance for BizTalk.&amp;nbsp; He was intentionally creating exceptions and he expected to see them routed into the ESB exception database. However, every time the&amp;nbsp; ALL.Exception SQL Send port tried to route the message to the SQL Server, he got the following error. &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;The adapter failed to transmit message going to send port "ALL.Exceptions" with URL "SQL://VBROKERSERVER7/EsbExceptionDb/". It will be retransmitted after the retry interval specified for this Send Port. Details:"HRESULT="0x80040e07" Description="Error converting data type nvarchar to datetime."&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Now we both expected that he had made a mistake during the installation and configuration phase, but after we spent a fair bit of time comparing his installation to my installation (which worked by the way!) we realized that we had identical configurations.&amp;nbsp; We finally realized that the only difference between the environments was that I had configured my Windows server to work with a regional setting of "English (United States)" while he was using "English (Canada)". The problem was occurring because the two countries store the day/month data in reversed order.&amp;nbsp; Once we changed his system so that the user account that BizTalk ran under used "English (United States)" his system was fine. &lt;/P&gt;
&lt;P&gt;I've since seen someone with a near similar problem using the Dutch regional settings. He found a code level work around that can be used to fix the problem and allow any country's setting to be used. Details are at &lt;A title=http://www.codeplex.com/esb/workitem/view.aspx?workitemid=4430 href="http://www.codeplex.com/esb/workitem/view.aspx?workitemid=4430" mce_href="http://www.codeplex.com/esb/workitem/view.aspx?workitemid=4430"&gt;http://www.codeplex.com/esb/workitem/view.aspx?workitemid=4430&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Cheers and keep on BizTalk&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7225923" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006/default.aspx">BizTalk 2006</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006+R2/default.aspx">BizTalk 2006 R2</category></item><item><title>Using the ESB Guidance - Installation Process and Checklists</title><link>http://blogs.msdn.com/pkelcey/archive/2008/01/22/esb-guidance-installation-process-and-checklists.aspx</link><pubDate>Wed, 23 Jan 2008 07:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7204921</guid><dc:creator>pkelcey</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/7204921.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=7204921</wfw:commentRss><description>&lt;P&gt;Many people are eager to get their hands on the new Microsoft ESB Guidance for BizTalk and to start exploring all of the great stuff it contains. However, we’re seeing that a lot of people are struggling with the installation process. Therefore, I thought I’d put together some documentation on the process I followed and I also figured that it would be useful to create some simple checklists that outline all of the tasks, actions and software you need to complete.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Based on my experiences (and backed up by my college Jim Bowyer’s experiences) most of your time will be spent installing the prerequisites that the ESB guidance requires. The guidance does include some fairly comprehensive help files that do outline all of the service packs, hot fixes etc that you need, however I’ve found that most people rush through this section a bit and miss one of two of the required components or required tasks. I myself spent several hours trying to debug the sample applications only to realize that I had missed one key hot fix and one key step in the configuration process. My strongest recommendation is to really take your time when setting up your environment and make sure you’ve got everything install and configured properly before you try and install the ESB guidance. A little care taken at early will save you massive amount of time later when you’re trying to debug malfunctioning components and sample applications.&lt;/P&gt;
&lt;P&gt;After running through this process a couple of times, I’d estimate that I could do a complete installation in a little less than ½ a day. It took me almost two days the first time I did this due to fact that I rushed through the process and missing a couple of steps. The ½ day estimate is also based on the fact that I have a base Virtual PC image that I can start from. Without this image (I.e. if you’re building a machine from the O/S up), you’ll obviously need more time (perhaps even up to 2 days). &lt;INS cite=mailto:Jim%20Bowyer dateTime=2008-01-22T15:03&gt;Finally, p&lt;A&gt;lease note documentation is not my day job; these are merely supplementary notes to help folks get started with the ESB Guidance. I hope you find &lt;/A&gt;&lt;/INS&gt;&lt;INS cite=mailto:pkelcey dateTime=2008-01-22T21:52&gt;this &lt;/INS&gt;&lt;INS cite=mailto:Jim%20Bowyer dateTime=2008-01-22T15:03&gt;valuable and &lt;/INS&gt;&lt;INS cite=mailto:pkelcey dateTime=2008-01-22T21:52&gt;I &lt;/INS&gt;&lt;INS cite=mailto:Jim%20Bowyer dateTime=2008-01-22T15:03&gt;welcome your feedback.&lt;/INS&gt;&lt;/P&gt;
&lt;P&gt;&lt;INS cite=mailto:Jim%20Bowyer dateTime=2008-01-22T15:03&gt;&lt;/INS&gt;I've attached a PDF document containing the process overview and checklists. &lt;/P&gt;
&lt;P&gt;Update: For those of you that are reading this through an RSS feed or from a syndicated blog site, you might not be able to see the attachment. Here's a link you can use to download the file. &lt;A href="http://www.peterkelcey.com/downloads/ESBInstallProcess_V1.pdf"&gt;http://www.peterkelcey.com/downloads/ESBInstallProcess_V1.pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Cheers and keep on BizTalking..&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7204921" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/pkelcey/attachment/7204921.ashx" length="935882" type="application/pdf" /><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006/default.aspx">BizTalk 2006</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+Howto_2700_s/default.aspx">BizTalk Howto's</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category></item><item><title>Using the ESB Guidance: Dynamic Transformation and Routing</title><link>http://blogs.msdn.com/pkelcey/archive/2007/01/20/using-the-esb-guidance-dynamic-transformation-and-routing.aspx</link><pubDate>Sat, 20 Jan 2007 10:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1497450</guid><dc:creator>pkelcey</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/1497450.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=1497450</wfw:commentRss><description>&amp;nbsp; 
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;In my&lt;A href="http://blogs.msdn.com/pkelcey/archive/2007/01/02/using-the-microsof-esb-guidance-uddi.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2007/01/02/using-the-microsof-esb-guidance-uddi.aspx"&gt; last entry&lt;/A&gt;, I showed how developers could use our new ESB guidance to submit generic messages into BizTalk and have that message routed to a Service Endpoint based on a UDDI entry.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Today, I thought I'd expand on that example and add in another common scenario that occurs within an ESB architecture, namely "Dynamic Transformations". (If you haven't seen the last post, its probably best to check it out first as I'll be building on the concepts introduced there)&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;The Goal&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Submit a generic message to the ESB and have it dynamically transformed and then have the new message dynamically routed to a Service Endpoint that is defined in a UDDI entry. The client application needs to be able to specific the transformation map to use as well as the name of the Service.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;The Solution&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The first thing I did was to build out a test client that I could use to submit message to the ESB.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I needed to be able to specify the body of my message, the map I want to use for the transformation and the name of the Service that I want the message submitted to.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;IMG src="http://www.peterkelcey.com/images/blog/client.JPG" width="75%"&gt; 
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;nbsp;In my &lt;A href="http://blogs.msdn.com/pkelcey/archive/2007/01/02/using-the-microsof-esb-guidance-uddi.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2007/01/02/using-the-microsof-esb-guidance-uddi.aspx"&gt;last post&lt;/A&gt; I spoke about the ESB On Ramp Web Service and show how you could submit generic XML message to it. I also outlined about how to submit message processing instructions to the ESB by using SOAP headers attached to that SOAP message.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To achieve dynamic transformation and routing, we'll again need to use the this On Ramp and we'll again attach message processing instructions via the SOAP Headers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Therefore, the first thing I did after creating my test client was to add a Web Reference to the ESB On Ramp Web Service.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;IMG src="http://www.peterkelcey.com/images/blog/uddi.JPG"&gt; 
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Next, I created a function that would handle all interaction with the OnRamp Web Service.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To achieve both dynamic transformation followed by dynamic routing, I needed to use four of the SOAP headers. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.75in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed" type=1&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=1&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;ProcessingInstruction - (Allows me to specify the first processing task for the ESB to perform)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=2&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Itinerary - (I'll talk more about this in a minute)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=3&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapType - (Allows me to specify the fully qualified name of the map I want BizTalk to use in the transformation)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=4&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpoingUddiLabel - (Allows me to specify the name of the Service that I want message routed to)&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;private string Submit_Transform_Route(string strService, string strMessage, string strMap)&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;// Get an instance of the On Ramp Service&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ESB.OnRamp ramp = new ESB.OnRamp();&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;// Assign security credentials&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ramp.Credentials = new System.Net.NetworkCredential("username", "password");&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;// Assign values to the headers we need to perform the UDDI based routing &lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue = new ESB.EsbSoapHeaders();&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;//Tell the ESB that the first task is to "Transform" the message&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.ProcessingInstruction = "TRANSFORM";&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;//Let the ESB know what all of the steps I want performed are&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.Itinerary = "TRANSFORM,ROUTE";&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;//Tell the ESB which Map to use in the transform&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.MapType = strMap;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.EndpointUddiLabel = strService;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;// Get the message to send&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;XmlDocument doc = new XmlDocument();&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;doc.LoadXml(strMessage);&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;try&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;//Send the message to the OnRamp and return the result&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;ramp.Receive(doc);&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;return "Message Submitted Successfully.";&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;catch (System.Exception ex)&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;return "Error: " + ex.Message;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;You'll notice that its almost identical to the function I developed for my last post. In that function I had to set three of the EsbSoapHeaders to achieve UDDI based routing for my message.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I had to set the ProcessingInstruction = "ROUTE", the Itineray to "ROUTE" and the EndPointUddiLabel to the name of the Service I wanted the message routed to. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;For this example, I actually wanted the ESB to perform multiple and sequential tasks on my message. (i.e. transform it first and then route it).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Since the "ProcessingInstruction" header only allows me to specify a single task for the&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ESB to perform,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I needed to find some header that would let me submit a list of instructions.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;This is where the "Itinerary" header comes into play. It is this header that allows me to pass in a comma delimited list of tasks which the ESB will perform one after the other. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Once I had this function built, all I had to do was call it from the onClick where I passed in the Map name and the Service name.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;private void button1_Click(object sender, EventArgs e)&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Cursor.Current = Cursors.WaitCursor;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;btnSubmit.Enabled = false;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;string result = Submit_Transform_Route(txtServiceName.Text, txtOriginalMessage.Text, txtMapName.Text);&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;btnSubmit.Enabled = true;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Cursor.Current = Cursors.Default;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MessageBox.Show(result, "Result", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Its important to understand that you can only use a Map that has already been deployed into your BizTalk server.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So you do need to pre-develop the Map before you can use it. For my example here, I just used one of the prebuilt samples that comes with the SB guidance.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Also, you have to provide the fully qualified name of the map.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;IMG src="http://www.peterkelcey.com/images/blog/clientInvoke.JPG"&gt; 
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;How it Works&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The way this scenario works is very similar to the Dynamic Routing scenario I explained in my last post.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Our message is submitted to the OnRamp Web Service, it promotes all of the SOAP headers that we provided up into the standard BizTalk Message Context.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Within BizTalk, we then have our "Agents" (i.e. Orchestrations) that are setup to subscribe to our message. Each Agent subscribes to a message based on the "ProcessingInstruction" property.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In my example, I set the ProcessingInstruction equal to " TRANSFORM". This resulted in my message being picked up by the DynamicTransformation.odx orchestration. (Found in the Microsoft.BizTalk.ESB.Agents.Transform project). It is this orchestration that will perform the transformation for us. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;This transformation orchestration does a couple of things for us.&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.75in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed" type=1&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=1&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;It checks to see if we have specified a map for us. If we haven't it attempts to determine the map name based on information sent in the SOAP headers.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=2&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Once a map name is determined, the transformation is performed for us. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=3&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Advance the itinerary for us.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;"Advance the itinerary"??? What's that mean? We'll lets take a look ...&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;Itineraries&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Things to understand:&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.75in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed" type=1&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=1&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Message processing tasks are performed by "Agents" which are really just BizTalk Orchestrations&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=2&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Agents subscribe to messages based on the "ProcessingInstruction" property.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;I.e. The Transform agent only picks up messages with a ProcessingInstruction set to "TRANSFORM". The delivery agent only to messages with "ROUTE"&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=3&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Itineraries are comma delimited list of processing instructions that will eventually be moved up into the ProcessingInstruction property as each step is completed.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;After an agent picks up a message from the messageBox and completes its core task, it is required to examine the current message itinerary. If there are additional steps that need to be completed, the agent is responsible for extracting the next step out of the itinerary and moving it up into the ProcessingInstruction property. The message is then published into the messageBox where another agent can potentially pick it up based on the new processing instruction.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is this mechanism that allows us to "chain" together our agents and complete multiple tasks on our message as it moves through the ESB. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Lets take a look at a portion of the Transform agent orchestration.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;IMG src="http://www.peterkelcey.com/images/blog/AdvanceItineray.JPG"&gt; 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;In this image, we can see the 2 key tasks that the agent is performing. In the "MessageAssignment" step, the actual transformation is performed. The code that performs the dynamic transform is:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;tMapType = System.Type.GetType(FullyQualifiedMapType);&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;transform (OutboundMessage) = tMapType(InboundMessage); &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The second key box is the "Advance Itinerary"&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;one. It contains the following code:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;OutboundMessage(*) = InboundMessage(*);&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;itineraryStep = Microsoft.BizTalk.ESB.Helpers.ItineraryHelper.Advance(OutboundMessage(Microsoft.BizTalk.ESB.Itinerary));&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;OutboundMessage(Microsoft.BizTalk.ESB.Itinerary) = itineraryStep.Itinerary;&lt;/P&gt;
&lt;P style="FONT-SIZE: 9pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;OutboundMessage(Microsoft.BizTalk.ESB.ProcessingInstruction) = itineraryStep.NextStep;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As you can see, this code advances the itinerary forward one step by calling the ItineraryHelper class. The ProcessingInstruction property is then updated to contain this next step.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For our example, the "TRANSFORM" instruction I manually assigned to the ProcessingInstruction is replaced with the second Itinerary task "ROUTE".&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Once this code runs, a new message is published back to the messageBox where our Routing agent picks it up and perform the dynamic routing. (If you want details on how that agent will run, check out the previous post)&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is one way in which Dynamic Transformation and Dynamic Routing can be achieved using the ESB guidance.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;Extending Beyond this Example:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The ESB guidance currently ships with two default agents, the Transform agent and the Delivery agent. It's important to understand that you can extend your ESB beyond this basic functionality by creating you own Agent orchestrations that subscribe to your own custom ProcessingInstructions.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The guidance contains a set of guidelines on how to develop your own agents so that you can develop your own custom and potentially complex ESB tasks.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Now, if you are interested in leveraging the ESB guidance for your organization, we have currently released it to a core set of Microsoft Partners. You can find a list of these partners at &lt;A href="http://www.microsoft.com/biztalk/solutions/soa/esbpartners.mspx" mce_href="http://www.microsoft.com/biztalk/solutions/soa/esbpartners.mspx"&gt;http://www.microsoft.com/biztalk/solutions/soa/esbpartners.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1497450" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006/default.aspx">BizTalk 2006</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+Howto_2700_s/default.aspx">BizTalk Howto's</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category></item><item><title>Using the Microsoft ESB Guidance: UDDI</title><link>http://blogs.msdn.com/pkelcey/archive/2007/01/02/using-the-microsof-esb-guidance-uddi.aspx</link><pubDate>Tue, 02 Jan 2007 22:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1400023</guid><dc:creator>pkelcey</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/1400023.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=1400023</wfw:commentRss><description>&lt;P&gt;Some of you may have heard by now that we are in the process of releasing the Microsoft Enterprise Service Bus (ESB) guidance. This guidance contains pre-built components, use cases, documentation and sales material that our Business Process Integration partners can use to rapidly deploy ESBs on top of BizTalk, Windows, SharePoint and SQL Servers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Over the holidays I spent some time digging into the code and thought I'd share a bit of what I've been seen.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;I thought that I'd first talk about the standard ESB concept of "EndPoint Resolution" and how our guidance allows you to achieve this.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Endpoint resolution is core requirement in any ESB as a Service may not always reside at the same address or endpoint. Therefore we need to be able to locate our services at runtime (wherever they may be).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The Microsoft ESB guidance comes prebuilt with this capability, so I thought I post a small "How-To" blurb about how you can do it. &lt;/P&gt;
&lt;P&gt;&lt;U&gt;The Task&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;The basic task I thought I'd tackle is to submit a generic message from a basic client application into the ESB and have it routed it to a Service based on a entry in a local UDDI server.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The following image show the Services that exist in my UDDI server.&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.247in; DIRECTION: ltr; FONT-FAMILY: Arial; unicode-bidi: embed"&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400002/original.aspx" mce_src="http://blogs.msdn.com/photos/pkelcey/images/1400002/original.aspx"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The service that I'll wanted to submit the message to is "ENDPOINT: PostOrderMessage".&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can see from the screen image that this Service has been setup with a File Folder as its endpoint. &lt;SPAN style="FONT-STYLE: italic"&gt;"C:\projects\Microsoft BizTalk ESB\Tests\Common\Filedrop\Output\Order %MessageID%.xml"&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If the solution works properly, I should be able to find my messages sitting in this folder. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;ESB Concept: The "On Ramp"&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As you dig into the guidance you'll quickly learn that one of the key components within it is the "On Ramp".&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The On Ramp acts as a central entry point into the ESB engine and it allows client applications to submit generic messages that contain processing, routing and transformation instructions. The On Ramp is a key concept to understand in order use the ESB guidance and if you're planning on using it, you'll need to have a good understanding it. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;To keep things simple, the On Ramp is a Web Service that applications can use to submit XML based messages into BizTalk. On top of this, the On Ramp allow us to specify a number of processing, routing and transformation instructions that the BizTalk will follow when processing the message.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To send these processing instructions, we use specific SOAP headers that are attached to our message when we submit to the On Ramp . If you've got the ESB guidance already, you can view all of the possible headers by opening the "EsbEnvGeneric.xsd" property schema file in the Microsoft.BizTalk.Esb.Schema project.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This XSD file is a standard BizTalk property schema and denotes the properties that our SOAP headers will eventually be promoted into.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For those of you that don't have the guidance, here a quick list of the parameters you can use when submitting your messages.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.75in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;ProcessingInstruction&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Itinerary&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapRulesPolicy&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapSelAssemblyName&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapSelMethodCall&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapSelTypeName&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapType&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapUddiLabel&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;MapXPath&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointAddress&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointConfigurationString&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointConfigurationRulesPolicy&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointConfigurationUddiLabel&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointConfigurationXPath&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointDeliveryAgent&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointMessagePattern&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointRulesPolicy&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointSelectAssembly&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointSelectMethod&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointSelectType&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointUddiLabel&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndpointXpath&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;For most projects, you'll ending have to work with most these headers in order to achieve full ESB capabilities, but for our simple task we'll just need to use three:&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.75in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed" type=1&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=1&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;EndPointUddiLabel - We use this to tell the ESB the name of the Service to lookup in the UDDI&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=2&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;ProcessingInstruction - We use this to tell the ESB that the message needs to be routed.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle" value=3&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Itinerary - Where we'll tell the ESB that this message needs to following a routing itinerary&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;Building the Solution&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The first thing I did was to deploy and configure the ESB guidance as per the installation instructions it ships with. I won't cover those steps here, so I'll just jump to what I did once that process was complete.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The first thing I did was to build out a client app that I could use to submit my messages to the ESB.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I used a very basic Windows Forms application as my client. All I needed was a form that would let me to define my message and specify the name of the Service I wanted to route the message to.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400003/original.aspx"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Once I had my basic form built out, the next step I needed to take was to add a web reference to the ESB On Ramp.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400013/original.aspx"&gt;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Once I'd added the web reference, I had everything I needed to submit messages into the ESB. For my project,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I created a function to handle all interaction with the On Ramp web service. It creates my message, assigns the three SOAP headers I need and submits the message it to the On Ramp Web Service. Here's the code: &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;/// &amp;lt;summary&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;/// This function prepares a message and submits it to the ESB on ramp&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;/// &amp;lt;/summary&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;/// &amp;lt;param name="strMessageBody"&amp;gt;The core content of the message&amp;lt;/param&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;/// &amp;lt;param name="strServiceName"&amp;gt;The name of the service in the UDDI that we want to send the message to&amp;lt;/param&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;private string SubmitMessage(string strMessageBody, string strServiceName)&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;// Get an instance of the On Ramp Service&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ESB.OnRamp ramp = new ESB.OnRamp();&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;// Assign security credentials&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;ramp.Credentials = new System.Net.NetworkCredential("username", "password");&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;// Assign values to the headers we need to perform the UDDI based routing &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue = new ESB.EsbSoapHeaders();&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.EndpointUddiLabel = strServiceName;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.ProcessingInstruction = "ROUTE";&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;ramp.EsbSoapHeadersValue.Itinerary = "ROUTE";&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;// Get the message to send&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;XmlDocument doc = new XmlDocument();&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;doc.LoadXml(strMessageBody);&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;try&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//Send the message and return the result&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ramp.Receive(doc);&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return "Message Submitted Successfully.";&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;catch (System.Exception ex)&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.125in; FONT-FAMILY: 'Courier New'"&gt;return "Error: " + ex.Message;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.75in; FONT-FAMILY: 'Courier New'"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As you can see, the ESB class that was created when we added our Web Reference, contains a 2 classes. The "ESB.OnRamp" class which is our proxy to the actual Web Service and the "ESB.EsbSoapHeadersValue" class. This second class contains all of the properties that relate to SOAP headers that the ESB On Ramp will use. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;I setup the OnClick event of my Submit button to call this function and I passed in the values of my two textboxes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As easy as that, I had built an application that was able to send a message into my ESB architecture.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Once I'd done that, the ESB engine took care of everything else.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It only took me ~10 minutes to build out my app and start routing my messages to Services.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Its really is pretty simple and easy to get going with this.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I've included a screen cam video at the end of this entry that shows me running the solution. (Its set for 1024x768 resolution)&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Now that you've seen how to route message using UDDI, some of you might wonder what exactly is going on under the BizTalk covers. So lets take a look.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline"&gt;The Inner Workings&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; TEXT-DECORATION: underline" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;The first thing to look at is obviously the On Ramp. The On Ramp is essentially&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;a Web Service and a BizTalk receive port. The receive location within the port uses the SOAP adapter to interact with the Web Service and also uses a custom pipeline "ReceiveForESBGeneric".&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400019/original.aspx"&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.247in; DIRECTION: ltr; FONT-FAMILY: Arial; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;The SOAP adapter is configured to use the same Web Service that we made a web reference to in our client application. The custom pipeline is responsible for promoting the SOAP headers into BizTalk message properties so that other elements within BizTalk can access our instructions. Once the receive location processes the incoming message, the message (along with its promoted properties) is published into the standard BizTalk MessageBox and the On Ramp is done its work.&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.247in; DIRECTION: ltr; FONT-FAMILY: Arial; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;At this point, another BizTalk artifact takes over, the "Generic.odx" orchestration. This orchestration comes as part of the guidance and can be found int the Microsoft.BizTalk.ESB.Agents.Delivery project. The messages received from our On Ramp receive port are sent to this orchestration using BizTalk's standard publish/subscribe mechanism. This orchestration handles all incoming messages that need to be routed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400020/original.aspx"&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.247in; DIRECTION: ltr; FONT-FAMILY: Arial; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;The orchestration has a direct bound receive port based on specific filter expressions. The receive shape that has a filter setup to receive all messages that have their "ProcessingInstruction" property set to "ROUTE". Hence why I had to set that that SOAP header to use a value of "ROUTE" in my client application.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400021/original.aspx"&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;Once receiving the message, the orchestration checks to see if an proper endpoint has already been assigned to this message. If it hasn't, then the orchestration will begin the process of resolving it. This is done in the "Call Resolution Class" expression box in the "Resolve EndPoint" scope.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In this expression box, a call is made to a function call "Microsoft.BizTalk.ESB.Helpers.Resolver.Resolve".&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This function is a part of a custom library that ships with the ESB guidance and it handles the lower level steps required to resolve the endpoint.&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;In our example, we specified a UDDI service name in the EndPointUddiLabelField SOAP header.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Because we did this, the Resolve function will attempt to resolve the endpoint by making a call to the UDDI server.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If it finds the requested service in the directory, then the endpoint is returned (as a string) to the orchestration.&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;This endpoint is then used to configure the "GenericDeliveryAgentSend" dynamic port .&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The configuration of the port is done in the "Set Endpoint" expression shape.&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;IMG src="http://blogs.msdn.com/photos/pkelcey/images/1400021/original.aspx"&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;Once configured, the port is able to transmits our message to the Service endpoint. &lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;As you can see, the orchestration also contains number of exception handling steps which all tie into the central exception management framework that the guidance contains. The orchestration also contains a number of "Tracing" steps which allow for easier debugging of the process.&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;STRONG&gt;&lt;U&gt;More than just UDDI and more than just Routing&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;I've quickly shown how to submit a message to the ESB engine that ends up being routed based on a UDDI entry. However I must add that you aren't limited to UDDI lookups for your address resolution.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Using the SOAP headers, you can tell the ESB engine to use the Business Rules Engine or you can pass in the End Point directly with your message and there are also options for using XPath.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The code contained in the guidance is incredibly flexible with regards to how you want to handle your endpoint resolution.&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;Also, message Routing is just one feature of the guidance. It also provides some great capabilities around dynamic message transformation, centralized exception management for services, linked itineraries and more.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;There are more than a few projects I've worked on where I wish I had this functionality prebuilt for me!&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;Cheers and Keep on BizTalking...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1400023" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/pkelcey/attachment/1400023.ashx" length="849240" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2006/default.aspx">BizTalk 2006</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/Integration/default.aspx">Integration</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+Howto_2700_s/default.aspx">BizTalk Howto's</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/SOA/default.aspx">SOA</category></item></channel></rss>