<?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 : BizTalk Howto's</title><link>http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+Howto_2700_s/default.aspx</link><description>Tags: BizTalk Howto's</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>ESB Toolkit How To Video #7: A SharePoint Adapter Provider</title><link>http://blogs.msdn.com/pkelcey/archive/2009/08/05/esb-toolkit-how-to-video-7-a-sharepoint-adapter-provider.aspx</link><pubDate>Wed, 05 Aug 2009 18:39:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9858149</guid><dc:creator>pkelcey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9858149.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9858149</wfw:commentRss><description>&lt;p&gt;Welcome to #7 in my series of ESB Toolkit How To Videos. If you have not seen the previous videos, I encourage you to do so. The previous ones can be found here &lt;p&gt;&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/02/18/esb-guidance-2-0-screen-videos-part-1-basic-routing.aspx"&gt;1) Basic Itinerary Routing and UDDI Integration&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/06/12/esb-toolkit-how-to-video-2-service-composition.aspx"&gt;2) Composite Itinerary and Dynamic Mapping&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/06/15/esb-toolkit-how-to-video-3-itinerary-resolution.aspx"&gt;3) Itinerary Resolution in the Bus&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/06/17/esb-toolkit-how-to-video-4-dynamic-itinerary-resolution.aspx"&gt;4) Dynamic Itinerary Resolution in the Bus&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/07/17/esb-toolkit-how-to-video-5-including-custom-orchestrations-in-itineraries.aspx"&gt;5) Including Custom Orchestrations in the Itinerary Designer&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/07/23/esbt-toolkit-how-to-video-6-performance-metrics-using-built-in-bam.aspx"&gt;6) Performance Metrics using Built in BAM&lt;/a&gt; &lt;p&gt;One very common thing that people will want the ESB to do is to route message to SharePoint where they can potentially kick off human based workflow. However, the base ESB Toolkit does not have an adapter provider for Windows SharePoint Services. BizTalk does have an "Adapter" for WSS, however the ESB toolkit does not have an "Adapter provider" for WSS. The Adapter Providers in the ESBT bridge between the new ESBT code and the traditional BizTalk components.  &lt;p&gt;Now fortunately, the ESBT can be extended very quickly and we can add in our own adapter providers without the need for very much code at all. This past week, I was working with the guys over at QuickLearn to build out a WSS adapter provider that they planned to use in an upcoming BizTalk/ESBT demo.&amp;nbsp; In this video, I'll show you how we created the adapter provider (using only a few lines of code) and how we registered it so that the design time tools and the runtime engine could use it. Now, while creating the adapter doesn't require much effort, I will admit that I had a hell of a time trying to get it registered properly and all of the associated configuration files aligned correctly.&amp;nbsp; The ESBT relies heavily on reflection to load components at runtime, so if you don't name your component properly or register it correctly in the config files, then the ESBT engine won't be able to load the provider properly and you'll have a fun time trying to debug just exactly what you did wrong. &lt;p&gt;In order to make it easier for you, I've included my code and configuration files for download so that you don't have to rebuild everything that I show in the video. &lt;p&gt;I need to credit Nick Hauenstein over at QuickLearn (&lt;a title="http://www.quicklearn.com/" href="http://www.quicklearn.com/"&gt;http://www.quicklearn.com/&lt;/a&gt;) for doing most of the initial leg work on building this out. &lt;p&gt;You can access the video &lt;a href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_HowTo%7C_7%7C_WSS%7C_Adapter.wmv"&gt;here&lt;/a&gt; &lt;p&gt;You can download the project &lt;a href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/SPAdapterProvider.zip"&gt;here&lt;/a&gt; &lt;p&gt;Cheers and keep on BizTalking &lt;p&gt;Peter&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9858149" 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/ESB/default.aspx">ESB</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESBT/default.aspx">ESBT</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB+Toolkit/default.aspx">ESB Toolkit</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2009/default.aspx">BizTalk 2009</category></item><item><title>ESBT Toolkit How To Video #6: Performance Metrics using Built in BAM</title><link>http://blogs.msdn.com/pkelcey/archive/2009/07/23/esbt-toolkit-how-to-video-6-performance-metrics-using-built-in-bam.aspx</link><pubDate>Fri, 24 Jul 2009 04:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9845285</guid><dc:creator>pkelcey</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9845285.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9845285</wfw:commentRss><description>&lt;P&gt;Welcome to #6 in my series of ESB Toolkit How To Videos. If you have not seen the previous videos, I encourage you to do so. The previous ones can be found here&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/pkelcey/archive/2009/02/18/esb-guidance-2-0-screen-videos-part-1-basic-routing.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2009/02/18/esb-guidance-2-0-screen-videos-part-1-basic-routing.aspx"&gt;1) Basic Itinerary Routing and UDDI Integration&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/pkelcey/archive/2009/06/12/esb-toolkit-how-to-video-2-service-composition.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2009/06/12/esb-toolkit-how-to-video-2-service-composition.aspx"&gt;2) Composite Itinerary and Dynamic Mapping&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/pkelcey/archive/2009/06/15/esb-toolkit-how-to-video-3-itinerary-resolution.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2009/06/15/esb-toolkit-how-to-video-3-itinerary-resolution.aspx"&gt;3) Itinerary Resolution in the Bus&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/pkelcey/archive/2009/06/17/esb-toolkit-how-to-video-4-dynamic-itinerary-resolution.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2009/06/17/esb-toolkit-how-to-video-4-dynamic-itinerary-resolution.aspx"&gt;4) Dynamic Itinerary Resolution in the Bus&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/pkelcey/archive/2009/07/17/esb-toolkit-how-to-video-5-including-custom-orchestrations-in-itineraries.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2009/07/17/esb-toolkit-how-to-video-5-including-custom-orchestrations-in-itineraries.aspx"&gt;5) Including Custom Orchestrations in the Itinerary Designer&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;There is a great (but sadly under appreciated and under discussed) feature in the ESB Toolkit that I want to focus on today. Back at last years SOA conference, I spent some time talking with Dmitri Ossipov (who lead the development of the ESBT) and he showed me some of the new features he was adding into the toolkit. The one that caught my eye immediately was the built in BAM tracking. The ESB Toolkit has the built in ability to automatically log tracking and performance information for your itineraries as they are processed by the ESB components. If you have enabled "Tracking" in your itineraries, then the ESBT automatically logs information to a BAM table in SQL Server every time any of the itineraries services execute. This data includes data about which service executed, which itinerary and version it was part of, what time it executed, what specific instance it was part of as well as the status of the overall itinerary. This data is a gold mine for those of you looking to track the overall performance of your ESB and related services. It can be used to view all kinds of invaluable information about which itineraries are being used, how well they are performing, which ones are too slow, which ones are failing, which individual services are under performing etc. &lt;/P&gt;
&lt;P&gt;Now while the ESBT will automatically capture all of this information you, it doesn't come with any kind of user friendly mechanism for viewing, analyzing or interacting with this data. In this video, I'll show you how to easily setup a number of BAM Views that will allow you to quickly assess performance stats about your itineraries. I build these views out in Excel and that allows me to use standard pivot tables and charts to view the data and I slice it up. I have also created views that allow me to tracking the performance of specific itineraries across different versions and across time. This is great info to have if you want to understand if recent changes to an itinerary have resulted in better or worse performance than you previously had.&lt;/P&gt;
&lt;P&gt;The following image shows one of the views that I setup to show me what the average, worst and best performance times were for my itineraries. This is pretty useful information to have as I can quickly identify performance issues in my itineraries. You can easily see that the "ComposedDemo" takes quite slow when compared to the "DemoService" itinerary. I can even drill down in the specifics of a single itinerary and find out if a specific ESB service is causing the overall poor performance.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="BAM Image" src="http://ukh0la.bay.livefilestore.com/y1pew7hxeSRjSegK7LK8NrvhbvV1lNaubjkWA5Nv-trevw8_1t8_nvntGizyTkcnw5XoDSSCxwelEs6APO0WsZkKOXFoEE6aNwG/BAM_Perf.jpg" width=526 height=366 mce_src="http://ukh0la.bay.livefilestore.com/y1pew7hxeSRjSegK7LK8NrvhbvV1lNaubjkWA5Nv-trevw8_1t8_nvntGizyTkcnw5XoDSSCxwelEs6APO0WsZkKOXFoEE6aNwG/BAM_Perf.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Now, unlike my previous videos, where I just showed you how to build out a specific solution, I'm going to actually provide you with the components I've built. I've attached the Excel file that contains my BAM Views and you should be able to easily deploy these into your system and access the charts and tables that I show in the video. You will just need to have the ESBT installed as well as the BizTalk BAM components installed and configured.&lt;/P&gt;
&lt;P&gt;In order to avoid make an hour long video, I do not go very deep into what BAM is or how you work it. If you are not familiar with BizTalk's BAM feature, there may be some elements of this video that are not 100% clear. However, if you have a basic understanding of what BAM is, then I hope this video will offer some great value.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_HowTo%7C_6%7C_BAM.wmv" mce_href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_HowTo%7C_6%7C_BAM.wmv"&gt;The video can be accessed here:&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_PoC.zip" mce_href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_PoC.zip"&gt;The BAM Excel Project can be accessed here:&lt;/A&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=9845285" 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/ESB/default.aspx">ESB</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESBT/default.aspx">ESBT</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB+Toolkit/default.aspx">ESB Toolkit</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2009/default.aspx">BizTalk 2009</category></item><item><title>ESB Toolkit How To Video #4: Dynamic Itinerary Resolution</title><link>http://blogs.msdn.com/pkelcey/archive/2009/06/17/esb-toolkit-how-to-video-4-dynamic-itinerary-resolution.aspx</link><pubDate>Wed, 17 Jun 2009 18:37:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9769647</guid><dc:creator>pkelcey</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9769647.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9769647</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update: After I posted this originally, I was notified that my video did not contain any audio! Therefore, it was probably difficult to understand what was going on :) I've recreated the video and replaced the old one so that the video and audio are both working. Cheers&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Welcome to #4 in my series of ESB Toolkit How To Videos. Each of these videos has built up from the one before it, so if you have seen the previous videos, I encourage you to do so. In video #3 (&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/06/15/esb-toolkit-how-to-video-3-itinerary-resolution.aspx"&gt;found here&lt;/a&gt;), I showed you how to use the toolkits new "Itinerary Resolution" feature.&amp;nbsp; In that video, I showed you how to use the Static Itinerary Resolver within a BizTalk receive port to load up an itinerary from the itinerary database and attach it to an incoming message. To do this, we added a resolver configuration string to the pipeline such as "ITINERARY:\\name=DemoService;" (where DemoService was the itinerary that we wanted to load) One shortcoming of that solution is that had multiple itineraries you would need a different receive port for each one.&amp;nbsp; In a real world solution, you might want to assign an itinerary to a message based on the message's schema, or some piece of data found within the message or based on who sent it and you would want to do all of this with as few receive ports as possible.&amp;nbsp; Therefore, the ESB really needs to be able to dynamically and intelligently figure out what itinerary an incoming message needed with us having to hard code the name. &lt;/p&gt; &lt;p&gt;Fortunately, the ESB Toolkit provides us a flexible and intelligent way to resolve itineraries and this is the Business Rules Engine resolver. This allows us to the use the BizTalk Rules Engine to make a decision about what itinerary should be used. We can create rules to look at Context properties associate with the message (such as the message type, the sender etc) or we can look at the content within the message to make our decision on which itinerary to use. In this video, I'll show you how to create an BRE policy to resolve itineraries and I'll show you how to setup your BizTalk receive ports to use this policy. I'll show you how to implement context and content based itinerary resolution.&lt;/p&gt; &lt;p&gt;&lt;a href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_HowTo%7C_4%7C_IntelligentItineraryResolution.wmv"&gt;Here's the link to the video&lt;/a&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=9769647" 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/ESB/default.aspx">ESB</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESBT/default.aspx">ESBT</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB+Toolkit/default.aspx">ESB Toolkit</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2009/default.aspx">BizTalk 2009</category></item><item><title>ESB Toolkit How To Video #3: Itinerary Resolution in the Bus</title><link>http://blogs.msdn.com/pkelcey/archive/2009/06/15/esb-toolkit-how-to-video-3-itinerary-resolution.aspx</link><pubDate>Mon, 15 Jun 2009 17:57:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9753470</guid><dc:creator>pkelcey</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9753470.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9753470</wfw:commentRss><description>&lt;p&gt;Hi folks&lt;/p&gt; &lt;p&gt;Here's video #3 in my "ESB Toolkit How To" series.&amp;nbsp; In the last video (&lt;a href="http://blogs.msdn.com/pkelcey/archive/2009/06/12/esb-toolkit-how-to-video-2-service-composition.aspx"&gt;found here&lt;/a&gt;) we built out a complex itinerary that implemented dynamic mapping and dynamic routing. We also saw how to use the resolver mechanism to retrieve service information from a UDDI version 3.0 server. At the end of that video we used the Itinerary Test Client (which ships with the toolkit) to test our itinerary.&amp;nbsp; When I show this demo in person, I'm always asked the same question. "Does the client always have to submit the itinerary along with the message when they call the ESB?"&amp;nbsp; In version 1.0&amp;nbsp; of the ESB Toolkit, the was "Yes". The ESB did require the client to provide the itinerary along with the message. This was of course an issue for many of the architects I spoke to.&amp;nbsp; Most people wanted the ESB to be responsible for figuring out what itinerary was needed for an incoming message. Ideally, the client should just have to submit their message into the ESB and the bus would figure everything else out for them.&amp;nbsp; Requiring the client to create, manage and submit an itinerary is just not a solid architectural pattern.&lt;/p&gt; &lt;p&gt;Fortunately, in the ESB Toolkit 2.0, this is no longer a problem. We now have a great new feature called Itinerary Resolution that allows the ESB to figure out what itinerary a message should have.&amp;nbsp; Additionally, version 2.0 of the toolkit, gives us the new "ESB Itinerary Database". This DB gives us a central location to store our itineraries in and the Itinerary Resolution component is actually able to dynamically retrieve messages from this central database.&amp;nbsp; These two new features allow us to implement a solution where a client no longer has to have any knowledge of itineraries. Now, they simply have to pass in their message to the ESB where it will dynamically figure out what itinerary is needed and it will load that itinerary from the database. &lt;/p&gt; &lt;p&gt;In this video, I'll show you how to implement this feature. To demo this feature, I use an InfoPath form which sends data to a generic OnRamp which uses the Itinerary Resolver.  I'll walk you through the process of storing your itinerary into the database, creating the new generic OnRamp that will use the itinerary resolution feature and I'll show you how to configure the Itinerary resolver to retrieve the itinerary from the database. &lt;/p&gt; &lt;p&gt;&lt;a href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/ESBT%7C_HowTo%7C_3%7C_ItineraryResolution.wmv"&gt;Here's the link to the video.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;As always, I try to show as much detail as possible in these videos. If you feel that I have skimmed over something too quickly, or if some element is unclear, please let me know and I'll post a follow up video.&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=9753470" 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/ESB/default.aspx">ESB</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESBT/default.aspx">ESBT</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB+Toolkit/default.aspx">ESB Toolkit</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2009/default.aspx">BizTalk 2009</category></item><item><title>ESB Toolkit How To Video #2: Service Composition</title><link>http://blogs.msdn.com/pkelcey/archive/2009/06/12/esb-toolkit-how-to-video-2-service-composition.aspx</link><pubDate>Fri, 12 Jun 2009 22:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9738323</guid><dc:creator>pkelcey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/9738323.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=9738323</wfw:commentRss><description>&lt;P&gt;Hi everyone, it was quite a long time since I posted the first "How-to" video (&lt;A href="http://blogs.msdn.com/pkelcey/archive/2009/02/18/esb-guidance-2-0-screen-videos-part-1-basic-routing.aspx" mce_href="http://blogs.msdn.com/pkelcey/archive/2009/02/18/esb-guidance-2-0-screen-videos-part-1-basic-routing.aspx"&gt;found here&lt;/A&gt;), but I have finally completed the second one. In this demo, I show you how to do a number of new things&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;to create an itinerary that compose three services together into a single composite service&lt;/LI&gt;
&lt;LI&gt;How to setup your BizTalk environment to support this type of itinerary. Including how to create the send ports required for a composite service itinerary&lt;/LI&gt;
&lt;LI&gt;How to retrieve information from a UDDI v3 server from within your itinerary&lt;/LI&gt;
&lt;LI&gt;How to test resolvers inside visual studio using the resolver web service&lt;/LI&gt;
&lt;LI&gt;How to implement dynamic mapping and dynamic routing inside an itinerary&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Based on feedback from my last video I understood that the AVI format I used &lt;EM&gt;&lt;STRONG&gt;sucked&lt;/STRONG&gt;&lt;/EM&gt; and that you didn't want to have to download multiple ZIP archives just to watch a short video. Therefore, I've found a better recording tool that creates WMV files. Therefore this video is only 13 megs in size.&amp;nbsp; Hopefully that is more convenient for everyone.&lt;/P&gt;
&lt;P&gt;If you happen to hear a baby crying at the end, I apologize, that is my new daughter trying to make her first appearance on my blog :)&lt;/P&gt;
&lt;P&gt;This video covers a lot of ground and I show a lot of things. So if I have gone too fast over something, or some element isn't clear, let me know and I'll post a follow up video.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/CompositeItineraryDemo.wmv" mce_href="http://cid-04bc12b1f7b2979a.skydrive.live.com/self.aspx/BlogVideos/CompositeItineraryDemo.wmv"&gt;Here's the link to the video&lt;/A&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=9738323" 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/ESB/default.aspx">ESB</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESBT/default.aspx">ESBT</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/ESB+Toolkit/default.aspx">ESB Toolkit</category><category domain="http://blogs.msdn.com/pkelcey/archive/tags/BizTalk+2009/default.aspx">BizTalk 2009</category></item><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>Microsoft ESB Guidance: Error - Host restarting every minute</title><link>http://blogs.msdn.com/pkelcey/archive/2008/02/01/microsoft-esb-guidance-error-host-restarting-every-minute.aspx</link><pubDate>Fri, 01 Feb 2008 09:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7368753</guid><dc:creator>pkelcey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/7368753.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=7368753</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;We'll I just spent about three hours tonight fighting with this issue, so I thought I'd post about it to hopefully save someone else from having to go through this.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I was trying to run a couple of samples from the ESB and I noticed that whenever I used an example that had to use an orchestration, I received the following error in my event log&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;Event Type: Warning&lt;BR&gt;Event Source: BizTalk Server 2006&lt;BR&gt;Event Category: BizTalk Server 2006 &lt;BR&gt;Event ID: 5410&lt;BR&gt;Date: 12/4/2007&lt;BR&gt;Time: 4:08:39 PM&lt;BR&gt;User: N/A&lt;BR&gt;Computer: EDIBTS2006&lt;BR&gt;Description:&lt;BR&gt;An error occurred that requires the BizTalk service to terminate. The most common causes are the following:&lt;BR&gt;1) An unexpected out of memory error.&lt;BR&gt;OR&lt;BR&gt;2) An inability to connect or a loss of connectivity to one of the BizTalk databases. &lt;BR&gt;The service will shutdown and auto-restart in 1 minute. If the problematic database remains unavailable, this cycle will repeat.&lt;BR&gt;&lt;BR&gt;Error message: Exception has been thrown by the target of an invocation.&lt;BR&gt;Error source: mscorlib&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;My host instance would then shut down and try to restart itself every minute. Each retry would fail with this same error. I also ended up with a running service instance in the admin console that I couldn’t terminate.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;Each time I sent another message, I would have to manually clean these left over instances from the DB before I could restart the host instance successfully.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I finally noticed that this error was only occurring whenever a component in my “In-proc” host instance tried to run.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Base on this I tracked the issue down the btsntsvc.exe.config file that we were suppose to edit during install. I had forgotten to remove the “[path]” place holder that is in the &amp;lt;ConfigurationFile&amp;gt; tag. We were suppose to replace this with the actual path to the Microsoft.Practices.ESB.PipelineComponents.config file. (I’ve did not have this step in my install checklists, so I have since added it). I realized that the AppDomains were not loading correctly and this caused my errors in every orchestration in that&amp;nbsp; tried to run in that AppDomain.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;This is what I had left in my config file:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;EM&gt;&lt;SPAN style="COLOR: red; FONT-STYLE: normal; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold; mso-bidi-font-style: italic"&gt;&lt;FONT size=3&gt;&amp;lt;ConfigurationFile&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;I&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;EM&gt;&lt;SPAN style="COLOR: red; FONT-STYLE: normal; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold; mso-bidi-font-style: italic"&gt;&lt;FONT size=3&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; [path]\Microsoft.Practices.ESB.PipelineComponents.config&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;I&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;FONT size=3&gt;&lt;EM&gt;&lt;SPAN style="COLOR: red; FONT-STYLE: normal; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold; mso-bidi-font-style: italic"&gt;&amp;nbsp;&amp;lt;/ConfigurationFile&amp;gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; COLOR: red; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Segoe UI','sans-serif'"&gt;As I said, I had forgotten to replace the [path] place holder.&amp;nbsp;Anyways, I put in the proper path and I expected this to correct the situation, but I kept getting the same annoying error. After another hour of frustrated debugging, I realized that I had entered the config data like this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;lt;ConfigurationFile&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 36pt"&gt;&lt;FONT size=3&gt;&lt;SPAN lang=EN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN"&gt;C:\Projects\Microsoft.Practices.ESB\source\code\core\config&lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold"&gt;\Microsoft.Practices.ESB.PipelineComponents.config&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN"&gt;&lt;FONT size=3&gt;&amp;lt;/ConfigurationFile&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;You’ll notice that I had put line breaks before and after the path and filename. It was these dam line break that were causing the problem. I took them out and and used this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN style="COLOR: red; mso-ansi-language: EN"&gt;&lt;BR&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;SPAN lang=EN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN"&gt;&amp;lt;ConfigurationFile&amp;gt;C:\Projects\Microsoft.Practices.ESB\source\code\core\config&lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-weight: bold"&gt;\Microsoft.Practices.ESB.PipelineComponents.config&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN lang=EN style="COLOR: red; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN"&gt;&amp;lt;/ConfigurationFile&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Everything worked fine and the issues are gone.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I’ve seen a number of people asking about this on codeplex and other locations, so double check your settings and avoid the headaches.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Cheers and keep on BizTalking...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Peter&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; COLOR: navy; FONT-FAMILY: 'Tahoma','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-fareast-language: EN-CA; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: Calibri; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-fareast-language: EN-CA; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7368753" 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/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>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>Awesome new BizTalk Database Optimization Whitepaper</title><link>http://blogs.msdn.com/pkelcey/archive/2007/09/06/awesome-new-biztalk-database-optimization-whitepaper.aspx</link><pubDate>Fri, 07 Sep 2007 04:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4798197</guid><dc:creator>pkelcey</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/4798197.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=4798197</wfw:commentRss><description>&lt;P&gt;One of the most tricky aspects of developing BizTalk applications can be the performance tuning and optimization phase. A great new whitepaper has just been released to MSDN that has extremely deep and thorough coverage on how to configure, install and tune the a BizTalk database tier. This is a must have paper for anyone dealing with high load, high performance&amp;nbsp;BizTalk applications&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://msdn2.microsoft.com/en-us/library/bb743398.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb743398.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Great work done by John B. Brockmeyer and team.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Cheers and keep on BizTalking&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4798197" 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/BizTalk+2006+R2/default.aspx">BizTalk 2006 R2</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><item><title>Installing, setting up and using the BizTalk SAP adapter</title><link>http://blogs.msdn.com/pkelcey/archive/2006/11/28/Installing_2C00_-Configuring-and-Using-the-BizTalk-Sap-adapter.aspx</link><pubDate>Tue, 28 Nov 2006 17:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:881101</guid><dc:creator>pkelcey</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pkelcey/comments/881101.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pkelcey/commentrss.aspx?PostID=881101</wfw:commentRss><description>&lt;P&gt;Wow, its been a busy&amp;nbsp;couple of months here. &lt;/P&gt;
&lt;P&gt;I was looking forward to getting to the&amp;nbsp;Microsoft SOA conference in Seattle back at the start of October, but I ended up being pulled back to Toronto for a pressing BizTalk opportunity we had&amp;nbsp;going. That opportunity pretty much took all of my time&amp;nbsp;for the first couple of weeks of October. The team here was pretty busy running the Canadian BizTalk Partner Roadshow (outlined in my last post).&amp;nbsp; I had a chance to meet some great partners during the roadshow, but I'll save that discussion for a future post.&lt;/P&gt;
&lt;P&gt;For now, I wanted to&amp;nbsp;some of the work we had to do for the that opportunity that kept me from getting to the Microsoft SOA conference. One of the things that we had to show was how the BizTalk SAP adapter could be installed, configured and used. Since the process can be a bit confusing and tricky, I thought I'd post the steps I followed.&lt;/P&gt;
&lt;P&gt;Step 1 - The obvious first step is to install and configure BizTalk 2006. I won't go into the details of this as there are already a&amp;nbsp;bunch of detailed documents out there that outline this process. Once this is done, you'll likely wonder where the SAP adapter is. It isn't installed as part of the core BizTalk Server installation process.&amp;nbsp; The adapter comes in&amp;nbsp;a separate installation package and you'll need to make sure you have this before you proceed further.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Step 2 - The SAP.NET Connector is a prerequisite for the BizTalk SAP adapter and must be installed before you try installing the adapter. This is the trickiest step for most people and is often the most frustrating part of the process.&amp;nbsp;The&amp;nbsp;frustration&amp;nbsp;comes&amp;nbsp;from trying to figure out what version&amp;nbsp;of the connector you need to install for your BTS 2006 environment.&amp;nbsp;There are multiple versions of the connector and if you don't&amp;nbsp;have the correct one, then nothing is going to work for you. One of the most common errors people hit&amp;nbsp;when&amp;nbsp;installing connector is that the it has a dependancy on Visual Studio 2003. Since BizTalk 2006 is dependant on Visual Studio 2005, the installation fails and you're stuck. Beyond this specific error, there are a number of other errors that you can run into if you aren't using the correct version. The key to getting past these issue is to install the SAP.NET Connector &lt;STRONG&gt;Runtime&lt;/STRONG&gt; version &lt;STRONG&gt;1.0.3.&lt;/STRONG&gt; The runtime version does not have the VS 2003 dependancy and you'll be able to install it in your BizTalk 2006 environment.&amp;nbsp; A key note, the Connector is not provided by Microsoft and you will have to obtain this from SAP. &lt;/P&gt;
&lt;P&gt;Step&amp;nbsp;3 -Before you get too far into this process, you'll want to contact your SAP administrator to get your hands on the connection/username/password information. You'll obviously need this information when we set about configuring the adapter. From my experience, getting connection information and username/password info can often take a few days. Therefore, I recommend asking for this as soon as you find out you'll need to use the adapter.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;In all honesty, getting your hands on the connector and getting the proper connection information will take the majority of your time (It did for me).&amp;nbsp;Once you're past these steps, the remaining steps can be completed quite quickly.&amp;nbsp;In fact, I've attached a short AVI file that shows the remaining steps. Feel free to download it and use it however you need&amp;nbsp; (training, client demos etc) as it really shows how simple it is to configure and use the adapter. The entire movie is only 4 minutes long and its about 1.5 megs zipped.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Step&amp;nbsp;5 - You'll need to&amp;nbsp;install the SAP adapter. It's a pretty simple install and when its done, you'll be able to see the new SAP adapter&amp;nbsp;using the Biztalk Admistration Console.&amp;nbsp;(This is shown in the AVI)&lt;/P&gt;
&lt;P&gt;Step 6 - Once the adapter is installed, we'll need to configure it and setup a send port that we can use to connect to the live environment and generate our message schemas. (Shown in the AVI) Note, that we want to configure the adapter before we do anything else in Visual Studio. &lt;/P&gt;
&lt;P&gt;Step 7 - Now that the adapter is installed, we can use it to generate our schemas. To generate the SAP schemas, right click on your project, select "Add-&amp;gt;Add Generated Item". From the pop-up window, select the "Add Adapter Metadata" option and the Adapter Metadata wizard will launch. One the wizard's first screen, select&amp;nbsp;the SAP option. You'll need to provide the name of the SQL Server and the database where your SAP Adapter is configured.&amp;nbsp; Once you have entered this info, the adapter you already created will show in the third drop down.&amp;nbsp; You'll then be presented with a search screen that will allow you to search against the IDOCs and RFC functions in your SAP environment. (Note, you can use the * wildcard when searching). Once you select the IDOC or RFC you want to generate the schema for, select the next button and the schemas will be generated for you.&lt;/P&gt;
&lt;P&gt;Setp 8 - You're done, go ahead and develop the rest of the BizTalk project as you normally would.&lt;/P&gt;
&lt;P&gt;The&amp;nbsp;AVI file will show as a link at the&amp;nbsp;end of this post.&amp;nbsp;I filmed it at 1024x768 so set your resolution to this before running.&lt;/P&gt;
&lt;P&gt;Cheers and keep on BizTalking.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Peter&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=881101" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/pkelcey/attachment/881101.ashx" length="1550029" 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></item></channel></rss>