<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Microsoft Biztalk Server</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mdoctor/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mdoctor/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:51:08 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Service Bus, Workflow, BizTalk Server, and Windows Azure BizTalk Services</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/service-bus-workflow-biztalk-server-and-windows-azure-biztalk-services</link>
      <pubDate>Thu, 06 Jun 2013 08:49:36 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2013/06/06/service-bus-workflow-biztalk-server-and-windows-azure-biztalk-services/</guid>
      <description><![CDATA[I see questions from various customers and partners – Microsoft has so many technologies for doing...]]></description>
      <content:encoded><![CDATA[<p align="justify">I see questions from various customers and partners – Microsoft has so many technologies for doing “Integration”, when do I choose what? In this post, I will put forth my views on firstly, why there are so many technologies, and then based on that, it should become clearer when you should use what.</p>  <p align="justify">Let me first start with BizTalk Server. The diagram below tries to show BizTalk Server in terms of its components / capabilities. Not everything is shown here – just what is relevant to this post.</p>  <p align="justify">This is how BizTalk Server has been since 2004. The capabilities / components have been enhanced, but the overall architecture has remained the same.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/5633.clip_image001_5D04464E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/5633.clip_5F00_image001_5F00_5D04464E.png"><img title="clip_image001" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/5460.clip_image001_thumb_11386F95.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/5460.clip_5F00_image001_5F00_thumb_5F00_11386F95.png" width="630" height="322" /></a></p>  <p>&#160;</p>  <p>&#160;</p>  <p><font color="#ff6600"></font></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/3426.clip_image002_21473E4C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/3426.clip_5F00_image002_5F00_21473E4C.png"><font color="#ff6600"></font><img title="clip_image002" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/3343.clip_image002_thumb_4A51DD48.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/3343.clip_5F00_image002_5F00_thumb_5F00_4A51DD48.png" width="631" height="328" /></a></p>  <p align="justify">Since then, there have been changes in other parts of the Microsoft ecosystem.</p>  <p align="justify">The first change was introduced with .NET 3.0. That was – the introduction of WCF. WCF was the new communication framework – if you need to implement a component to abstract your transport protocol, then WCF was the way to do it. BizTalk Server had its own Adapter Framework for developing Adapters, and the obvious limitation was that they could work only with BizTalk. WCF allowed you to write “Adapters” that could run in any .NET application. With BizTalk 2006 R2, we tried to bridge the difference between the frameworks, with the introduction of the WCF Adapter in BizTalk 2006 R2, and the WCF LOB Adapter SDK to make it simpler to write transports for LOBs using WCF.</p>  <p align="justify">The next change – Workflow – was also introduced with .NET 3.0, and was then revamped in .NET 4.0. Recently (post .NET 4.5) we shipped the Workflow Manager, which is a host for running Workflows (though the workflows that run here have some differences with respect to what they can do compared to if you use the execution options that ship with .NET (i.e., WorkflowInvoker, WorkflowApplication, and WorkflowServiceHost). BizTalk Server had its own framework for designing workflows for modeling the message flow across endpoints – orchestrations. But again, the biggest limitation is that this was tightly coupled with BizTalk (and can also be said that the other big limitation is that it hasn’t evolved much since its original incarnation). While, .NET Workflows can be used in any .NET application, and they’ve been evolving with every .NET release.</p>  <p align="justify">The next change was introduced somewhere around … I think the 2007 timeframe. You may remember it first being known as BizTalk .NET Services. This was essentially the Relay capability which is there in Service Bus today. Soon after was introduced the concept of a MessageBuffer, which was some sort of a “queue in the cloud”. All this ultimately evolved to what we know today as Service Bus, which comprises of Relay, Queues and Topics. A Message Bus. BizTalk Server had its own version of a pub-sub system – the MessageBox – but not only was this tightly coupled with BizTalk (just like Adapters and Orchestrations), but this wasn’t even something which developers/customers could directly use – you only worked with it indirectly when working with Send Ports (filters), Messaging (promoted properties), Orchestrations (filters). You knew it was there, but it wasn’t meant to be used directly from your code. </p>  <p align="justify">So, let’s see how the components listed above fit in.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/5100.clip_image003_456F298C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/5100.clip_5F00_image003_5F00_456F298C.png"><img title="clip_image003" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/7103.clip_image003_thumb_4BB6001A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/7103.clip_5F00_image003_5F00_thumb_5F00_4BB6001A.png" width="649" height="335" /></a></p>  <p>&#160;</p>  <p align="justify">Let’s now take a look at Windows Azure BizTalk Services. Here, we’re attempting to bring Integration to the cloud, a small set of components / features / capabilities at a time. We’ve release version 1.0 just recently (we announced the public preview just a few days ago), and hope to announce GA soon.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/4478.clip_image004_74C09F16.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/4478.clip_5F00_image004_5F00_74C09F16.png"><img title="clip_image004" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/0601.clip_image004_thumb_04CF6DCE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/0601.clip_5F00_image004_5F00_thumb_5F00_04CF6DCE.png" width="659" height="348" /></a></p>  <p>&#160;</p>  <p align="justify">The above picture captures the components unique to BizTalk Services. One thing you’ll notice is that the position of the box that represented the “Message Bus” has changed. The reason for this is – Bridges in Windows Azure BizTalk Services aren’t built on top of a “Message Bus”. BizTalk Services can of course interact with the other components in Azure – so, we can interact with the “Message Bus” component in Azure, which is – Service Bus. Keeping with the current component pictures, we now arrive at this:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/3264.clip_image005_46D5DD0F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/3264.clip_5F00_image005_5F00_46D5DD0F.png"><img title="clip_image005" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/8446.clip_image005_thumb_68C13F93.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/8446.clip_5F00_image005_5F00_thumb_5F00_68C13F93.png" width="674" height="347" /></a></p>  <p align="justify">Over the course of the above pictures, it should now be clear how each of the technologies mentioned here is meant to be used. Depending on the capabilities that you need, the appropriate technology/product can be picked.</p>  <p align="justify">&#160;</p>  <p align="justify">It’s also easy to hypothesize how BizTalk Services will evolve:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/0535.clip_image006_156C8A1E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/0535.clip_5F00_image006_5F00_156C8A1E.png"><img title="clip_image006" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/48/85/metablogapi/7318.clip_image006_thumb_05604C18.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-48-85-metablogapi/7318.clip_5F00_image006_5F00_thumb_5F00_05604C18.png" width="684" height="349" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Improved performance for ordered send ports in BizTalk 2010 R2</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/improved-performance-for-ordered-send-ports-in-biztalk-2010-r2</link>
      <pubDate>Thu, 30 Aug 2012 10:01:14 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2012/08/30/improved-performance-for-ordered-send-ports-in-biztalk-2010-r2/</guid>
      <description><![CDATA[BizTalk 2010 R2 CTP has been released - you can read more about it here. One of the features...]]></description>
      <content:encoded><![CDATA[<p>BizTalk 2010 R2 CTP has been released - you can read more about it <a title="https://blogs.msdn.com/b/biztalk_server_team_blog/archive/2012/08/29/announcing-microsoft-biztalk-server-2010-r2-ctp-release.aspx" href="https://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/here" target="_blank">here</a>. One of the features mentioned is -&nbsp;<span style="text-decoration: underline;"><em>We have also made enhancements in our engine to improve the performance in ordered send port scenarios</em></span>. Here, I'll briefly describe the enhancement we've made.</p>
<p>Assume you have 5 ordered send ports (SP1 through SP5) running in a host H1, and you have messages for each of these send ports available to be dequeued. In prior versions of BizTalk, the behavior you may have observed is that if there is a message M1 available for SP1, and another for SP2, then SP2 begins processing M2 only after SP1 has completed processing M1. The workaround we would propose to customers was to place these 5 send ports into 5 different hosts. This was feasible only if the number of ordered send ports was small.</p>
<p>In BizTalk 2010 R2, we've fixed this problem. No matter how many ordered send ports you have in a host, each will process its messages without blocking other ordered (or non-ordered) send ports. We use a separate thread for each ordered send port, and if you have (say) 500 ordered send ports in a single host, then you'll need to increase the <em>Messaging Engine Threads</em> setting so that we can spin up the necessary number of threads for you.</p>]]></content:encoded>
    </item>
    <item>
      <title>The new WCF-WebHttp Adapter in Microsoft BizTalk Server 2010 R2</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/the-new-wcf-webhttp-adapter-in-microsoft-biztalk-server-2010-r2</link>
      <pubDate>Mon, 20 Aug 2012 06:51:05 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2012/08/20/the-new-wcf-webhttp-adapter-in-microsoft-biztalk-server-2010-r2/</guid>
      <description><![CDATA[One of the new adapters we've added in Microsoft BizTalk Server 2010 R2 is the WCF-WebHttp Adapter....]]></description>
      <content:encoded><![CDATA[<p>One of the new adapters we've added in Microsoft BizTalk Server 2010 R2 is the WCF-WebHttp Adapter. This adapter is designed to make it easy for users to consume REST services as well as expose REST endpoints using BizTalk. The Adapter allows you to easily define URI parameters and map them to BizTalk Context Properties, accept multiple HTTP Verbs (Methods), specify (and inspect) HTTP Headers as well as the HTTP Status Code and Status Description. The adapter aims to provide the framework-ish pieces into which you can hook in your extensibility pieces (BizTalk Pipeline Components, or WCF Behaviors) that make it easy to interact with various REST services you may have.</p>
<p>Please let us know if you have any suggestions / feature requests for adding more platform-level features in the adapter. When adding your comments, if you leave behind a way to contact you, we can get in touch with you when we begin to explore and think about your suggestion.</p>
<p>Thanks.</p>]]></content:encoded>
    </item>
    <item>
      <title>Invoking one-way operations with the WCF Adapters</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/invoking-one-way-operations-with-the-wcf-adapters</link>
      <pubDate>Wed, 18 Jul 2012 23:46:39 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2012/07/18/invoking-one-way-operations-with-the-wcf-adapters/</guid>
      <description><![CDATA[I had documented a workaround at...]]></description>
      <content:encoded><![CDATA[<p>I had documented a workaround at <a href="https://blogs.msdn.com/b/mdoctor/archive/2009/09/08/using-one-way-operations-with-the-wcf-adapter-in-biztalk.aspx">https://blogs.msdn.com/b/mdoctor/archive/2009/09/08/using-one-way-operations-with-the-wcf-adapter-in-biztalk.aspx</a>&nbsp;a while ago.</p>
<p>This post is to inform you all that the workaround has been incorporated into the WCF Adapter product code. Henceforth, it will be possible to set up a 1-way Send Port which uses a binding such as BasicHttp (or the WCF-BasicHttp adapter) and invoke a 1-way operation on an external service. This feature will be present in the next version of BizTalk scheduled for release in the first half of 2013 (a CTP of which will be available within the next few weeks).</p>]]></content:encoded>
    </item>
    <item>
      <title>Workflow with one-way contract (only Receive), NamedPipe transport with TransferMode = Buffered – observed behavior</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/workflow-with-one-way-contract-only-receive-namedpipe-transport-with-transfermode-buffered-observed-behavior</link>
      <pubDate>Tue, 29 Mar 2011 07:45:31 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2011/03/29/workflow-with-one-way-contract-only-receive-namedpipe-transport-with-transfermode-buffered-observed-behavior/</guid>
      <description><![CDATA[I came across this behavior a few days back while investigating a bug.   &#160;  Here’s what I had:...]]></description>
      <content:encoded><![CDATA[<p>I came across this behavior a few days back while investigating a bug. </p>  <p>&#160;</p>  <p><strong><u>Here’s what I had:</u></strong></p>  <p><strong>Workflow:</strong></p>  <p>1. Has a number of activities executing in sequence. None of the activities are of type AsyncCodeActivity, and none of the activities create Bookmarks.</p>  <p>2. The Workflow starts off with a Receive, and has no SendReply.</p>  <p>3. Workflow hosted in a Workflow Service Host.</p>  <p><strong>Endpoint:</strong></p>  <p>1. The binding used was a custom binding, using the NamedPipesTransportBindingElement. The TransferMode property was set to Buffered.</p>  <p><strong>Client:</strong></p>  <p>1. Client creates an IDuplexSessionChannel.</p>  <p>2. Client invokes channel.Open().</p>  <p>3. Client invokes channel.Send(Message).</p>  <p>4. Client invokes channel.Close().</p>  <p>&#160;</p>  <p><strong><u>Expected Behavior:</u></strong></p>  <p><strong>Client:</strong></p>  <p>1. Channel.Close() should return immediately (since when channel.Send() has returned, it should imply that the message was dispatched to the service).</p>  <p>&#160;</p>  <p><strong><u>Observed Behavior:</u></strong></p>  <p><strong>Client:</strong></p>  <p>1. Channel.Close() gets blocked until the Workflow completes.</p>  <p>&#160;</p>  <p><strong><u>Interpretation:</u></strong></p>  <p>Since a session is used, when the client invokes channel.Close(), the session needs to be closed. This involves a call being made to the WCF Service (the workflow in this case), and the Service needs to somehow “respond”. Since the workflow was busy executing synchronous activities, it wasn’t able to respond, and thus Close() got blocked until the Workflow Runtime became “available”.</p>  <p>&#160;</p>  <p><strong><u>Workarounds (each of these is individually a workaround):</u></strong></p>  <p><strong>Workflow:</strong></p>  <p>1. Add a Delay activity with Timespan of at least 1 millisecond. This causes a bookmark to get created, and the workflow runtime is free to do something else until the bookmark resumes. (Of course, the assumption here is that the client’s channel.Close() call reaches the workflow service before the bookmark got resumed).</p>  <p>2. Change one of the activities (preferably the one just after the Receive) to be an AsyncCodeActivity (assuming it does not complete synchronously). Again, this frees up the workflow runtime.</p>  <p><strong>Endpoint:</strong></p>  <p>1. Use a Binding which does not require sessions (e.g. one of the Http Bindings).</p>  <p>2. Change the TransferMode setting to Streamed on NamedPipesTransportBindingElement. You can now use an IRequestChannel instead of IDuplexSessionChannel. Since your workflow doesn’t have a SendReply, the response Message returned when you invoke channel.Request(Message) will be null.</p>  <p><strong>Client:</strong></p>  <p>1. Use Channel.BeginClose() instead of Channel.Close(). This way, your main thread doesn’t get blocked.</p>]]></content:encoded>
    </item>
    <item>
      <title>Scale-Out Dynamic Send Ports</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/scale-out-dynamic-send-ports</link>
      <pubDate>Sun, 14 Nov 2010 06:34:00 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2010/11/14/scale-out-dynamic-send-ports/</guid>
      <description><![CDATA[NOTE: BizTalk 2013 now supports assigning Dynamic Send Ports to non-default hosts! Thus, the hacky...]]></description>
      <content:encoded><![CDATA[<p align="justify"><strong>NOTE: BizTalk 2013 now supports assigning Dynamic Send Ports to non-default hosts! Thus, the hacky workaround&nbsp;in this blog is no longer required for BizTalk 2013.</strong></p>
<p align="justify">&nbsp;</p>
<p align="justify">Before your read further &ndash; please note that the technique mentioned here for scaling out dynamic send ports is UNSUPPORTED by the Product Team. I&rsquo;ve gotten this to work based on my understanding of the BizTalk Management Database and Message Box Database &ndash; however, my understanding could be wrong leading to issues in your scenario. Before executing these steps in a Production Environment, you should make sure that you have thoroughly tested this out in your test environment.</p>
<p align="justify">As far as Dynamic Send Ports are concerned, BizTalk has one big limitation &ndash; all the Dynamic Ports configured only execute on the Default Hosts for each Adapter. That is, if you have 15 Dynamic Send Ports, and on each Port you send messages for, say, the SQL, FILE and FTP Adapters, then all messages targeted for the FILE Adapter run on the same Host (whichever the default Send Handler is for the FILE Adapter), all the messages targeted for the SQL Adapter run on whichever host is the default Send Handler for SQL, and similarly for the FTP and all other Adapters. For Scale-Out, what you really want is to be able to say &ndash; for Dynamic Send Port 1 for the SQL Adapter, use Host 1, while for Dynamic Send Port 2 for the SQL Adapter, use Host 2.</p>
<p align="justify">I&rsquo;ve written a small utility (.cs as well as .exe included in the .zip file) that allows you to do this. Here&rsquo;s how you use the tool:</p>
<ol>
<li>
<div align="justify">Create your Dynamic Send Port. Enlist it, but do not start it (let it remain in the Stopped State)</div>
</li>
<li>
<div align="justify">Run the tool, specify the name of the Port, the Adapter Type, and the new Host which you want to use.</div>
</li>
<li>
<div align="justify">Start your Dynamic Send Port.</div>
</li>
</ol>
<p align="justify">For Dynamic Send Ports which already exist on your system:</p>
<ol>
<li>
<div align="justify">Ensure that there are no active/queued/suspended/etc messages for this Port &ndash; in short, this Port should not be currently in use.</div>
</li>
<li>
<div align="justify">Stop the port (let it remain in the stopped state) &ndash; do not un-enlist it.</div>
</li>
<li>
<div align="justify">Run the tool.</div>
</li>
<li>
<div align="justify">Start the Port.</div>
</li>
</ol>
<p align="justify">The tool accomplishes its objective by modifying the Subscription set up for the Dynamic Send Port, to point to the specified Host instead of the Default Host for that Adapter.</p>
<p align="justify">NOTE &ndash; If you ever delete a Handler / Host which was associated with a Dynamic Send Port using the utility above, then you will need to re-run the utility to specify a new Handler / Host for the specific Adapter for this Port. To help you with this, I&rsquo;ve also written another tool which will inspect all the Dynamic Send Ports, and let you know if any port has been associated with an incorrect Host for a specific Adapter Type (incorrect meaning either the Host no longer exists, or there is no handler configured for that Adapter + Host combination).</p>
<p align="justify">You can download the utility <a href="https://biztalkserverteam.codeplex.com/releases/view/55655"><span style="text-decoration: underline;">here</span></a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>“Route Failed Messages” routes the wrong message – really?</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/route-failed-messages-routes-the-wrong-message-really</link>
      <pubDate>Tue, 23 Feb 2010 09:19:00 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2010/02/23/route-failed-messages-routes-the-wrong-message-really/</guid>
      <description><![CDATA[Consider the following scenario:


You have an adapter on a Receive Location, which submits a...]]></description>
      <content:encoded><![CDATA[<P align=justify>Consider the following scenario:</P>
<OL>
<LI>
<DIV align=justify>You have an adapter on a Receive Location, which submits a message in Format A into BizTalk.</DIV></LI>
<LI>
<DIV align=justify>The Pipeline configured on this Receive Location converts the message into Format B.</DIV></LI>
<LI>
<DIV align=justify>Assume that there is no map configured on the Receive Port.</DIV></LI>
<LI>
<DIV align=justify>You have the “Route Failed Messages” option enabled on the Receive Port.</DIV></LI>
<LI>
<DIV align=justify>You have set up an orchestration (or Send Port) which subscribes to the Error Reports (i.e., the failed messages which are routed due to the “Route Failed Messages” feature) generated by this Receive Port 1.</DIV></LI></OL>
<P align=justify>Problem: When a message is received on this Receive Location, and there are no subscribers for it, you expect that the message in Format B will be received by your error-handling orchestration (or Send Port). However, in some scenarios (depending on the pipeline, pipeline configuration, etc), you see that the message received by the error-handling orchestration (or Send Port) is in Format A. How come? </P>
<P align=justify>Here’s what is most probably happening:</P>
<OL>
<LI>
<DIV align=justify>Adapter submits a message in Format A.</DIV></LI>
<LI>
<DIV align=justify>The pipeline executes, and the message is converted to Format B.</DIV></LI>
<LI>
<DIV align=justify>The Messaging Engine attempts to publish the message, but finds that there are no subscribers for this message. It thus returns an error back to the Adapter.</DIV></LI>
<LI>
<DIV align=justify>The Adapter attempts to suspend the message. NOTE – here, it attempts to suspend the message which it knows about (which it received from the back-end) – this message is in Format A.</DIV></LI>
<LI>
<DIV align=justify>The Messaging Engine sees this:</DIV></LI>
<OL>
<LI>
<DIV align=justify>someone (the adapter in this case) is suspending a message (message in Format A, in this case)</DIV></LI>
<LI>
<DIV align=justify>“Route Failed Messages” is enabled on the port</DIV></LI></OL>
<LI>
<DIV align=justify>The Messaging Engine, instead of suspending, decides to “route” an Error Report corresponding to the message being suspended. This is the message in Format A, in this case.</DIV></LI>
<LI>
<DIV align=justify>Your error-handling orchestration (or send port) thus ended up receiving the message in Format A.</DIV></LI></OL>
<P align=justify>Question: What do you do if you want to have the message received by your error-handling orchestration (or send port) to be in Format B?</P>
<P align=justify>Answer: The output message from the pipeline must have the context property “<A href="https://msdn.microsoft.com/en-us/library/bts.suspendmessageonroutingfailure(BTS.10).aspx" target=_blank mce_href="https://msdn.microsoft.com/en-us/library/bts.suspendmessageonroutingfailure(BTS.10).aspx">SuspendMessageOnRoutingFailure</A>” present, with a value of true (boolean).</P>
<P align=justify>How does that work? Well, it changes the sequence above to be as follows:</P>
<OL>
<LI>
<DIV align=justify>Adapter submits a message in Format A.</DIV></LI>
<LI>
<DIV align=justify>The pipeline executes, and the message is converted to Format B.</DIV></LI>
<LI>
<DIV align=justify>The Messaging Engine attempts to publish the message, but finds that there are no subscribers for this message.</DIV></LI>
<LI>
<DIV align=justify>The Messaging Engine sees the “SuspendMessageOnRoutingFailure” message context property is set to true, and instead of returning an error back to the Adapter, attempts to suspend the message. NOTE that this message is in Format B.</DIV></LI>
<LI>
<DIV align=justify>At the same time, the Messaging Engine also sees this:</DIV></LI>
<OL>
<LI>
<DIV align=justify>someone (the Messaging Engine itself, in this case) is suspending a message (message in Format B)</DIV></LI>
<LI>
<DIV align=justify>“Route Failed Messages” is enabled on the port</DIV></LI></OL>
<LI>
<DIV align=justify>The Messaging Engine, instead of suspending, decides to “route” an Error Report corresponding to the message being suspended. This is the message in Format B.</DIV></LI>
<LI>
<DIV align=justify>Your error-handling orchestration (or send port) now receives the message in Format B.</DIV></LI></OL>
<P align=justify>The out-of-box XML Disassembler component, has an option named “Recoverable Interchange”. When this option is set to true, the XML Disassembler internally translates this to mean “SuspendMessageOnRoutingFailure”=true, and sets this context property to the message.</P>]]></content:encoded>
    </item>
    <item>
      <title>Performance Tip - when using WCF-Custom with Dynamic Send Ports and Custom Bindings on BizTalk Server 2009</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/performance-tip-when-using-wcf-custom-with-dynamic-send-ports-and-custom-bindings-on-biztalk-server-2009</link>
      <pubDate>Thu, 17 Dec 2009 21:49:00 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2009/12/17/performance-tip-when-using-wcf-custom-with-dynamic-send-ports-and-custom-bindings-on-biztalk-server-2009/</guid>
      <description><![CDATA[In BizTalk Server 2006 R2, when the WCF-Custom adapter was used with any binding, the WCF-Adapter...]]></description>
      <content:encoded><![CDATA[<P>In BizTalk Server 2006 R2, when the WCF-Custom adapter was used with any binding, the WCF-Adapter would try to determine, at runtime, whether a System.Transactions TransactionScope was required when sending a message over a channel. This involved the following:</P>
<UL>
<LI>If an out-of-box binding was used, then most of those bindings have a Transactions property. We would look at that to determine whether the property value was true or false.</LI>
<LI>If&nbsp;a custom binding was used (either WCF's CustomBinding, or your own binding), we would get the binding elements from the stack, and see if certain binding elements were present, which we know control transaction flow. Based on the configuration of those binding elements, we would determine whether a transaction was required or not.</LI>
<LI>If we couldn't figure out what to do, we would just play safe and use a TransactionScope.</LI></UL>
<P>NOTE that in the above three steps, step 2 is expensive for dynamic send ports, since for dynamic send ports, we would execute that step&nbsp;every time, and calling CreateBindingElements() multiple times can add up. </P>
<P>In BizTalk 2009, we went ahead and added two properties on the port - "EnableTransaction" and "IsolationLevel". If we find the EnableTransaction property set on the message, then we know whether to use a TransactionScope or not, and hence we don't need to execute those three steps above. However, if we don't find this message context property, then we fall back to the previous behavior.</P>
<P>Hence, for performance, when using dynamic send ports with the WCF-Custom adapter, when setting the context properties for BindingName and BindingType (amongst others), also set the EnableTransaction and IsolationLevel message context properties.</P>]]></content:encoded>
    </item>
    <item>
      <title>Using the WCF federation bindings with the WCF Adapter in Microsoft biztalk server</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/using-the-wcf-federation-bindings-with-the-wcf-adapter-in-microsoft-biztalk-server</link>
      <pubDate>Fri, 09 Oct 2009 02:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2009/10/09/using-the-wcf-federation-bindings-with-the-wcf-adapter-in-microsoft-biztalk-server/</guid>
      <description><![CDATA[Even though the WCF Federation bindings aren’t yet officially supported for use with the WCF...]]></description>
      <content:encoded><![CDATA[<P>Even though the WCF Federation bindings aren’t yet officially supported for use with the WCF Adapter, for most purposes, you can get your scenario to work (and in case your scenario does not work as expected, you should contact Microsoft Support so that we can investigate the issue - we of course might not fix it since we dont support this binding, but then again - we might fix the bug if we have available resources).</P>
<P>In this post, I’m going to port over a MSDN sample which uses the Ws2007FederationHttpBinding to BizTalk. You will need Microosft BizTalk Server 2009 R2&nbsp;in order to get things to work correctly.</P>
<P>Firstly, you need the WCF samples from MSDN. You can get them from <A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=ed9c315c-31ac-4ccb-b62b-721af1e2bfa8&amp;displaylang=en" target=_blank mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=ed9c315c-31ac-4ccb-b62b-721af1e2bfa8&amp;displaylang=en"><U>here</U></A>. The MSDN documentation for these is available <A href="https://msdn.microsoft.com/en-us/library/ms751514.aspx" target=_blank mce_href="https://msdn.microsoft.com/en-us/library/ms751514.aspx"><U>here</U></A>. <A href="https://msdn.microsoft.com/en-us/library/aa355045.aspx" target=_blank mce_href="https://msdn.microsoft.com/en-us/library/aa355045.aspx"><U>This</U></A> is the sample which we will be using. Make sure that everything is working fine in the sample, and that you’re able to use the client WinForms application to successfully browse the books list, and are able to buy the 2nd and 3rd books (if you attempt to buy the 1st book, you should get back an error message complaining about the price being too high).</P>
<P>We’ll now attempt to bring BizTalk in the picture. First, we’ll make BizTalk act as a client and send a request to the server for purchasing a book. Next, we’ll make BizTalk act as the server and then use the same WinForms client application (present in the MSDN sample) to connect to BizTalk and purchase a book. NOTE that I won’t act BizTalk act as a client and send a request to the server for browsing the books list; since that uses the WsHttpBinding, and it is pretty straightforward to get that part working once you work on the second part of making BizTalk act as a client and purchase a book.</P>
<P>NOTE – when going forward, the assumption is that you are familiar with the MSDN sample – the code, and how it functions.</P>
<P><STRONG><U>BizTalk as the Client – purchasing a book</U></STRONG></P>
<P>We need to do two things before we start with the BizTalk side of things.</P>
<P>1. Run “certmgr”. Find the certificate issued to "Root Agency" (under Intermediate Certification Authorities\Certificates). Right Click, choose Cut. Paste it under Trusted Root Certificatioin Authorities\Certificates. (You can always revert this later).</P>
<P>The reason we have to do this – when you set up the MSDN sample, three certificates are created for use with the sample. These certificates are issued by “Root Agency”, which is a dummy CA for testing purposes, and it is not trusted. The WCF Adapter in BizTalk only accepts certificates whose CA is trusted; hence without this step, you’d get an Invalid Certificate exception.</P>
<P>2. In the zip file, you’ll find an endpoint behavior. You need to register it in machine.config, and add the assembly to the GAC. For registration in machine.config, add the XML below to the &lt;system.serviceModel&gt;/&lt;extensions&gt;/&lt;behaviorExtensions&gt; node.</P>
<BLOCKQUOTE>
<P><EM><FONT color=#004080><STRONG>&lt;add name="federationSampleEndpointBehavior" type="FederationSample_EndpointBehavior.FS_EndpointBehavior_ExtensionElement, FederationSample_EndpointBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fe278db62e2dcf8b" /&gt;</STRONG></FONT></EM></P></BLOCKQUOTE>
<P>The reason we need this endpoint behavior: the way the WCF sample is written, the book which you want to buy – the name of that book must appear within the header of the message. The way the sample client does this is it sets the header on the endpoint – thus, all messages flowing out of that client endpoint will have the header applied to them. If you want to do this the same way in BizTalk, a custom endpoint behavior fits perfectly, allowing you to set the header on the endpoint which BTS will use.</P>
<P>NOTE – the code in the WCF sample client is as follows:</P>
<BLOCKQUOTE>
<P><EM><FONT color=#0000a0><STRONG>EndpointAddressBuilder myEndpointAddressBuilder = new EndpointAddressBuilder(myBuyBookClient.Endpoint.Address);</STRONG></FONT></EM></P>
<P><EM><FONT color=#0000a0><STRONG>myEndpointAddressBuilder.Headers.Add(AddressHeader.CreateAddressHeader(Constants.BookNameHeaderName, Constants.BookNameHeaderNamespace, bookName));</STRONG></FONT></EM></P>
<P><EM><FONT color=#0000a0><STRONG>myBuyBookClient.Endpoint.Address = myEndpointAddressBuilder.ToEndpointAddress();</STRONG></FONT></EM></P></BLOCKQUOTE>
<P>and the custom endpoint behavior does the same thing.</P>
<P><U>Creating the Send Port in BizTalk</U></P>
<UL>
<LI>Create an Application in BizTalk (from the BizTalk Server Administration console) named "FederationSampleApplication". </LI>
<LI>Create a 2-way Send Port named "BuyBook_SendPort", choose WCF-Custom as the adapter. Click "Configure" </LI>
<LI>In the Import/Export tab, choose Import, and browse to the app.config for the client WinForms application (for example, you would import the BookStoreClient.exe.config file from "C:\WCF_WF_Samples\WCF\Scenario\Federation\CS\BookStoreClient\bin" if you installed the MSDN samples to C:\WCF_WF_Samples). </LI>
<LI>In the dialog for choosing an endpoint, choose WSFederationHttpBinding_IBuyBook. </LI>
<LI>In the General tab, set the Action to <A href="https://tempuri.org/IBuyBook/BuyBook" mce_href="https://tempuri.org/IBuyBook/BuyBook">https://tempuri.org/IBuyBook/BuyBook</A>. </LI>
<LI>In the Behavior tab, right click on BuyBookClientBehavior, and choose Add Extension. Add the federationSampleEndpointBehavior. Set the BookName property to "Book Title Two". (We’ll attempt to purchase this book). </LI>
<LI>The port is now configured. </LI>
<LI>Create a 1-way Receive Port named "FileIn", add a 1-way FILE Receive Location. Assume that the input folder is C:\IN. </LI>
<LI>Create a 1-way Send Port named "FileOut" with the FILE Adapter. Assume that the output folder is C:\OUT. </LI>
<LI>Setup a filter at the BuyBook_SendPort send port, with the condition being BTS.ReceivePortName == FileIn </LI>
<LI>Setup a filter at the FileOut send port, with the condition being BTS.SPName == BuyBook_SendPort </LI>
<LI>Start BizTalk and start/enlist/enable the artifacts. Drop the file BuyBook_Input.xml (this is present in the zip file) in the folder pointed to by FileIn; you should see the output in the folder pointed to by FileOut </LI></UL>
<P>One thing you must have noticed is that all messages sent out via the Send Port can only purchase a single book. In the MSDN sample, you were able to specify which book you wanted; and it worked there because for every request you made, you were recreating the client endpoint, and so setting the header on the endpoint worked. In BizTalk on the other hand, we don’t re-create the client endpoint for every call. </P>
<P>So, how do you work around it? Here’s one way – create your own schema containing three values: the emailAddress, the shipToAddress, and the bookName. Drop in an input message conforming to this schema. Use a map within an orchestration to transform it to another message containing only the emailAddress and the shipToAddress – since the sample service only expects these two to be present in the message body. Then, you can use an expression shape in the orchestration to set the value of the <A href="https://msdn.microsoft.com/en-us/library/bb246026.aspx" target=_blank mce_href="https://msdn.microsoft.com/en-us/library/bb246026.aspx"><U>WCF.OutboundCustomHeaders</U></A> context property to any custom header which you want to set – the bookName in this case. And of course, if you did this, you wouldn’t require the custom endpoint behavior anymore which we added earlier to the Send Port.</P>
<P><STRONG><U>BizTalk as the Service</U></STRONG></P>
<P>You must have seen that the sample consists of 3 services – the BookStore Service (which hosts the Browse and Buy endpoints), the BookStore STS, and the HomeRealm STS. I’m only going to host the Buy endpoint of the BookStore service in BizTalk, the Browse endpoint as well as the token services will yet continue to be hosted in IIS. Once you go through the rest of this port, it should be easy to figure out how the remaining endpoints / services can be “migrated” to BizTalk.</P>
<P>The .zip file contains a class library which houses two things – the code for the authorization manager, and a service behavior. The authorization manager code is more or less identical to what was there in the MSDN sample. But here’s why we also need another behavior: if you look at the BuyBook implementation in the sample, the code attempts to extract a specific claim from the incoming message and then use that for further processing. In BizTalk, if you want to access the WCF Message directly, you’d have to use a MessageInspector; and so we’re inserting a MessageInspector into the WCF Dispatch Runtime via a service behavior. You’ll need to register this service behavior extension in machine.config, have a look at the comment in the “FederationSample_ServiceBehavior.cs” file - this contains the machine.config entry. Compile and GAC this dll.</P>
<P>Create a 2-way Receive Port + Receive Location in BTS. In the Receive Location, import the web.config from the BookStoreService IIS virtual directory (C:\Inetpub\wwwroot\FederationSample\BookStoreService in my case). Select the Buy endpoint as the endpoint to import. Then, in the behaviors tab, you need to make the following changes:</P>
<UL>
<LI>Change the authorization manager type to “FederationSampleServiceHelper.BuyAuthorizationManager, FederationSampleServiceHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fe278db62e2dcf8b”. (this is from our dll which we GACed above). </LI>
<LI>Set ServiceCredentials -&gt; IssuedTokenAuthentication -&gt; CertificateValidation to PeerOrChainTrust (in the MSDN sample, this is being done in code in the BookStoreServiceHost constructor) </LI>
<LI>Add the federationSampleServiceBehavior extension (so that our MessageInspector gets injected at runtime). </LI></UL>
<P>In the General tab, you also need to set a valid URI (by default, it gets set to “buy” which was the relative address used in the endpoint configuration when hosting in IIS).</P>
<P>Also, build the orchestration and deploy it. In the MSDN sample, three things were used from the incoming message to construct the response: the BookName header (present in the WCF headers), the name of the caller (present as a claim), and the email address (present in the WCF Message body). In my orchestration, I’m using a construct message shape to extract the first two (the last one is pretty straightforward – we just need to use XmlDocument to read the message body and then use an XPATH to get the email address out). The headers present in an incoming WCF Message are present in the InboundHeaders context property (the WCF Adapter sets this), and so the BookName header is readily obtained. Also, our message inspector code (when it ran during the message receive) did this – searched the claims in the message for the caller’s name (using the same code as there in the MSDN sample in the contract implementation) and put that claim in the message header; and so we are now able to extract this also from the InboundHeaders context property. The code in the expression box looks like:</P>
<BLOCKQUOTE>
<P><I><FONT color=#004080><STRONG>inboundHeaders = Message_1(WCF.InboundHeaders);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>xmlDom = new System.Xml.XmlDocument();</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>xmlDom.LoadXml(inboundHeaders);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG></STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>nsmgr = new System.Xml.XmlNamespaceManager(xmlDom.NameTable);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>nsmgr.AddNamespace("ab", "</STRONG></FONT><A href="https://tempuri.org/" mce_href="https://tempuri.org/"><FONT color=#004080><STRONG>https://tempuri.org/</STRONG></FONT></A><FONT color=#004080><STRONG>");</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG></STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>n = xmlDom.SelectSingleNode("/headers/ab:CallerName", nsmgr);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>callerName = n.InnerXml;</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG></STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>n = xmlDom.SelectSingleNode("/headers/ab:BookName", nsmgr);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>bookName = n.InnerXml;</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG></STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>str = System.String.Format("Hello {0}, we will ship {1} to you.", callerName, bookName);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>str = "&lt;BuyBookResponse xmlns='https://tempuri.org/'&gt;&lt;BuyBookResult&gt;" + str + "&lt;/BuyBookResult&gt;&lt;/BuyBookResponse&gt;";</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>xmlDom = new System.Xml.XmlDocument();</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>xmlDom.LoadXml(str);</STRONG></FONT></I></P>
<P><I><FONT color=#004080><STRONG>Message_2 = xmlDom;</STRONG></FONT></I></P></BLOCKQUOTE>
<P><I></I></P>
<P>The last portion above is constructing the response message which the client will see. I’ve intentionally made the text different from what the MSDN sample returned so that when we test it, we can be sure that the response is coming from BTS.</P>
<P>To test it out, use the BookStoreClient in the MSDN sample. You just need to change the endpoint address for the “WSFederationHttpBinding_IBuyBook” endpoint to the address specified when configuring the RL.</P>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/82/99/76/FederationSampleWithBizTalk.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-09-82-99-76/FederationSampleWithBizTalk.zip">FederationSampleWithBizTalk.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Planning for the next release of BizTalk – What new WCF Adapter features do you want?</title>
      <link>https://docs.microsoft.com/archive/blogs/mdoctor/planning-for-the-next-release-of-biztalk-what-new-wcf-adapter-features-do-you-want</link>
      <pubDate>Thu, 10 Sep 2009 13:46:37 GMT</pubDate>
      <dc:creator><![CDATA[Mustansir - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mdoctor/2009/09/10/planning-for-the-next-release-of-biztalk-what-new-wcf-adapter-features-do-you-want/</guid>
      <description><![CDATA[We will kick off planning for the next release of BizTalk in a few weeks. I’m interested to hear...]]></description>
      <content:encoded><![CDATA[<p>We will kick off planning for the next release of BizTalk in a few weeks. I’m interested to hear what features / changes in the WCF Adapter you think would be beneficial to your scenarios. Please add your comments to this post describing your scenarios and your requests.</p>  <p>Thanks.</p>]]></content:encoded>
    </item>
  </channel>
</rss>