<?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>Richard Seroter - SoCal BizTalk Musings</title><link>http://blogs.msdn.com/richardbpi/default.aspx</link><description>Blog featuring tips, code and guidance for BizTalk Server, Commerce Server and Host Integration Server from Microsoft's former Southern California BizTalk Technology Specialist.  For new postings, check out http://seroter.wordpress.com.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>I'm Out</title><link>http://blogs.msdn.com/richardbpi/archive/2007/01/11/i-m-out.aspx</link><pubDate>Fri, 12 Jan 2007 01:16:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1452362</guid><dc:creator>rseroter</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1452362.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1452362</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Today's my last day here at Microsoft, and as of now, this blog is locked down.&amp;nbsp; But, my BizTalk party will continue over at &lt;a href="http://seroter.wordpress.com"&gt;http://seroter.wordpress.com&lt;/a&gt;.&amp;nbsp; Thanks to all who have contributed, and see you on the other side.&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:765e2be0-d59d-456e-9362-a473a382785f" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/BizTalk" rel="tag"&gt;BizTalk&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1452362" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/Other/default.aspx">Other</category></item><item><title>BizTalk SQL Adapter Debatching and MessageBox Dos and Don'ts</title><link>http://blogs.msdn.com/richardbpi/archive/2007/01/04/biztalk-sql-adapter-debatching-and-messagebox-dos-and-don-ts.aspx</link><pubDate>Fri, 05 Jan 2007 02:35:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1413013</guid><dc:creator>rseroter</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1413013.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1413013</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;I've posted a few things over to the &lt;a href="http://seroter.wordpress.com/"&gt;new blog&lt;/a&gt;&amp;nbsp;lately and thought I'd keep this blog in sync until it shuts down next week. &lt;p&gt;First, I did a &lt;a href="http://seroter.wordpress.com/2007/01/03/debatching-inbound-messages-from-biztalk-sql-adapter/"&gt;walkthrough&lt;/a&gt; of how do use the out-of-the-box BizTalk XML pipeline to debatch messages coming inbound from the SQL Adapter.&amp;nbsp; Fun stuff. &lt;p&gt;Second, check out the latest post by Lee on the &lt;a href="http://blogs.msdn.com/biztalk_core_engine/default.aspx"&gt;BizTalk Core Engine&lt;/a&gt;&amp;nbsp;blog which covers some of the underlying SQL magic contained in the MessageBox.&amp;nbsp;&amp;nbsp; He also threatens physical violence against anyone who changes the query plans or stored procs.&amp;nbsp; Ok, not really.&amp;nbsp; Still a good read, even sans violence. &lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1413013" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Leaving Microsoft ...</title><link>http://blogs.msdn.com/richardbpi/archive/2007/01/02/leaving-microsoft.aspx</link><pubDate>Wed, 03 Jan 2007 02:52:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1400985</guid><dc:creator>rseroter</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1400985.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1400985</wfw:commentRss><description>&lt;span style="font-size: 10pt; font-family: arial"&gt; &lt;p&gt;Next Thursday, 1/11/07 will be my last day at Microsoft.&amp;nbsp;&amp;nbsp;I've decided to take an "Architect" position with one of my customers in the Los Angeles area.&amp;nbsp; It was a tough choice to leave my great colleagues and customers, but I'm fairly jazzed about the new opportunities I now have.&lt;/p&gt; &lt;p&gt;So, much like &lt;a href="http://en.wikipedia.org/wiki/Han_Solo"&gt;Han Solo&lt;/a&gt;&amp;nbsp;in &lt;a href="http://www.imdb.com/title/tt0080684/"&gt;The Empire Strikes Back&lt;/a&gt;, this particular&amp;nbsp;blog will be frozen.&amp;nbsp; Next week it will get locked from any future usage.&amp;nbsp; My new employer has indicated support for my blogging habit, so, I've set up a new blog at &lt;a href="http://seroter.wordpress.com"&gt;http://seroter.wordpress.com&lt;/a&gt;.&amp;nbsp; I plan on continuing to do the same things on that blog that I do on the current one.&amp;nbsp; So, look out for more code snippets, walkthroughs, demos, reviews, pointers to cool resources and more.&amp;nbsp; I just posted an article on the new &lt;a href="http://seroter.wordpress.com/"&gt;BizTalk blog&lt;/a&gt; about "&lt;a href="http://seroter.wordpress.com/2007/01/02/orchestration-handling-of-suspended-messages/"&gt;considerations for resuming suspended orchestrations&lt;/a&gt;".&amp;nbsp; Thrilling stuff.&lt;/p&gt; &lt;p&gt;I've really appreciated all the great feedback and questions resulting from the 160+ posts on this blog, and hope you'll continue participating in the new one.&lt;/p&gt; &lt;p style="font-size: 10px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/BizTalk" rel="tag"&gt;BizTalk&lt;/a&gt; &lt;/p&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1400985" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/richardbpi/archive/tags/Other/default.aspx">Other</category></item><item><title>Using BizTalk Server For Email Alert Bus</title><link>http://blogs.msdn.com/richardbpi/archive/2006/12/28/using-biztalk-server-for-email-alert-bus.aspx</link><pubDate>Thu, 28 Dec 2006 22:15:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1375703</guid><dc:creator>rseroter</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1375703.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1375703</wfw:commentRss><description>&lt;span style="font-size: 10pt; font-family: arial"&gt; &lt;p&gt;Just recently I had a customer ask me if they could use their existing BizTalk infrastructure to manage events that were spawned from their primary application.&amp;nbsp;&amp;nbsp; So, I built a small demonstration that I've outlined here.&lt;/p&gt; &lt;p&gt;Basically, this company's primary application triggers events that should result in email notifications.&amp;nbsp; They wanted something that could listen for these events, send emails, and be flexible and easy to modify.&amp;nbsp; The key is that last part.&amp;nbsp; I wanted to build something that would not require a code change or redeployment if new events were added or email formats had to change.&lt;/p&gt; &lt;p&gt;I started with a basic schema.&amp;nbsp; All that I get from the primary application is the "event source" and "event ID".&amp;nbsp; So I need an orchestration that will fetch the additional data needed to send and format the email alert.&amp;nbsp; From the base schema, I created another schema that BizTalk will actually use to send the alert.&amp;nbsp; It looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.28.2006alert1.jpg"&gt; &lt;/p&gt; &lt;p&gt;I've now got a "Template" node which will hold the physical location of the XSLT template, and an "OptionalText" node which will hold any additional text we want to include in the email message (HTML markup supported!).&lt;/p&gt; &lt;p&gt;Next I needed a pipeline to do the XSLT conversion.&amp;nbsp; If you recall, the BizTalk SDK ships with a sample for using XSLT to build an HTML formatted email message.&amp;nbsp; I needed to modify that sample because instead of getting the "template" property at design time, I need to use a run-time value.&amp;nbsp; So, I copied the code from the SDK sample, and modified the core &lt;strong&gt;Execute&lt;/strong&gt; method:&lt;/p&gt; &lt;p style="font-family: courier"&gt;public IBaseMessage Execute(IPipelineContext pc, IBaseMessage inmsg)&lt;br&gt;{ &lt;br&gt;&lt;span style="color: green"&gt;//variable to grab out template location (promoted value)&lt;/span&gt;&lt;br&gt;string templatePath = inmsg.Context.Read("TemplateLocation", "http://CompanyA.PrimaryApp.EmailNotification.ApplicationAlertPropSchema").ToString();&lt;br&gt;&lt;span style="color: green"&gt;//call helper method, passing in stream and template path&lt;/span&gt;&lt;br&gt;inmsg.BodyPart.Data = TransformMessage(inmsg.BodyPart.Data, templatePath); &lt;br&gt;inmsg.BodyPart.ContentType = "text/html"; &lt;br&gt;return inmsg;&lt;br&gt;} &lt;/p&gt; &lt;p&gt;&amp;nbsp;Ok, now I had to consume this custom pipeline component.&amp;nbsp; My new "send" pipeline in Visual Studio looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.28.2006alert2.jpg"&gt; &lt;/p&gt; &lt;p&gt;I threw the &lt;strong&gt;XML Assembler&lt;/strong&gt; in there just to be sure that my "TemplateLocation" value would get promoted into context.&amp;nbsp; Probably unnecessary, but what the heck.&lt;/p&gt; &lt;p&gt;Next we needed the Business Rules that will store the key information needed to construct the email message.&amp;nbsp; Based on the source of the event, we need to designate a recipient, subject, extra "body" information, and template to be used.&amp;nbsp; One of the rules I built looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.28.2006alert4.jpg"&gt; &lt;/p&gt; &lt;p&gt;Note that the &lt;strong&gt;(optional) body text&lt;/strong&gt; field contains HTML markup.&amp;nbsp; You may also see that I perform the &lt;strong&gt;Halt&lt;/strong&gt; command at the bottom.&amp;nbsp;&amp;nbsp;If that rule fires, then I want to&amp;nbsp;halt&amp;nbsp;further rule execution.&amp;nbsp;I wanted to be able to handle unknown events, so each defined alert had a &lt;strong&gt;Priority&lt;/strong&gt; number set in the Business Rules Composer. Finally, I created one final rule with a &lt;strong&gt;Priority&lt;/strong&gt; of 0, which by design, will only fire if all preceding rules have been ignored (that is, it's an event that wasn't recognized by any earlier rules and processing halted).&amp;nbsp; That "catch all" rule looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.28.2006alert5.jpg"&gt; &lt;/p&gt; &lt;p&gt;Almost there.&amp;nbsp; Now, an orchestration is needed to tie all this together.&amp;nbsp; My process flow consists of receiving a message, instantiating a .NET class (which holds all the email details), calling my Business Rule(s), building the output message, and sending the message out.&amp;nbsp; The flow looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.28.2006alert3.jpg"&gt; &lt;/p&gt; &lt;p&gt;The main guts of this process exist in the final &lt;strong&gt;Construct &lt;/strong&gt;shape.&amp;nbsp; You'll see that the &lt;strong&gt;Construct&lt;/strong&gt; shape exists in an &lt;strong&gt;Atomic Scope&lt;/strong&gt;.&amp;nbsp; That's because I needed to use a variable of type &lt;strong&gt;XmlElement&lt;/strong&gt;.&amp;nbsp; Why?&amp;nbsp; Here's the code for the &lt;strong&gt;Message Assignment&lt;/strong&gt;:&lt;/p&gt; &lt;p style="font-family: courier"&gt;&lt;span style="color: green"&gt;Create outbound message from inbound message&lt;/span&gt;&lt;br&gt;AlertOutput = AlertInput;&lt;br&gt;&lt;span style="color: green"&gt;Get the XML element holding the optional text&lt;/span&gt;&lt;br&gt;xmlElem = xpath(AlertOutput, "/*[local-name()='ApplicationAlert' and namespace-uri()='http://CompanyA.PrimaryApp.EmailNotification']/*[local-name()='OptionalText' and namespace-uri()='']");&lt;br&gt;&lt;span style="color: green"&gt;Set the "innerXML" equal to the HTML markup&lt;/span&gt;&lt;br&gt;xmlElem.InnerXml = EmailData.EmailBody;&lt;br&gt;&lt;span style="color: green"&gt;Set the template to use&lt;/span&gt;&lt;br&gt;AlertOutput.Template = EmailData.EmailTemplate;&lt;br&gt;&lt;span style="color: green"&gt;Set all the needed email properties&lt;/span&gt;&lt;br&gt;SendFASTAlertPort(Microsoft.XLANGs.BaseTypes.Address) = "mailto:" + EmailData.EmailTo;&lt;br&gt;AlertOutput(SMTP.From) = EmailData.EmailFrom;&lt;br&gt;AlertOutput(SMTP.Subject) = EmailData.EmailSubject;&lt;br&gt;AlertOutput(SMTP.SMTPHost) = "WS03VSSQL05";&lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;I had to do the whole "XmlElement" thing because just setting the HTML string equal to the &lt;strong&gt;OptionalText&lt;/strong&gt; field caused the HTML markup to get jumbled.&amp;nbsp; By using &lt;strong&gt;InnerXML&lt;/strong&gt; on the XMLElement, the HTML (really just valid XML) gets thrown under the &lt;strong&gt;OptionalText&lt;/strong&gt; field as XML data, tags intact.&amp;nbsp; Pretty handy.&lt;/p&gt; &lt;p&gt;Finally, I built and deployed this whole thing.&amp;nbsp; I then wrote a few XSLT templates to format my HTML email.&amp;nbsp; After feeding a few different alerts into BizTalk, my Outlook mailbox contained the following messages:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.28.2006alert6.jpg"&gt; &lt;/p&gt; &lt;p&gt;You'll see the last sentence in each email&amp;nbsp;"body" represents the HTML markup set in the Business Rule.&amp;nbsp; So, now I have an architecture where someone could change just the XSLT template and modify the entire alert message.&amp;nbsp; If you wanted to add new events to be specifically&amp;nbsp;handled, all that's required is a new business rule, and optionally, a new XSLT template.&amp;nbsp; Pretty simple!&lt;/p&gt; &lt;p style="font-size: 10px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/BizTalk" rel="tag"&gt;BizTalk&lt;/a&gt; &lt;/p&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1375703" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Versioning Strategy for BizTalk Assemblies</title><link>http://blogs.msdn.com/richardbpi/archive/2006/12/19/versioning-strategy-for-biztalk-assemblies.aspx</link><pubDate>Wed, 20 Dec 2006 03:14:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1327617</guid><dc:creator>rseroter</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1327617.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1327617</wfw:commentRss><description>&lt;span style="font-size: 10pt; font-family: arial"&gt; &lt;p&gt;I spent a bit of time today reviewing some best practices for assembly version in BizTalk applications, and wanted to also elicit community feedback.&lt;/p&gt; &lt;p&gt;One of the first things that a new BizTalk developer is told when building up a BizTalk solution is to not cram all the various artifacts into a single .NET project.&amp;nbsp; Often that developer will be told to put schemas in one project, maps in another, pipelines in another, and finally orchestrations in an isolated project.&amp;nbsp; I've become less of a fan of this rigid structure.&amp;nbsp; But first, let's see how I'd do an upgrade of a solution configured this way.&lt;/p&gt; &lt;p&gt;I'm starting with a simple project, containing a single schema file.&amp;nbsp; The message looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.19.2006versioning1.jpg"&gt;&lt;/p&gt; &lt;p&gt;I built and&amp;nbsp;deployed this project and constructed a simple "receive location" and "send port" where the send port had a subscription/filter on &lt;strong&gt;BTS.MessageType&lt;/strong&gt;.&amp;nbsp; I tested it, and everything travels through just fine.&lt;/p&gt; &lt;p&gt;Then I built a simple orchestration that makes a decision and writes to the event log.&amp;nbsp; It looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.19.2006versioning2.jpg"&gt;&lt;/p&gt; &lt;p&gt;I referenced the schema project, built, deployed and tested the orchestration successfully.&amp;nbsp; The next step was to create a new version of the schema.&amp;nbsp; So, I added a "Status" node, and then changed the .NET Assembly Version.&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.19.2006versioning3.jpg"&gt; &lt;/p&gt; &lt;p&gt;I then rebuilt and deployed the schema project.&amp;nbsp; Now given that you've constantly been told that &lt;strong&gt;namespace#root&lt;/strong&gt; has to be unique, the screenshot below may worry you.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.19.2006versioning4.jpg"&gt; &lt;/p&gt; &lt;p&gt;If you want to read more about how pipelines resolve schemas, read &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/BTS06CoreDocs/html/35a79a6f-788b-4ca1-8483-36dcba5ae580.asp?frame=true"&gt;here&lt;/a&gt;.&amp;nbsp; So you may expect&amp;nbsp;that I would&amp;nbsp;get a "ambiguous reference" sort of error when I try and submit the inbound message now.&amp;nbsp; However, when I drop the file, the orchestration still picks it up, processes it and continues on its merry way.&amp;nbsp; But, what happens if I "stop" the orchestration so that I can see the message in flight, and investigate the &lt;strong&gt;SchemaStrongName&lt;/strong&gt; property assigned by the pipeline?&amp;nbsp; What you'd see is this:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;img src="http://www.seroter.com/blogpics/12.19.2006versioning5.jpg"&gt; &lt;/p&gt; &lt;p&gt;Surprise.&amp;nbsp; The schema resolved to the most recent version, and THIS is the one yanked in by the orchestration.&amp;nbsp; This surprised me a bit.&amp;nbsp; I would have expected the send port containing the &lt;strong&gt;BTS.MessageType&lt;/strong&gt; filter to yank the most recent version of the schema since it only cared about "type", but I had thought the orchestration would only grab the version it explicitly referenced.&amp;nbsp; Now if I try and remove the "1.0" schema assembly via the Admin Console, I get an error stating that the orchestration is referencing it.&lt;/p&gt; &lt;p&gt;So to get rid of the "1.0" schema project, I'd have to reversion the Orchestrations project with an updated build.&amp;nbsp; Then after gracefully transitioning to the new "1.1" orchestration, I could safely remove legacy assemblies.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Now, if I used a custom receive pipeline, THEN it seems I can dictate the schema version the orchestration consumes (old schema or new schema).&amp;nbsp; I tested this by putting a receive pipeline (with XML Disassembler and Validator components)&amp;nbsp;in the project with the schema.&amp;nbsp; I deployed that (version 1.0 again).&amp;nbsp; Then, I upped the version to "1.1" and built and deployed.&amp;nbsp; So, now I have schema/pipeline projects for "1.0" and "1.1" and an orchestration project still built with "1.0".&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.seroter.com/blogpics/12.19.2006versioning6.jpg"&gt; &lt;/p&gt; &lt;p&gt;By switching the pipeline, the orchestration would grab specific versions of the schema.&amp;nbsp; For instance, if I dropped a "1.0" message (no "Status" field) when the "1.0" pipeline was selected, everything ran fine.&amp;nbsp; If I dropped a "1.1" message with the "1.0" pipeline still in place, I got a suspended message.&amp;nbsp; Same situation when I flipped to the "1.1" pipeline.&amp;nbsp; The orchestration consumed either the "1.0" OR "1.1" message.&lt;/p&gt; &lt;p&gt;So, any conclusions here?&amp;nbsp; Changing .NET Assembly Version has broad impact, regardless of how you've factored your projects.&amp;nbsp; One recommendation I've seen is to only change the &lt;strong&gt;Assembly File Version&lt;/strong&gt; so that you still have an incremented build number, but the core .NET version stays the same (allowing for lower impact changes).&amp;nbsp; However, that could get dicey if you are truly introducing breaking changes.&amp;nbsp; You'll also see recommendations to version schemas by changing the &lt;strong&gt;namespace#root&lt;/strong&gt; combination (e.g. changing the namespace to &lt;strong&gt;http://Microsoft.Project.BizTalkStuff.v1&lt;/strong&gt;).&amp;nbsp; Of course then you HAVE to change all the dependent artifacts (maps, pipelines, orchestrations) because you've made a core modification.&lt;/p&gt; &lt;p&gt;This leads me to a solution structure that is less segmented by artifact &lt;strong&gt;type&lt;/strong&gt;, but more by artifact &lt;strong&gt;relevance&lt;/strong&gt;.&amp;nbsp; That is, group related artifacts in&amp;nbsp;the same&amp;nbsp;project.&amp;nbsp; You still may have a "base schemas" project, but it's also ok to have a subsequent project that contains a few schemas, maps and orchestrations.&amp;nbsp; Try and group the items that will change and version together.&amp;nbsp; Now if I have to version the schema, I can fairly naturally version the sibling artifacts and deploy fewer assemblies.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;So I ask you&lt;/strong&gt;: any other versioning strategies that you prefer when you want to lessen the impact of production modifications?&amp;nbsp; How do you like organizing your solution structure?&amp;nbsp; If you only have to make a slight change, how do you prevent the rebuild of every dependent project?&lt;/p&gt; &lt;p style="font-size: 10px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/BizTalk" rel="tag"&gt;BizTalk&lt;/a&gt; &lt;/p&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1327617" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Transactions and Compensation Using BizTalk Server</title><link>http://blogs.msdn.com/richardbpi/archive/2006/12/06/transactions-and-compensation-using-biztalk-server.aspx</link><pubDate>Wed, 06 Dec 2006 21:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1224746</guid><dc:creator>rseroter</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1224746.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1224746</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;After reading &lt;A href="http://geekswithblogs.net/cyoung/" mce_href="http://geekswithblogs.net/cyoung/"&gt;Charles Young's&lt;/A&gt; fantastic post today on &lt;A href="http://geekswithblogs.net/cyoung/articles/100424.aspx" mce_href="http://geekswithblogs.net/cyoung/articles/100424.aspx"&gt;BizTalk transaction compensation&lt;/A&gt;, I was finally inspired to write a post that's been on my blog "to do" list for 7 months.&amp;nbsp; Specifically, I wanted to demonstrate simple compensation handling, and dealing with loops and transactions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I'd like to walk through a simple solution I just built and demonstrate the transactional considerations.&amp;nbsp; The first thing to show here is that data (variables, messages) manipulated within an atomic scope do NOT have their changes committed unless the atomic scope successfully completes.&amp;nbsp; In the picture below, you'll see a very simple orchestration I built that receives a message, sets a value for a variable ("Status"), jumps into an atomic transaction, does a calculation, updates the "Status", and finally completes by writing the "Status" value back out.&amp;nbsp; Basically what I'm trying to show is that the variable "Status" may have gotten changed by the action in the atomic scope, however, if the scope fails for any reason, that change isn't committed.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx1.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx1.jpg"&gt; &lt;/P&gt;
&lt;P&gt;I'm using the (now-Microsoft) tool &lt;A href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/DebugView.mspx" mce_href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/DebugView.mspx"&gt;DebugView&lt;/A&gt; to view the &lt;STRONG&gt;Debug.WriteLine&lt;/STRONG&gt; statements embedded in my orchestration.&amp;nbsp; When I pass in a simple message, you see here that indeed the value is initialized ("Starting") and changed by the atomic transaction ("Updated").&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx2.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx2.jpg"&gt;&lt;/P&gt;
&lt;P&gt;If I pass in a bad message (in this case, dividing by 0), then the orchestration is suspended and the compensation code does NOT fire.&amp;nbsp; Why?&amp;nbsp; Compensation only fires for committed transactions, and since an operation within the atomic scope failed, there's technically nothing committed, so nothing needs to be compensated.&amp;nbsp; Now what if I wrap the atomic transaction in an &lt;STRONG&gt;long running &lt;/STRONG&gt;(LR) transaction so that I can catch any exceptions and gracefully handle it?&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx3.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Now, when I run this process, the exception block catches the error, and I continue on in my orchestration.&amp;nbsp; As you'll see here, because the atomic transaction did not commit, the "Status" field change was not persisted.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx4.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx4.jpg"&gt;&lt;/P&gt;
&lt;P&gt;What happens if we instead cause an exception AFTER the atomic transaction has completed?&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx5.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx5.jpg"&gt;&lt;/P&gt;
&lt;P&gt;You'll see here that the step following the atomic transaction raises an exception.&amp;nbsp; What do you expect to happen when I drop a standard (valid) message into this orchestration?&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx6.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx6.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The compensation code did NOT fire since I didn't do anything to trigger it.&amp;nbsp; All that happened was that the shapes in the Exception block were processed.&amp;nbsp; Let's force a compensation to happen.&amp;nbsp; We could, in the Exception block, use a &lt;STRONG&gt;Compensation&lt;/STRONG&gt; shape and explicitly compensate the atomic transaction.&amp;nbsp; But, what if I had 4 atomic transactions in there and didn't want to explicitly roll back each?&amp;nbsp; What I can do is compensate the &lt;STRONG&gt;Long Running&lt;/STRONG&gt; transaction, which in turn will execute the compensation code for each contained transaction in reverse order.&amp;nbsp; We'll see more of that in a second.&amp;nbsp; My compensation now looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx7.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx7.jpg"&gt;&lt;/P&gt;
&lt;P&gt;If I spin up the orchestration now, you can see here that the Exception block AND compensation code both fire.&amp;nbsp; Sweet.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx8.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx8.jpg"&gt;&lt;/P&gt;
&lt;P&gt;What happens if I add a second atomic scope to our LR transaction and raise the exception after the new transaction?&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx9.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx9.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Without changing anything in the LR transaction, it went ahead and executed compensation on both transactions in reverse order.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx10.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx10.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The last thing I want to show here (and probably the neatest), is something Charles mentioned in passing in his article.&amp;nbsp; I like to show this when I teach BizTalk workshops and it always amuses folks. What happens if I'm executing transaction in the confines of a loop?&amp;nbsp; Is BizTalk actually smart enough to keep track of this and handle it appropriately?&amp;nbsp; I've modified my orchestration to now contain a Loop shape and cycle through 5 times.&amp;nbsp; On each pass, it executes the atomic transaction.&amp;nbsp; Following the loop, I raise an exception.&amp;nbsp; I still haven't changed anything with regards to compensation in the LR transaction.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx11.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx11.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Any idea what you'll see when I run this?&amp;nbsp; As you'll notice below, it goes ahead and executes each transaction, and exception is thrown and caught, and each of the looped transactions have their respective compensation code called.&amp;nbsp; Neato.&amp;nbsp; I'm always impressed to see that.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.seroter.com/BlogPics/12.06.2006tranx12.jpg" mce_src="http://www.seroter.com/BlogPics/12.06.2006tranx12.jpg"&gt;&lt;/P&gt;
&lt;P&gt;There you go.&amp;nbsp; Read Charles' article for significant more depth on the topic, but hopefully this provides a more simple take on a fairly complex process.&lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1224746" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Choosing the Right Integration Technology</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/29/choosing-the-right-integration-technology.aspx</link><pubDate>Wed, 29 Nov 2006 22:28:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1173453</guid><dc:creator>rseroter</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1173453.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1173453</wfw:commentRss><description>&lt;p&gt;Yesterday &lt;a href="http://blogs.msdn.com/irenak/default.aspx"&gt;Irena Kennedy&lt;/a&gt; posted a &lt;a href="http://blogs.msdn.com/irenak/archive/2006/11/29/sysk-249-choosing-the-right-microsoft-integration-technology.aspx"&gt;great compilation of multiple sources&lt;/a&gt;&amp;nbsp;which resulted in a big fat post&amp;nbsp;outlining selection criteria for an integration solution.&amp;nbsp; She&amp;nbsp;summarizes&amp;nbsp;choosing between SSIS, MSMQ, WCF, BizTalk, SQL Service Broker, and Host Integration Server.&amp;nbsp;&amp;nbsp;&amp;nbsp;Check it out.&lt;/p&gt; &lt;p&gt;Also, if you've never undergone a code review by Irena, you haven't truly lived.&amp;nbsp; It's a truly terrifying and rewarding experience from a brilliant MCS asset.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1173453" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Installing BizTalk Server 2006 R2 Beta 1</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/28/installing-biztalk-server-2006-r2-beta-1.aspx</link><pubDate>Tue, 28 Nov 2006 20:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1166366</guid><dc:creator>rseroter</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1166366.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1166366</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;Yesterday I did a quick evaluation of the Beta 1 release of BizTalk Server 2006 R2, and thought I'd walk through the installation process and highlight some new things I noticed. &lt;/P&gt;
&lt;P&gt;The Beta 1 release looks to be for early adopters only, so there is no "public" release at the moment. Hopefully there will be one in the Spring. Also please note that anything shown here is subject to change by Beta 2 or final release. &lt;/P&gt;
&lt;P&gt;First, I walked through the standard installation.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install1.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install1.jpg"&gt; 
&lt;P&gt;Next I chose the components to install. You can see from my image below that there are additional EDI/AS2 components, Windows Communication Foundation (WCF) bits, and additional BAM Eventing (new interceptors for both Windows Workflow and WCF). &lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install2.gif" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install2.gif"&gt; &lt;/P&gt;
&lt;P&gt;After installing, I jumped right to configuration. As you can see here, not a whole lot of changes.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install3.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;You will see additional configuration, however, for the new EDI/AS2 functionality.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install4.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install4.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Next I went through and installed the new BizTalk .NET adapters. These adapters allow you to ping various Line of Business (LOB) systems directly through .NET code without going through BizTalk.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install5.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install5.jpg"&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install6.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install6.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Once everything was installed, I went to see if anything new showed up in the BizTalk Administration Console. First thing I saw was a new "Application" called &lt;B&gt;BizTalk EDI Application&lt;/B&gt;. Inside, there were a couple of orchestrations, lots of schemas, ad a few pipelines.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install7.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install7.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Next I checked out the "Adapters" section and saw all the new WCF adapters available. Nice.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install8.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install8.jpg"&gt; &lt;/P&gt;
&lt;P&gt;I read in one of the documents that the BAM Management tool had been upgraded, so I looked at the &lt;B&gt;bm.exe&lt;/B&gt; command line tool to see what new options were available. You'll see below that there are now options to deal directly with interceptors. This will allow you to instrument your WF and WCF process to feed data directly into the common BAM infrastructure. I like it.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install9.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install9.jpg"&gt; &lt;/P&gt;
&lt;P&gt;I wanted to see all the options available for the WCF adapters, so I went ahead and build a couple new receive locations. The first receive location uses the &lt;B&gt;WCF - WSHttp&lt;/B&gt; adapter.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install10.gif" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install10.gif"&gt; &lt;/P&gt;
&lt;P&gt;Then I built a &lt;B&gt;WCF - Custom&lt;/B&gt; location. Check out all the various options below:&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install11.gif" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install11.gif"&gt; &lt;/P&gt;
&lt;P&gt;Finally, I jumped into Visual Studio.NET 2005 and kicked off the &lt;B&gt;WCF Service Publishing Wizard&lt;/B&gt;. If you've ever used the standard &lt;B&gt;Web Services Publishing Wizard&lt;/B&gt;, then you'd be fairly familiar with this one.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install11.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install11.jpg"&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/blogpics/11.28.2006R2install12.jpg" mce_src="http://www.seroter.com/blogpics/11.28.2006R2install12.jpg"&gt; &lt;/P&gt;
&lt;P&gt;In future posts I'll dig more into how to actually use all these great new functions. Some folks are already digging into the functionality, like my buddy &lt;A href="http://weblogs.asp.net/gsusx/default.aspx" mce_href="http://weblogs.asp.net/gsusx/default.aspx"&gt;Jesus Rodriguez&lt;/A&gt; who has a post on &lt;A href="http://weblogs.asp.net/gsusx/archive/2006/11/21/invoking-tcp-hosted-wcf-services-using-biztalk-server-r2.aspx" mce_href="http://weblogs.asp.net/gsusx/archive/2006/11/21/invoking-tcp-hosted-wcf-services-using-biztalk-server-r2.aspx"&gt;Invoking TCP-Hosted WCF Services using BizTalk Server R2&lt;/A&gt;. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1166366" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>MSDN Magazine Article on Custom BizTalk Adapters</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/17/msdn-magazine-article-on-custom-biztalk-adapters.aspx</link><pubDate>Sat, 18 Nov 2006 03:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1097172</guid><dc:creator>rseroter</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1097172.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1097172</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;Good article in this month's MSDN Magazine called &lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/12/BizTalkAdapters/default.aspx" mce_href="" http: msdn.microsoft.com msdnmag issues 06 12 BizTalkAdapters default.aspx?&gt;Integrate E-Mail Processing Into Your Business Solutions&lt;/A&gt;. It covers a variety of topics, including the POP3 adapter, orchestration and some BizTalk plumbing. I also found the part on writing a custom adapter to deal with email message attachment parts fairly interesting. The custom adapter takes each message part and adds it to a custom database. Check it out. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1097172" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>BizTalk Property Schemas Separated From Associated Schemas</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/17/biztalk-property-schemas-separated-from-associated-schemas.aspx</link><pubDate>Sat, 18 Nov 2006 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1096570</guid><dc:creator>rseroter</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1096570.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1096570</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;I caught a glimpse of something in the BizTalk Server 2006 Help the other day that surprised me a bit. The note said:&lt;BR&gt;&lt;I&gt;If a property schema is associated with a message schema, then these two must be in the same BizTalk project. Separating property schema from its associated message schema in different BizTalk projects is not supported.&lt;/I&gt; &lt;BR&gt;I had seen that mentioned elsewhere and had mentally discarded it, but I wanted to see whether it's not &lt;B&gt;possible&lt;/B&gt;, or it's not &lt;B&gt;supported&lt;/B&gt;. &lt;/P&gt;
&lt;P&gt;First step was to build two separate projects; one to hold my property schema, another to hold my working schemas. &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.17.2006promotedassembly1.jpg" mce_src="http://www.seroter.com/BlogPics/11.17.2006promotedassembly1.jpg"&gt; &lt;BR&gt;The property schema has a single field, &lt;B&gt;OrderID&lt;/B&gt;. After building and compiling the project, I referenced that project from my primary schemas project. I then tried to promote the &lt;B&gt;OrderNumber&lt;/B&gt; value in the schema, and sure enough, I was allowed to pick a schema from a referenced assembly. So far so good. &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.17.2006promotedassembly2.jpg" mce_src="http://www.seroter.com/BlogPics/11.17.2006promotedassembly2.jpg"&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;After also promoting the value in my second schema, I deployed all the projects. Next step was to build a send port that had a subscription filter in the &lt;B&gt;OrderID&lt;/B&gt; property field. Finally, I dropped two different messages into BizTalk (via FILE receive location), and both messages were picked up by the send port.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.17.2006promotedassembly3.jpg" mce_src="http://www.seroter.com/BlogPics/11.17.2006promotedassembly3.jpg"&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;So, from a technical standpoint, this seems to work fine. Clearly there's some reason for us making this an unsupported configuration, and I'm all ears as for why that's the case. It would seem to me that separating my property schemas into a separate assembly creates a much more flexible architecture than forcing it to live with the schemas that use it. Thoughts? &lt;/P&gt;
&lt;P&gt;BTW, I'm jazzed that this is my first post using Microsoft Windows Vista RTM, Office 2007 RTM, and Expression Web Designer (to write the post itself). After installing Windows Vista, I finally had to discard my trusty Allaire Homesite which wouldn't install correctly. I've used Homesite (now owned by Macromedia) for years to write all my HTML, but finally have to upgrade my toolset. Of course, I'll still do the HTML by hand, but now in a snazzier shell. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1096570" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Using Only BizTalk Messaging With Request/Response On Both Ends</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/10/using-only-biztalk-messaging-with-request-response-on-both-ends.aspx</link><pubDate>Fri, 10 Nov 2006 22:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1055080</guid><dc:creator>rseroter</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1055080.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1055080</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;So is BizTalk *really* smart enough to allow me to do request/response operations on both sides of my process without an orchestration in the middle? I set out to prove this scenario out for myself and wanted to share the results. &lt;/P&gt;
&lt;P&gt;I want to see if I can create a web service input into BizTalk, and have that request message trigger a request/response send port, and then take the response of that send port, and match it back to the response message of the original call. Make sense? So ... 
&lt;OL&gt;
&lt;LI&gt;Call synchronous web service that publishes a message into BizTalk &lt;/LI&gt;
&lt;LI&gt;Take that input message and then route to a send port which in turn calls out to an external web service &lt;/LI&gt;
&lt;LI&gt;Accept that response of that web service call &lt;/LI&gt;
&lt;LI&gt;Route that response back to the initial caller &lt;/LI&gt;&lt;/OL&gt;For this to happen, this would mean that BizTalk is able hold onto that initial calling thread, even as processing potentially hops physical machines, application boundaries and the like. 
&lt;P&gt;First, you'll see my web service below. It doesn't do much. Takes a "customer" in, changes the customer name a bit, returns the same customer type back.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006messagingws1.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006messagingws1.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Then I added a web reference to my project so that I'd get the web message types I needed.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006messagingws2.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006messagingws2.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Next, I needed two maps. One to go from the "customer" passed into the BizTalk web service to the format expected by the service called by the send port. And, then a map to handle the reverse scenario (mapping the result of the send port's service call back to the format of the initial caller).&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006messagingws3.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006messagingws3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Then comes the ports. First, the receive location for the BizTalk-generated web service (which was built by generating a service out of schemas directly). This receive location does XML pipelines in both directions, and the receive port applies both the inbound and outbound mapping.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006messagingws4.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006messagingws4.jpg"&gt; &lt;/P&gt;
&lt;P&gt;The send port also does XML pipelines both directions. I used the new functionality in BizTalk Server 2006 which allows me to call a web service directly without using an orchestration. In my case, I referenced my BizTalk assembly, and because I added a web reference to my external service, I have the proxy class needed to call my web method.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006messagingws5.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006messagingws5.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Now the moment of truth. I created a client app that calls the service. And, to make sure that the correct response finds its way back to the correct thread, I opened a couple instances of the client tool at once. After submitting web service requests from both simultaneously, I did indeed receive the correct message back to each client.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006messagingws6.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006messagingws6.jpg"&gt; &lt;/P&gt;
&lt;P&gt;So how the heck does this work? The End Point Manager (EPM) actually maintains subscriptions for the response message (which you can see if you're really quick on the "run query" button). These subscriptions allow the EPM to grab the response message from the send port and correlate it back to the response message of the initial caller. I'm actually *really* impressed that this works. That's fairly brainy stuff. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt;, &lt;A href="http://technorati.com/tag/WebServices" rel=tag mce_href="http://technorati.com/tag/WebServices"&gt;Web Services&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1055080" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Exposing BizTalk Web Services That Accept Generic Content</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/10/exposing-biztalk-web-services-that-accept-generic-content.aspx</link><pubDate>Fri, 10 Nov 2006 18:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1054447</guid><dc:creator>rseroter</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1054447.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1054447</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;So what if I want to open up a BizTalk web services channel that accepts *any* XML message and then lets BizTalk Server figure out what do with that data? &lt;/P&gt;
&lt;P&gt;In considering ESB functionality, you often have the concept of generic ways to get messages "on the bus." Given that BizTalk can be a perfectly good bus, with a robust publish-subscribe engine, it's logical that BizTalk could support such a broad requirement. So what I need is a one-way "BizTalk web service" that accepts untyped content. There are a few viable options for doing this, but let's go with the simplest. I've created a really basic orchestration with a single receive shape, and it accepts a message of type &lt;B&gt;System.Xml.XmlDocument&lt;/B&gt;. &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc1.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc1.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Now I have no intentions of using this orchestration, but, I can use it to generate the service I want. I walked through the &lt;B&gt;Web Services Publishing Wizard&lt;/B&gt; and "exposed" this orchestration as a service. What that gave me, was a SOAP service that looks like this ...&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc2.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc2.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Given that nothing in the web service says I have to actually *use* the orchestration, I can use this process to create general on-ramp services. Now, I created a couple of send ports that have subscriptions on the &lt;B&gt;BTS.MessageType&lt;/B&gt; property. I could easily do the same thing with Direct Bound orchestrations. These send ports (or orchestrations) are subscribers on message types, and aren't concerned with the source of the message.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc3.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Next I set up a Receive Port and Receive Location to accept the web service input. The &lt;B&gt;key step&lt;/B&gt; is to use the &lt;B&gt;XML Receive&lt;/B&gt; pipeline. This forces BizTalk to inspect the message, and promote the &lt;B&gt;MessageType&lt;/B&gt; value.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc4.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc4.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Finally, I built a simple application that uses this on-ramp service and publishes messages to the bus. You can see below that my web service method &lt;B&gt;PostGenericDoc&lt;/B&gt; accepts a single parameter of type &lt;B&gt;XmlNode&lt;/B&gt;. In my case, I send one of two different XML documents.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc5.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006onrampsvc5.jpg"&gt; &lt;/P&gt;
&lt;P&gt;This is a fairly powerful concept. Naturally I lose the ability to have a service contract, and run the risk of accepting content that has no subscribers, but, I also gain the ability to have a single service that be used by countless applications to simply and easily push messages onto the BizTalk bus. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt;, &lt;A href="http://technorati.com/tag/WebServices" rel=tag mce_href="http://technorati.com/tag/WebServices"&gt;Web Services&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1054447" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Setting Promoted, Distinguished Fields on BizTalk Web Messages</title><link>http://blogs.msdn.com/richardbpi/archive/2006/11/09/setting-promoted-distinguished-fields-on-biztalk-web-messages.aspx</link><pubDate>Fri, 10 Nov 2006 09:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1052916</guid><dc:creator>rseroter</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/1052916.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=1052916</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;Just finishing up a week-long 12-hour-a-day BizTalk workshop for my SoCal customers, and wanted to post a few bits I built for the class. This post focuses on using promoted properties and distinguished fields on web messages. &lt;/P&gt;
&lt;P&gt;One apparent challenge when consuming an existing web service from within a BizTalk orchestration is the fact that you don't appear to have a schema added to your project. Oh, you get "web message types" and so forth, but that's not the same. What if you need to access a field in the input/output message in a message assignment shape, or, need to initialize a correlation set when you call a one-way service? &lt;/P&gt;
&lt;P&gt;When you add a "web reference" to your project, you get something like this ... &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006promotedws1.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006promotedws1.jpg"&gt; &lt;BR&gt;&lt;BR&gt;However, if you open up the reference all the way, you can drill through the &lt;B&gt;references.map&lt;/B&gt; and you'll find &lt;B&gt;references.xsd.&lt;/B&gt; This XSD schema holds all the types used in the WSDL.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006promotedws2.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006promotedws2.jpg"&gt; &lt;BR&gt;&lt;BR&gt;So, if you want to distinguish a field, or promote a property, it's as easy as opening up this schema, and making that choice. Then you can easily access web message fields from within orchestration shapes, or, initialize new correlation sets on web service calls.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/11.09.2006promotedws3.jpg" mce_src="http://www.seroter.com/BlogPics/11.09.2006promotedws3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;The obvious disclaimer applies: this is a auto-generated schema, and if I "update reference" I'd lose any promoted or distinguished distinction. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt;, &lt;A href="http://technorati.com/tag/WebServices" rel=tag mce_href="http://technorati.com/tag/WebServices"&gt;Web Services&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1052916" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>BizTalk 2004 SP2, New BizTalk 2006 Books</title><link>http://blogs.msdn.com/richardbpi/archive/2006/10/26/biztalk-2004-sp2-new-biztalk-2006-books.aspx</link><pubDate>Fri, 27 Oct 2006 03:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:877636</guid><dc:creator>rseroter</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/877636.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=877636</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;So we've got &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=d20b4510-e5a6-4d7b-87a1-4bd52bdd57b8&amp;amp;displaylang=en"&gt;BizTalk 2004 SP2&lt;/A&gt; finally out today (hat tip: &lt;A href="http://www.timrayburn.net/2006/10/26/BizTalk+Server+2004+Service+Pack+2.aspx" mce_href="http://www.timrayburn.net/2006/10/26/BizTalk+Server+2004+Service+Pack+2.aspx"&gt;Tim Rayburn&lt;/A&gt;) and you can see what's included in this must-install pack here ... &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;924330&amp;amp;sd=rss&amp;amp;spid=1444" mce_href="http://support.microsoft.com/default.aspx?scid=kb;en-us;924330&amp;amp;sd=rss&amp;amp;spid=1444"&gt;List of bugs that are fixed in BizTalk Server 2004 Service Pack 2&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Also, I recently picked up both &lt;A href="http://www.amazon.com/BizTalk-2006-Recipes-Problem-Solution-Approach/dp/1590597117/sr=8-1/qid=1161907476/ref=pd_bbs_sr_1/104-5906669-1004760?ie=UTF8&amp;amp;s=books" mce_href="http://www.amazon.com/BizTalk-2006-Recipes-Problem-Solution-Approach/dp/1590597117/sr=8-1/qid=1161907476/ref=pd_bbs_sr_1/104-5906669-1004760?ie=UTF8&amp;amp;s=books"&gt;BizTalk 2006 Recipes&lt;/A&gt; as well as &lt;A href="http://www.amazon.com/Pro-BizTalk-2006-George-Dunphy/dp/1590596994/sr=8-2/qid=1161907081/ref=pd_bbs_sr_2/104-5906669-1004760?ie=UTF8&amp;amp;s=books" mce_href="http://www.amazon.com/Pro-BizTalk-2006-George-Dunphy/dp/1590596994/sr=8-2/qid=1161907081/ref=pd_bbs_sr_2/104-5906669-1004760?ie=UTF8&amp;amp;s=books"&gt;Pro BizTalk 2006&lt;/A&gt;. The &lt;B&gt;Recipes&lt;/B&gt; book is a solid intro into BizTalk, nicely explains concepts in a "problem ... solution" approach. The &lt;B&gt;Pro&lt;/B&gt; book was excellent and taught me a number of things I didn't know already. I wrote up a review on the Amazon.com page, so no need to rehash it here. So, go right now and harass your boss, spouse, neighbor, or robot master into buying you both of these for the holiday season. No, that's not a geeky request at all. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=877636" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Advanced BizTalk 2006 Web Services, Part II</title><link>http://blogs.msdn.com/richardbpi/archive/2006/10/23/advanced-biztalk-2006-web-services-part-ii.aspx</link><pubDate>Mon, 23 Oct 2006 20:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:863739</guid><dc:creator>rseroter</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/richardbpi/comments/863739.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardbpi/commentrss.aspx?PostID=863739</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: arial"&gt;
&lt;P&gt;In &lt;A href="http://blogs.msdn.com/richardbpi/archive/2006/10/23/advanced-biztalk-2006-web-services-part-i.aspx" mce_href="http://blogs.msdn.com/richardbpi/archive/2006/10/23/advanced-biztalk-2006-web-services-part-i.aspx"&gt;Part I&lt;/A&gt; of this two post series, I began a look at some advanced concepts around BizTalk-generated web services. In this post, we look at two additional concepts. &lt;/P&gt;
&lt;P&gt;In the &lt;A href="http://blogs.msdn.com/richardbpi/archive/2006/10/23/advanced-biztalk-2006-web-services-part-i.aspx" mce_href="http://blogs.msdn.com/richardbpi/archive/2006/10/23/advanced-biztalk-2006-web-services-part-i.aspx"&gt;last post&lt;/A&gt;, I demonstrated the following topics ... 
&lt;UL&gt;
&lt;LI&gt;Using the "bare" and "wrapped" settings during web service generation&lt;/LI&gt;
&lt;LI&gt;Creating multi-parameter web services via BizTalk&lt;/LI&gt;&lt;/UL&gt;In this post, I'll investigate the final two points ... 
&lt;UL&gt;
&lt;LI&gt;How the "one way" flag affects the web service&lt;/LI&gt;
&lt;LI&gt;Decoupling the BizTalk web service from a particular assembly&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;First of all, what does the &lt;B&gt;Force Request Response&lt;/B&gt; flag in the &lt;B&gt;Web Services Publishing Wizard&lt;/B&gt; actually do? The idea is that you can control whether you have a one-way or request-response service. It basically adds the &lt;B&gt;OneWay&lt;/B&gt; flag to the generated class. &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc5.jpg" mce_src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc5.jpg"&gt; &lt;/P&gt;
&lt;P&gt;When I took a one way service (built using the &lt;B&gt;Web Services Publishing Wizard&lt;/B&gt;) and then set the &lt;B&gt;Force Request Response&lt;/B&gt; to "true", I expected that my one way service would actually return a response. My SOAP request/response looked like this ... &lt;PRE&gt;&amp;lt;soap:Body&amp;gt;
    &amp;lt;PostNewOrder xmlns="http://tempuri.org/"&amp;gt;
      &amp;lt;InsertOrder xmlns="http://Microsoft.Demo.Blog.AdvancedServices.InsertOrder_XML"&amp;gt;
        &amp;lt;OrderID xmlns=""&amp;gt;string&amp;lt;/OrderID&amp;gt;
        &amp;lt;CustomerName xmlns=""&amp;gt;string&amp;lt;/CustomerName&amp;gt;
        &amp;lt;ItemID xmlns=""&amp;gt;string&amp;lt;/ItemID&amp;gt;
        &amp;lt;Quantity xmlns=""&amp;gt;string&amp;lt;/Quantity&amp;gt;
        &amp;lt;Status xmlns=""&amp;gt;string&amp;lt;/Status&amp;gt;
      &amp;lt;/InsertOrder&amp;gt;
    &amp;lt;/PostNewOrder&amp;gt;
  &amp;lt;/soap:Body&amp;gt;
&lt;/PRE&gt;and the *response* looked like this ... &lt;PRE&gt;&amp;lt;soap:Body&amp;gt;
    &amp;lt;PostNewOrderResponse xmlns="http://tempuri.org/" /&amp;gt;
&amp;lt;/soap:Body&amp;gt;
&lt;/PRE&gt;Interesting. So it threw a response node back at me. But what's very curious, is that when I call this method from code, I still get a &lt;B&gt;void&lt;/B&gt; return and my input parameter does not get submitted "by reference" (which would indicate that the output is the same type as the input). Next I wondered if even though no response was returned, the HTTP 200 code would only return after the service had finished processing. But no, that wasn't the case (and wouldn't really make sense anyway). So, at this point, I can't say for sure that this makes ANY difference. 
&lt;P&gt;The next "one way" operation I tried was on an orchestration that had a request/response receive port. My thinking was that maybe this flag would make the service ignore the response. That is, it would open up a one-way SOAP channel into the orchestration, but, wouldn't wait for a response. I hypothesized that this response message might get suspended, or something like that. So, I built a service using the &lt;B&gt;Web Services Publishing Wizard&lt;/B&gt;, flipped the &lt;B&gt;Force Request Response&lt;/B&gt; to "no" and took a look at the output. And ... it's the exact same whether I flip that flag to "yes" or "no." Because the service is built with a return value, apparently you can't set the "oneway" flag to true. I tried changing that attribute in the generated service, and then my service wouldn't come up. Once again, I have no idea how this flag is supposed to be applied. &lt;B&gt;Thoughts?&lt;/B&gt; &lt;/P&gt;
&lt;P&gt;Now, let's switch to something that DOES work. If you're following best practices, you're probably putting your external-facing schemas in one project, and your internal schemas in another. Reason being, if your vendor changes something, and you've been smart enough to do all your transformations at the port level, you can isolate how many assemblies you have to change. So let's say you have a schema in this "external schemas assembly" that you've exposed using the &lt;B&gt;Web Services Publishing Wizard&lt;/B&gt; by "generating web service from schemas." Now let's also say that ANOTHER schema in that assembly has changed, and you go ahead and redeploy a new version of that assembly and blow away the old one. &lt;B style="COLOR: red"&gt;Now your web service will cause your messages to be suspended&lt;/B&gt;. &lt;/P&gt;
&lt;P&gt;When you use the generated web services, the &lt;B&gt;DocumentSpecName&lt;/B&gt; is set on the inbound message by the web service. You can see this value in the message context here ...&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc6.jpg" mce_src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc6.jpg"&gt; &lt;BR&gt;&lt;BR&gt;Problem is, this value is used to look up the message type, and since the &lt;B&gt;DocumentSpecName&lt;/B&gt; contains the full assembly reference, your message will get suspended if it can't find the specific version.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc7.jpg" mce_src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc7.jpg"&gt; &lt;/P&gt;
&lt;P&gt;So how do you avoid this? What I've done is went into the generated web service, and changed the following value in my web method ...&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-FAMILY: Courier"&gt;//set to *null* and comment out old value&lt;BR&gt;&lt;B&gt;string bodyTypeAssemblyQualifiedName = null; &lt;/B&gt;&lt;BR&gt;// "Microsoft.Demo.Blog.AdvancedServices.VTest.NewContact_XML, Microsoft.Demo.Blog.Ad" +&lt;BR&gt;//"vancedServices.VTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=94858e0d889683c1"; &lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;Now, when messages come into BizTalk, the &lt;B&gt;DocumentSpecName&lt;/B&gt; doesn't get set and BizTalk does a lookup on the namespace#root to find the appropriate schema and assembly.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc8.jpg" mce_src="http://www.seroter.com/BlogPics/10.23.2006advancedsvc8.jpg"&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Conclusion&lt;/B&gt;&lt;BR&gt;So what have we seen? First, the &lt;B&gt;Force Request Response&lt;/B&gt; flag has no obvious use to me. Doesn't seen to make a difference on existing one way services, and it can't be applied on request/response services. If I've missed something, please tell me. Also, we've seen how you can modify your generated web service to insulate you against assembly version changes. Always be careful changing generated code, and clearly you want to regenerate your service if the corresponding message schemas has changed, but, this eliminates your need to regenerate the service when unrelated schemas change in the assembly. Fun stuff. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10px"&gt;Technorati Tags: &lt;A href="http://technorati.com/tag/BizTalk" rel=tag mce_href="http://technorati.com/tag/BizTalk"&gt;BizTalk&lt;/A&gt;, &lt;A href="http://technorati.com/tag/webservices" rel=tag mce_href="http://technorati.com/tag/webservices"&gt;Web Services&lt;/A&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=863739" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardbpi/archive/tags/BizTalk/default.aspx">BizTalk</category></item></channel></rss>