<?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>BizTalk lessons from the field</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/nabeelp/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/nabeelp/feed.xml</link>
    <description>Hints, tips and best practices on the use of BizTalk in the real world</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:20:49 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Purging archived BAM data</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/purging-archived-bam-data</link>
      <pubDate>Tue, 22 Oct 2013 04:12:00 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2013/10/22/purging-archived-bam-data/</guid>
      <description><![CDATA[BAM is one of the most underutilised features of BizTalk, but when it is used it can provide very...]]></description>
      <content:encoded><![CDATA[<p>BAM is one of the most underutilised features of BizTalk, but when it is used it can provide very valuable insights into the messages and the processes that BizTalk manages.&nbsp; Left unchecked, however, BAM can quickly consume disk space as it accumulates data.&nbsp; Although the build-up of data will not necessarily impact on BizTalk's performance, it can cause disk space issues if not maintained.&nbsp; There are two ways to deal with this: purge BAM data without archiving it, and to move data into an archive store.&nbsp; While the first is handled by SQL, the second method lacks a process to ensure that archived data is purged after an archive window period.</p>
<h3>Purge without Archiving</h3>
<p>One option for managing the growth in data is to store the BAM data for a certain period of time, after which it should be purged.&nbsp; This is achieved by defining a time period for which an activity's BAM data should be kept, and by instructing BAM to not backup the data after the time period expires.</p>
<ul>
<li>To define the time period for keeping the data, you would set the TimeLength and TimeUnit attributes on a BAM activity, using the set-activitywindow command.&nbsp; The command <span style="font-family: courier new,courier;">bm.exe set-activitywindow -Activity:PurchaseOrder -TimeLength:1 -TimeUnit:Month </span>would ensure that BAM data for the PurchaseOrder Activity is kept for one month before being archived or purged.</li>
<li>By doing the above and the using the set-archive command to instruct BAM not to archive the data (<span style="font-family: courier new,courier;">bm.exe set-archive -Activity:PurchaseOrder -ShouldArchive:False</span>) the BAM infrastructure will ensure that any data older than the provided time window will be purged.</li>
</ul>
<p>(Reference of BAM Activity management commands: <a href="https://msdn.microsoft.com/en-us/library/bb246031.aspx">https://msdn.microsoft.com/en-us/library/bb246031.aspx)</a></p>
<h3>Archiving without Purge</h3>
<p>The second option is to maintain the time window, as with the first option, and to enable archiving (<span style="font-family: courier new,courier;">bm.exe set-archive -Activity:PurchaseOrder -ShouldArchive:True</span>).&nbsp; This will instruct the BAM infrastructure to move any data older than the provided time window into the BAMArchive database before removing the data from the BAMPrimaryImport database tables.&nbsp; Within the BAMArchive database, one table per day per Activity will be created to store the archived data.</p>
<p>This is a great way to ensure that the size of the BAMPrimaryImport tables are kept under control, but there are two issues that need to be kept in mind with this approach:</p>
<ol>
<li>Once the data is moved to the BAMArchive database, the BAM Views will no longer reference this data, so queries on archived data will need to be constructed manually.</li>
<li>There is no automatic process for removing data from the BAMArchive database, so over time the number of tables in the BAMArchive database will increase and the disk space utilised by this database will continue to grow.</li>
</ol>
<p>Having this archived data available when you want to do some historical analysis on the data is very useful, but there is a tipping point where the amount of space the data utilises outweighs the benefits of keeping the data on hand.&nbsp; It is at this point that an automated mechanism for cleaning up the BAMArchive database becomes required.&nbsp;</p>
<h3>BAM Archive cleanup Script</h3>
<p>To this end, the below script is a script that I have utilised to automate this process.&nbsp; The script queries the sys.objects container for any user tables that start with the text "bam_", and which have been modified more than 45 days ago.&nbsp; It then uses a cursor&nbsp;to iterate over the result, and drops each table in turn.</p>
<p><span style="color: #ff0000;"><strong>NOTE: As this script is not restricted to a particular database, it&nbsp;will drop any tables in any database, where the table meets the defined criteria.&nbsp; Please review the script carefully before implementing.&nbsp;</strong></span></p>
<p><span style="color: #000000;">For this purpose, the execution statement to actually drop the table has been commented out.&nbsp; Once you are happy that the logic is safe, you can uncomment this line, implement the stored procedure and then schedule its execution&nbsp;from a SQL Agent job.</span></p>
<pre class="scroll"><code class="mysql">CREATE PROCEDURE [dbo].[usp_CleanUpBAMArchiveTables]<br />AS<br />BEGIN<br /> DECLARE @tname VARCHAR(100)<br /> DECLARE @sql VARCHAR(max)<br /> &nbsp;<br /> DECLARE db_cursor CURSOR FOR <br /> SELECT name AS tname<br /> FROM sys.objects<br /> WHERE <br /> modify_date &lt; GETDATE() - 45<br /> AND name LIKE 'bam_%'<br /> AND type='U'<br /> &nbsp;<br /> OPEN db_cursor <br /> FETCH NEXT FROM db_cursor INTO @tname <br /> &nbsp;<br /> WHILE @@FETCH_STATUS = 0 <br /> BEGIN <br /> SET @sql = 'DROP TABLE [' + @tname + ']'<br /> --EXEC (@sql)<br /> PRINT @sql<br /> &nbsp;<br /> FETCH NEXT FROM db_cursor INTO @tname <br /> END <br /> &nbsp;<br /> CLOSE db_cursor <br /> DEALLOCATE db_cursor<br />END</code></pre>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Custom XML Validator for Throwing Multiple Errors</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/custom-xml-validator-for-throwing-multiple-errors</link>
      <pubDate>Wed, 16 Feb 2011 11:20:00 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2011/02/16/custom-xml-validator-for-throwing-multiple-errors/</guid>
      <description><![CDATA[When applications / systems integrate with BizTalk via published WCF-based web services I often...]]></description>
      <content:encoded><![CDATA[<p>When applications / systems integrate with BizTalk via published WCF-based web services I often promote the idea that messages received by this web service should be validated before the sender of the message receives an acknowledgement that message was successfully delivered.&nbsp; Where a message fails validation I would also like to be able to return the reasons why validation failed.&nbsp; Implementing validation is fairly simple within BizTalk, but returning all the reasons why validation failed is slightly more complex.</p>
<h3>&nbsp;</h3>
<!--more-->
<h3>Standard Approaches to Validation</h3>
<p>The default XMLReceive pipeline uses the standard XML Disassembler component to identify the deployed schema against which the message should be validated and, optionally, will validate the received XML message against this identified schema.&nbsp; When configuring this validation you will need to set the &ldquo;ValidateDocument&rdquo; property to True, and provide the fully qualified assembly names for the schemas you want to validate.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/97/98/metablogapi/5344.image_4B240A9F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-97-98-metablogapi/5344.image_5F00_4B240A9F.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/97/98/metablogapi/5282.image_thumb_3D419ED7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-97-98-metablogapi/5282.image_5F00_thumb_5F00_3D419ED7.png" alt="image" width="332" height="363" border="0" /></a></p>
<p>Once configured in this way the incoming messages are matched against the schemas in the DocumentSpecNames property, and then validated against the schema.&nbsp; As soon as a validation error is encountered, the XML Validator throws an exception with the inner exception containing the reason for the validation failure.&nbsp; The resulting error would look something like this, indicating that the MonthNumber element probably has alphanumeric text as content, but the MonthNumber element is defined as xs:int:</p>
<blockquote>
<p><span style="font-family: Arial; font-size: x-small;">There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "Pipeline " Receive Port: "Test Services" URI: "/TestServices/Test.svc" Reason: The document failed to validate because of the following error:"The '</span><a href="https://test.org/schemas/1.3.0:MonthNumber'"><span style="font-family: Arial; font-size: x-small;">https://test.org/schemas/1.3.0:MonthNumber'</span></a><span style="font-family: Arial;"><span style="font-size: x-small;"> element has an invalid value according to its data type." .</span> </span></p>
</blockquote>
<p>The downside of implementing this method of validation is that you have to essentially hard-code the schema names in the configuration for the pipeline.</p>
<p>The second approach is to create a custom pipeline, composed of the standard XML Disassembler and standard XML Validator components.&nbsp; This essentially moves the validation logic from the XML Disassembler to the XML Validator component.&nbsp; A major benefit of using this approach is that you do not need to specify the document schema to validate the message against &hellip; the pipeline component will use the message's target namespace and root element name information to find the appropriate schema.&nbsp; The result is that the pipeline will dynamically be able to identify the schema for the received message, and then dynamically validated the message against the identified schema, making the pipeline a generic pipeline that can be used to validate any incoming message.&nbsp; As with the first approach, however, this approach will also only raise the first validation error.</p>
<p>Before discussing how we can identify multiple validation errors, let&rsquo;s discuss how we can return error information for an invalid message to the sender of the message.</p>
<h3>Dealing with Invalid Messages</h3>
<p>When an incoming message fails validation it can be regarded as a &ldquo;poison message&rdquo;&nbsp; (<a title="https://winterdom.com/2007/02/poisonmessagesandorderedprocessing" href="https://winterdom.com/2007/02/poisonmessagesandorderedprocessing">https://winterdom.com/2007/02/poisonmessagesandorderedprocessing</a>), and should not be allowed to process further through the solution.&nbsp; Instead, details of why the message failed validation should be returned to the sender so that they can make the necessary changes in their solution to correct the cause of the failure.&nbsp;</p>
<p>Using the WCF-WSHttp and WCF-BasicHttp adapters achieving this is rather easy. By checking the &ldquo;Include exception detail in faults&rdquo; flag in the &ldquo;Messages&rdquo; tab for the WCF settings, BizTalk will return the exception from the pipeline to the WCF-WSHttp or WCF-BasicHttp adapter, which will then return the exception as a SOAP fault to the sender.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/97/98/metablogapi/2577.image_7C8F2C9A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-97-98-metablogapi/2577.image_5F00_7C8F2C9A.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/97/98/metablogapi/3247.image_thumb_0663F839.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-97-98-metablogapi/3247.image_5F00_thumb_5F00_0663F839.png" alt="image" width="352" height="484" border="0" /></a></p>
<p>The result will be that when the sender application submits the message to a BizTalk web service, the application would not receive the HTTP 200 acknowledgement until the message has validated successfully.&nbsp; Where the message fails validation, the sender will receive the validation error as part of a SOAP Fault, returned with an HTTP 500 error.</p>
<p>The sender system would then need to correct the message and resubmit the message to the BizTalk web service.&nbsp; If the message fails validation a number of times, the process of sending, receiving a single error, and resubmitting the message will be a very time-consuming and frustrating process.&nbsp;</p>
<p>(Of course, the best would be for the sender to be validating the message against the schema BEFORE they send it, but I have seen it happen far too often where this is not done.)</p>
<h3>Solution</h3>
<p>The ideal solution to this would be to have the validation process identify as many failures as possible and return a message to the sender with the detail for all the failures.</p>
<p><a href="https://blogs.digitaldeposit.net/saravana/default.aspx">Saravana Kumar</a> developed a pipeline component that addresses this requirement on the basis that all the validation errors are identified and then used to formulate a new message.&nbsp; This new message is then returned as a standardised Error XML message to the sender (<a title="https://blogs.digitaldeposit.net/saravana/post/2008/04/05/Extended-XmlValidation-Pipeline-Component.aspx" href="https://blogs.digitaldeposit.net/saravana/post/2008/04/05/Extended-XmlValidation-Pipeline-Component.aspx">https://blogs.digitaldeposit.net/saravana/post/2008/04/05/Extended-XmlValidation-Pipeline-Component.aspx</a>).</p>
<p>While this component performs the core functionality of identifying all the validation errors, I wanted something a little more direct.&nbsp; Imagine a scenario where you have an event-based message exchange hub, using one-way WCF-WSHttp receive locations for receiving messages of varying structural complexity from partners via SOAP-based communication.&nbsp; A key principle of this architecture would be that the sender of a message should receive a communication acknowledgement (HTTP 200) ONLY if the message has been validated successfully.&nbsp; Therefore, if there are any errors encountered BEFORE the message has been received by the BizTalk Message Box, these errors are to be returned to the sender as a SOAP fault, rather than as a new message.&nbsp; This would result in the sender receiving an HTTP 200 acknowledgement if the message was successfully validated, or an HTTP 500 error, and the SOAP fault with all validation errors, if the validation failed.</p>
<p>Based on these requirements I developed a new custom XML Validator pipeline component.&nbsp; This component also needed a configurable maximum error limit, so that the validation process would halt if a specified number of errors in the validation process were encountered.&nbsp; In a custom receive pipeline the standard XML Disassembler component will still be used to identify the appropriate message schema, but then this custom XML Validator component will then validate the message against the message&rsquo;s schema, gather all the validation errors (up to the maximum error count), and raise a new exception with detail for each validation error included.&nbsp; This exception would then be returned to the sender of the message in the same way as described earlier in this blog.&nbsp;</p>
<p>The result is that when a message submitted fails validation, the validation errors are returned to the sender as a SOAP fault, as shown below:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Envelope</span> <span style="color: #ff0000;">xmlns:s</span><span style="color: #0000ff;">="https://www.w3.org/2003/05/soap-envelope"</span> <span style="color: #ff0000;">xmlns:a</span><span style="color: #0000ff;">="https://www.w3.org/2005/08/addressing"</span><span style="color: #0000ff;">&gt;</span><br />   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Header</span><span style="color: #0000ff;">&gt;</span><br />      <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a:Action</span> <span style="color: #ff0000;">s:mustUnderstand</span><span style="color: #0000ff;">="1"</span><span style="color: #0000ff;">&gt;</span>https://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher/fault<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a:Action</span><span style="color: #0000ff;">&gt;</span><br />   <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Header</span><span style="color: #0000ff;">&gt;</span><br />   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Body</span><span style="color: #0000ff;">&gt;</span><br />      <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Fault</span><span style="color: #0000ff;">&gt;</span><br />         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Code</span><span style="color: #0000ff;">&gt;</span><br />            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Value</span><span style="color: #0000ff;">&gt;</span>s:Receiver<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Value</span><span style="color: #0000ff;">&gt;</span><br />            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Subcode</span><span style="color: #0000ff;">&gt;</span><br />               <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Value</span> <span style="color: #ff0000;">xmlns:a</span><span style="color: #0000ff;">="https://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher"</span><span style="color: #0000ff;">&gt;</span>a:InternalServiceFault<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Value</span><span style="color: #0000ff;">&gt;</span><br />            <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Subcode</span><span style="color: #0000ff;">&gt;</span><br />         <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Code</span><span style="color: #0000ff;">&gt;</span><br />         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Reason</span><span style="color: #0000ff;">&gt;</span><br />            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Text</span> <span style="color: #ff0000;">xml:lang</span><span style="color: #0000ff;">="en-ZA"</span><span style="color: #0000ff;">&gt;</span>There was a failure executing the receive pipeline: "BizTalk.Common.Pipelines.XMLValidatingReceive, BizTalk.Common.Pipelines, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0ba159bca7ecb7f3" Source: "CustomXMLValidator Component" Receive Port: "Test Services" URI: "/TestServices/Test.svc" Reason: XML validation failed for a "https://ijs.gov.za/schemas/sajsvc/messages/DocketReadyNotification/3.0#DocketReadyNotification" message, with a message ID of "0d723957-861b-4896-9b3d-9985daa16fe2". Error Message(s): <br />Line: 28, Position: 38, Error: The 'https://test.org/schemas/1.3.0:MonthNumber' element has an invalid value according to its data type.<br />Line: 29, Position: 37, Error: The 'https://test.org/schemas/1.3.0:YearNumber' element has an invalid value according to its data type.<br />Line: 40, Position: 13, Error: The element 'DocumentCategoryID' in namespace 'https://test.org/schemas/1.3.0' has incomplete content. List of possible elements expected: 'https://test.org/schemas/1.3.0:ID'.<br />Line: 67, Position: 12, Error: The element 'CaseCharge' in namespace 'https://test.org/schemas/3.0' has incomplete content. List of possible elements expected: 'https://test.org/schemas/1.3.0:ChargeStatute'.<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Text</span><span style="color: #0000ff;">&gt;</span><br />         <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Reason</span><span style="color: #0000ff;">&gt;</span><br />         <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">s:Detail</span><span style="color: #0000ff;">&gt;</span><br />            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ExceptionDetail</span> <span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="https://schemas.datacontract.org/2004/07/System.ServiceModel"</span> <span style="color: #ff0000;">xmlns:i</span><span style="color: #0000ff;">="https://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #0000ff;">&gt;</span><br />               <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">HelpLink</span> <span style="color: #ff0000;">i:nil</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">/&gt;</span><br />               <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">InnerException</span> <span style="color: #ff0000;">i:nil</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">/&gt;</span><br />               <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Message</span><span style="color: #0000ff;">&gt;</span>There was a failure executing the receive pipeline: "BizTalk.Common.Pipelines.XMLValidatingReceive, BizTalk.Common.Pipelines, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0ba159bca7ecb7f3" Source: "CustomXMLValidator Component" Receive Port: "Test Services" URI: "/TestServices/Test.svc" Reason: XML validation failed for a "https://ijs.gov.za/schemas/sajsvc/messages/DocketReadyNotification/3.0#DocketReadyNotification" message, with a message ID of "0d723957-861b-4896-9b3d-9985daa16fe2". Error Message(s): <br />Line: 28, Position: 38, Error: The 'https://test.org/schemas/1.3.0:MonthNumber' element has an invalid value according to its data type.<br />Line: 29, Position: 37, Error: The 'https://test.org/schemas/1.3.0:YearNumber' element has an invalid value according to its data type.<br />Line: 40, Position: 13, Error: The element 'DocumentCategoryID' in namespace 'https://test.org/schemas/1.3.0' has incomplete content. List of possible elements expected: 'https://test.org/schemas/1.3.0:ID'.<br />Line: 67, Position: 12, Error: The element 'CaseCharge' in namespace 'https://test.org/schemas/3.0' has incomplete content. List of possible elements expected: 'https://test.org/schemas/1.3.0:ChargeStatute'.<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Message</span><span style="color: #0000ff;">&gt;</span><br />               <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">StackTrace</span><span style="color: #0000ff;">&gt;</span>at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.EndOperation(IAsyncResult result)<br />   at AsyncInvokeEndEndTwoWayMethod(Object , Object[] , IAsyncResult )<br />   at System.ServiceModel.Dispatcher.AsyncMethodInvoker.InvokeEnd(Object instance, Object[]<span style="color: #ff0000;">&amp;amp;</span> outputs, IAsyncResult result)<br />   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd(MessageRpc<span style="color: #ff0000;">&amp;amp;</span> rpc)<br />   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7(MessageRpc<span style="color: #ff0000;">&amp;amp;</span> rpc)<br />   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">StackTrace</span><span style="color: #0000ff;">&gt;</span><br />               <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Type</span><span style="color: #0000ff;">&gt;</span>Microsoft.BizTalk.Message.Interop.BTSException<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Type</span><span style="color: #0000ff;">&gt;</span><br />            <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ExceptionDetail</span><span style="color: #0000ff;">&gt;</span><br />         <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Detail</span><span style="color: #0000ff;">&gt;</span><br />      <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Fault</span><span style="color: #0000ff;">&gt;</span><br />   <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Body</span><span style="color: #0000ff;">&gt;</span><br /><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">s:Envelope</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
<p>Formatting of this SOAP fault will be a challenge for another day &hellip; anyone have ideas on this?</p>
<p>The source code for this CustomXMLValidator component is available from <span style="text-decoration: line-through;"><a href="https://cid-dadde215b1b6c861.office.live.com/self.aspx/.Public/Blog%20Files/BizTalk.Common.V1.zip">my SkyDrive</a></span>, correction <a href="https://onedrive.live.com/redir?resid=DADDE215B1B6C861!278&amp;authkey=!AA-kyvbxQG1y6KU&amp;ithint=file%2c.zip">my OneDrive</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk Posters Updated for BizTalk 2009</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/biztalk-posters-updated-for-biztalk-2009</link>
      <pubDate>Wed, 04 Feb 2009 10:43:27 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2009/02/04/biztalk-posters-updated-for-biztalk-2009/</guid>
      <description><![CDATA[The MS Technical Editors responsible for the BizTalk posters have recently updated some of the...]]></description>
      <content:encoded><![CDATA[<p>The MS Technical Editors responsible for the BizTalk posters have recently updated some of the posters for BizTalk 2009.&#160; </p>  <p>Check them out at the following URLs:</p>  <p>· <a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=DBBE85C5-4DD4-4B28-B2F1-6197980FD149&amp;displaylang=en">BizTalk Server 2009 Scale-out Configurations Poster</a></p>  <p>· <a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=2E322206-03CF-47BA-BDB0-F96770F889ED&amp;displaylang=en">BizTalk Server 2009 Database Infrastructure Poster</a></p>  <p>· <a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=193CD7A4-E271-46BB-B4EE-8434DFA779A0&amp;displaylang=en">BizTalk Server 2009 BAM Poster</a></p>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk 2006 R2 Certification</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/biztalk-2006-r2-certification</link>
      <pubDate>Fri, 30 Jan 2009 01:38:43 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2009/01/30/biztalk-2006-r2-certification/</guid>
      <description><![CDATA[In a recent internal discussion I was enlightened to the fact that there is a BizTalk Server 2006 R2...]]></description>
      <content:encoded><![CDATA[<p>In a recent internal discussion I was enlightened to the fact that there is a BizTalk Server 2006 R2 certification exam available.&#160; This exam is available at <a title="https://www.microsoft.com/learning/en/us/Exams/70-241.aspx" href="https://www.microsoft.com/learning/en/us/Exams/70-241.aspx">https://www.microsoft.com/learning/en/us/Exams/70-241.aspx</a>, so get going and be one of the first to get your BizTalk certification updated.</p>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk 2009 Public Beta and ESB Guidance V2 CTP Available!</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/biztalk-2009-public-beta-and-esb-guidance-v2-ctp-available</link>
      <pubDate>Mon, 08 Dec 2008 11:24:00 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2008/12/08/biztalk-2009-public-beta-and-esb-guidance-v2-ctp-available/</guid>
      <description><![CDATA[After a very valuable and interesting TAP (Technology Adoption Program) process, a public beta of...]]></description>
      <content:encoded><![CDATA[<P>After a very valuable and interesting TAP (Technology Adoption Program) process, a public beta of BizTalk Server 2009 is now available at <A href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=218"><FONT color=#ff9900>https://connect.microsoft.com/site/sitehome.aspx?SiteID=218</FONT></A>.&nbsp; In unison, the CTP of the ESB Guidance Toolkit v2 is also being released, and is available at <A href="https://codeplex.com/esb"><FONT color=#ff9900>https://codeplex.com/esb</FONT></A>.&nbsp; Go and grab it!</P>
<P>For those who are not aware of these two technologies, the detail below should provide good context:</P>
<H2>BizTalk Server 2009</H2>
<P>With the public beta release of BizTalk Server 2009, Microsoft is delivering the first customer preview of the multi-release road map announced in September 2008 and is giving customers the first look of the feature-complete download. BizTalk Server 2009 supports the latest Microsoft application platform technologies, including Windows Server 2008, Microsoft Visual Studio 2008 SP1, Microsoft SQL Server 2008 and the .NET Framework 3.5 SP1. BizTalk Server 2009 also delivers expanded new connectivity options including new integration with Oracle Corp.’s E-Business Suite, as well as updated platform support for the most recent versions of IBM Corp.’s Customer Information Control System (CICS), Information Management System (IMS), DB2, DB2/400, DB2 Universal Database and WebSphere MQ. </P>
<P>BizTalk Server 2009 also delivers improved scalability and reliability through support for SQL Server 2008, Windows Server 2008 Hyper-V virtualization and enhanced failover clustering. It provides significant new enhancements to both individual and team productivity by enabling new interoperability with Microsoft’s application life-cycle management (ALM) solution Visual Studio Team System and Team Foundation Server. This allows development teams to utilize the integrated source control, bug tracking, team development support, Project Server integration, and support for automating builds via MSBuild for a more seamless development and testing experience.</P>
<P>BizTalk RFID Mobile also extends the power of BizTalk Server RFID to mobile devices running Windows Mobile and Windows CE. In addition, BizTalk RFID Mobile delivers simple device management and offline processing capabilities, all of which help reduce the total cost of ownership.</P>
<H2>ESB Guidance 2.0 CTP</H2>
<P>The first public CTP release of the Microsoft ESB Guidance 2.0 for Microsoft BizTalk Server 2009&nbsp;incorporates many new and expanded features include the following: 
<UL>
<LI><B>New samples</B>:</LI>
<UL>
<LI>SSO Configuration provider for Enterprise Library 4.0</LI>
<LI>Multiple Web Service Execution Sample</LI>
<LI>Exception Handling Service Sample</LI></UL>
<LI><B>New ESB Web services</B>:</LI>
<UL>
<LI>Generic Itinerary Services ( no itinerary header required)</LI></UL>
<LI><B>New core features</B>:</LI>
<UL>
<LI>Alignment with Microsoft BizTalk Server 2009 ( Beta )</LI>
<LI>ESB Configuration tool</LI>
<LI>Centralized itinerary store</LI>
<LI>Itinerary resolver components</LI>
<LI>Itinerary forwarder pipeline component</LI>
<LI>Itinerary selector pipeline component</LI>
<LI>Itinerary designer</LI>
<LI>Centralized configuration uses Enterprise Library 4.0 Configuration Block</LI>
<LI>Centralized caching uses Enterprise Library 4.0 Caching Block</LI>
<LI>Multiple service invocation using both messaging and orchestrations</LI>
<LI>Itinerary BAM tracking </LI>
<LI>Improved ESB Core engine and itinerary execution</LI></UL></UL>]]></content:encoded>
    </item>
    <item>
      <title>“Dublin” and “Oslo” in the words of a Technologist</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/dublin-and-oslo-in-the-words-of-a-technologist</link>
      <pubDate>Tue, 28 Oct 2008 04:28:08 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2008/10/28/dublin-and-oslo-in-the-words-of-a-technologist/</guid>
      <description><![CDATA[David Chappell is both a technologist and an amazing wordsmith.&#160; In his most recent whitepaper,...]]></description>
      <content:encoded><![CDATA[<p>David Chappell is both a technologist and an amazing wordsmith.&#160; In his most recent whitepaper, titled <em>A First Look at WF 4.0, “Dublin”, and “Oslo”</em>, he does an amazing job of detailing the new release of WF, and the new “Dublin” and “Oslo” technologies.&#160; Read it at <a href="https://msdn.microsoft.com/en-us/library/dd200919.aspx">https://msdn.microsoft.com/en-us/library/dd200919.aspx</a>.</p>  <p>For those who focus on BizTalk, and who may be feeling that “Dublin” is encroaching on BizTalk’s territory, make sure you read the section titled <em>“Dublin” and BizTalk Server</em>.&#160; Although it only touches on this topic briefly it is a great synopsis of the different objectives of the two technologies.</p>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk Challenge Scenario 1 - Solution</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/biztalk-challenge-scenario-1-solution</link>
      <pubDate>Mon, 20 Oct 2008 05:22:16 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2008/10/20/biztalk-challenge-scenario-1-solution/</guid>
      <description><![CDATA[Quite a while back I posted what was to be the first in a series of BizTalk Scenarios that could be...]]></description>
      <content:encoded><![CDATA[<p>Quite a while back I <a target="_blank" href="https://blogs.msdn.com/nabeelp/archive/2008/06/23/biztalk-challenge-scenario-1.aspx">posted</a> what was to be the first in a series of BizTalk Scenarios that could be used as a practical learning aid.&#160; I was hoping to have the solution for this scenario uploaded within a month of that post, but alas it was not to be.&#160; The idea of posting the solution is that it would serve as a reference solution that could be used to compare your solution for the scenario with my proposed solution.&#160; By comparing different approaches to solving the same problem one can then learn and grow one's skills.</p>  <p>Well, I have finally gotten round to posting the solution to the South African BizTalk User Group forum at <a title="EATS - Scenario 1 Solution Pack" href="https://biztalkug.co.za/media/p/194.aspx">EATS - Scenario 1 Solution Pack</a>.&#160; Download it and compare it to your solution, or download it to see one possible solution as to how the challenges presented in the scenario could be solved.</p>  <p>As always, any comments / suggestions / criticisms are most welcome.</p>  <p>BTW: Look out for the second scenario, which will be posted soon.&#160; As can be expected, each subsequent scenario will present greater degrees of difficulty and will cover greater areas of BizTalk's capabilities.</p>]]></content:encoded>
    </item>
    <item>
      <title>Update on Wednesday's User Group Meeting</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/update-on-wednesdays-user-group-meeting</link>
      <pubDate>Sun, 05 Oct 2008 14:59:16 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2008/10/05/update-on-wednesdays-user-group-meeting/</guid>
      <description><![CDATA[The guys from K2 have provided some more detail on what they will be showing us during the User...]]></description>
      <content:encoded><![CDATA[<p>The guys from K2 have provided some more detail on what they will be showing us during the User Group meeting on Wednesday:</p>  <h3>Home Improvement Retailer &#8211; Integrated Sales Order Solution.</h3>  <ul>   <li>Charles (Sales Officer) creates a new sales order.      <ul>       <li>Customer data is received from SAP using BizTalk. (Using BizTalk SAP Adapter) </li>     </ul>   </li>    <li>Charles submits the order.      <ul>       <li>K2 uses BizTalk to do a credit check on an IBM server. (Using BizTalk Host Adapter for IBM DB2) </li>        <li>Based on the data received from the IBM server an approve or decline decision is made in the K2 process. </li>     </ul>   </li>    <li>When the credit check is approved      <ul>       <li>The Sales Order information is sent from K2 and captured back into SAP using BizTalk. (Using File Adapter and SAP Adapter) </li>        <li>An availability date is received back into the K2 process from SAP via BizTalk. (Using K2 Adapter) </li>     </ul>   </li>    <li>A message is sent back to BizTalk to update data into the BizTalk BAM. (Using BizTalk MSMQT Adapter) </li>    <li>K2 creates a calendar entry in MOSS based on the availability date. </li>    <li>K2 sends an Office Communications Server message and email to the Sales Team to indicate the sale has been processed. </li>    <li>An email is sent to the customer indicating the sale has been processed. </li> </ul>  <p>Although the K2 guys will be using stubs to simulate SAP and DB2 this should be a great demo!&#160; We should get a good idea of how K2 adds value to BizTalk and how human workflow can be integrated into BizTalk's business process automation focus.</p>  <p>Time permitting, remember that after this demo we will do a dive into the enhancements and new features coming down the line with BizTalk Server 2009.</p>  <p>It's going to be a jam-packed session ... so we hope to see you there!</p>]]></content:encoded>
    </item>
    <item>
      <title>Sending an HTML Email without an Orchestration</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/sending-an-html-email-without-an-orchestration</link>
      <pubDate>Thu, 11 Sep 2008 08:44:17 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2008/09/11/sending-an-html-email-without-an-orchestration/</guid>
      <description><![CDATA[There is plenty of information on the Net relating to being able to send an HTML email from BizTalk...]]></description>
      <content:encoded><![CDATA[<p>There is plenty of information on the Net relating to being able to send an HTML email from BizTalk using a dynamic SMTP port and an orchestration (see <a target="_blank" href="https://blogs.msdn.com/richardbpi/archive/2005/08/15/451760.aspx">here</a> and <a target="_blank" href="https://www.winterdom.com/weblog/CommentView,guid,532.aspx#commentstart">here</a>).&#160; At a client I needed to achieve the same objective, but without the use of an orchestration and with a static SMTP port.&#160; </p>  <p>The basic requirement was that the customer was looking to develop a solution that would make use of the standard send port filters, outbound map resolution, and BizTalk's management console to provide a flexible solution for sending HTML email to one or more standard email addresses.&#160; They specifically did not want to use an orchestration and a dynamic send port, as they wanted to use the send port filters as the &quot;rule base&quot; to determine which messages should be routed to which static email addresses, and they wanted to use the BizTalk administration console to maintain the email addresses and the filter rules (which are mainly BTS.MessageType filters).</p>  <p>This set of requirements presented the following challenges:</p>  <ol>   <li>How do you architect the solution so that you can setup and manage a specific send port once (e.g. a send port for <a href="mailto:billing@joesrouting.com">billing@joesrouting.com</a>) and route different messages to this send port.&#160; Yet, each message needs to be transformed in accordance with the message's unique type before the message is sent to the specified email address? </li>    <li>Once you understand how you are going to manage the routing and selective transformation requirements, how do you ensure that the selected transformation produces the HTML formatted email content specific to the message type you are sending? </li>    <li>The last challenge, although far easier to state, was somewhat more complex to resolve: How do you send an HTML email via a static send port? </li> </ol>  <p>&#160;</p>  <p></p>  <p><font size="4"></font></p>  <p><font size="4">Routing and Transforming Messages</font></p>  <p>For those who have worked with BizTalk for a while, this problem will not present too much of a challenge, as this functionality is native to BizTalk.&#160; The send port in BizTalk follows the following process (simplified for the purposes of this post):</p>  <ol>   <li>Receive the outbound message, in accordance with the send port's subscription. </li>    <li>Find any maps configured for the current send port, where the source schema in the map matches the current message's BTS.MessageType context property. </li>    <li>Execute the map, if a match is found.&#160; If no match is found the message is passed on to step 4. </li>    <li>Call the configured pipeline, passing in the output of the map. </li>    <li>Execute the pipeline. </li>    <li>Pass the output of the pipeline to the configured adapter. </li>    <li>The adapter then performs its logic on the finalised message. </li> </ol>  <p>Through this process the send port is able to receive any message type, and for each message type that is received a different map may be executed before the message is processed further.&#160; This process therefore fulfills the first &quot;challenge&quot; in this scenario, as we will.</p>  <p>&#160;</p>  <p><font size="4"></font></p>  <p><font size="4">Producing HTML Output</font></p>  <p>Using this approach to route and transform messages, the next challenge is how to produce HTML from a map.&#160; Once again, BizTalk provides a simple solution to achieve this: a BizTalk map can be configured to use an XSLT file, by choosing the XSLT file from the &quot;Custom XSL Path&quot; property in the map's properties.&#160; The XSLT that you use can then produce HTML and it can use content from the source schema to produce an HTML formatted output containing data from the input message.&#160; An example of such an XSLT file is shown below:</p>  <p class="CodeSection">&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;<a href="https://www.w3.org/1999/XSL/Transform" ?="?">https://www.w3.org/1999/XSL/Transform&quot;</a>&gt;     <br />&#160;&#160;&#160; &lt;xsl:output omit-xml-declaration=&quot;yes&quot; method=&quot;xml&quot; standalone=&quot;yes&quot; version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; /&gt;     <br />&#160;&#160;&#160; &lt;xsl:template match=&quot;/&quot;&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;html&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;head&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;title&gt;Billing Enquiry: Corporate&lt;/title&gt;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/head&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;body&gt;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;p&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; The details below relate to a billing enquiry receive at &lt;xsl:value-of select=&quot;//Header/QueryTime&quot; /&gt; on &lt;xsl:value-of select=&quot;//Header/QueryDate&quot; /&gt;.     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/p&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;table style=&quot;border:none;padding: 0px;width:100%;&quot;&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;Contact Person:&lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:value-of select=&quot;//Query/ContactName&quot; /&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;Contact Number:&lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:value-of select=&quot;//Query/ContactNo&quot; /&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;Account Number:&lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:value-of select=&quot;//Query/AccNo&quot; /&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;Query:&lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:value-of select=&quot;//Query/Description&quot; /&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/td&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tr&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/table&gt;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/body&gt;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/html&gt;     <br />&#160;&#160;&#160; &lt;/xsl:template&gt;     <br />&lt;/xsl:stylesheet&gt;</p>  <p>A particular snag that caught me during the implementation of this XSLT within the map is that BizTalk Mapper kept adding a META tag into the produced HTML, and it would change the nature of some of the tags, e.g. if we had a tag that was &quot;&lt;br/&gt;&quot; in the XSLT file, it would come out as &quot;&lt;br&gt;&quot; once the map had been executed.&#160; It was only after I realised that I had forgotten the output control declaration that I realised why this was happening.&#160; The point is: make sure that you include the following line in your XSLT file to ensure the correct processing takes place:</p>  <p class="CodeSection">&lt;xsl:output omit-xml-declaration=&quot;yes&quot; method=&quot;xml&quot; standalone=&quot;yes&quot; version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; /&gt;</p>  <p>&#160;</p>  <p><font size="4">Sending HTML via a Static Send Port</font></p>  <p>With the routing sorted, and the maps producing HTML, the next challenge was to get the static send port to send the HTML in the body of the send port.&#160; The challenge here is that the SMTP adapter does not natively take the content of the message and put it into the body of the email being sent via the send port.&#160; Even if you select the &quot;BizTalk message body part&quot; option in the &quot;Compose&quot; tab of the SMTP adapter properties, the content of the message is not used as the body of the email.&#160; Instead, the message is sent as an attachment to a blank email.&#160; There are examples of how to ensure that a specific set of text is used as the body of the email, via a dynamic port, but there are no examples of how to do this for a static port.&#160; </p>  <p>After trying many different options the result was to use a pipeline component and pipeline to set the &quot;ContentType&quot; property of the message being sent to &quot;text/html&quot;.&#160; Once this was done, the SMTP adapter was more than happy to take the content of the BizTalk message and place it within the body of the email it sent, and the email was received as an HTML-formatted email.&#160; The code used to set this is shown in the single line below:</p>  <p class="CodeSection">inmsg.BodyPart.ContentType = &quot;text/html&quot;;</p>  <p>&#160;</p>  <p><font size="4">In Summary</font></p>  <p>With the challenges solved, the final result was a flexible solution that did not use an orchestration, and which used a map per message type, and a send port per email address (with each send port configured with the appropriate maps and with the pipeline that set the content type).</p>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk Server 2009 == BizTalk Server 2006 R3</title>
      <link>https://docs.microsoft.com/archive/blogs/nabeelp/biztalk-server-2009-biztalk-server-2006-r3</link>
      <pubDate>Fri, 05 Sep 2008 09:24:13 GMT</pubDate>
      <dc:creator><![CDATA[Nabeel Prior]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/nabeelp/2008/09/05/biztalk-server-2009-biztalk-server-2006-r3/</guid>
      <description><![CDATA[Some very interesting news around BizTalk today.&#160; Not only was there the announcement around...]]></description>
      <content:encoded><![CDATA[<p>Some very interesting news around BizTalk today.&#160; Not only was there the announcement around BizTalk's future on the <a target="_blank" href="https://www.microsoft.com/biztalk/en/us/roadmap.aspx">BizTalk Server Roadmap</a> page, but there was a <a target="_blank" href="https://www.microsoft.com/presspass/features/2008/sep08/09-05BizTalk.mspx">Q&amp;A session with Oliver Sharp</a>, the General Manager for the Connected Systems Division.&#160; Some really cool info is contained in these updates.</p>  <p>The first point of interest is that the announcement and Q&amp;A provide a very clear commitment to BizTalk customers that existing investments in BizTalk will not be lost, that BizTalk will continue to grow as a product, and that upgrades will take previous investments into account.&#160; As some customers saw &quot;Oslo&quot; as being a potential replacement for BizTalk Server, this should set their minds at ease.&#160; The announcement emphasises this point by indicating that BizTalk will continue to grow as a product and will, over time, be able to interoperate with the modelling initiatives that are the embodiment of &quot;Oslo&quot;.&#160; So, BizTalk is here to stay!</p>  <p>This announcement and update also provide some more clarity around how the &quot;Oslo&quot; initiative is shaping up.&#160; &quot;Oslo&quot; has gone from being a broadly stated idea to becoming a more and more realistic strategy and set of initiatives within Microsoft.&#160; As with any large-scale idea, the concepts on which the idea are based go through a number of changes as the idea evolves over time and the concepts slowly formulate into more concrete definitions.&#160;&#160; This has happened with &quot;Oslo&quot; as well, and this post provides some clarity around how the core of &quot;Oslo&quot; is focused on the concepts of model-driven development and management.&#160; Even more interesting announcements relating to other concrete definitions that have come from the original &quot;Oslo&quot; idea are going to be made available at PDC in October ... so make sure you listen out for the news.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/nabeelp/WindowsLiveWriter/BizTalkServer2009BizTalkServer2006R3_F5C3/BizTalkSvr09_h_rgb_4.png" original-url="https://blogs.msdn.com/blogfiles/nabeelp/WindowsLiveWriter/BizTalkServer2009BizTalkServer2006R3_F5C3/BizTalkSvr09_h_rgb_4.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="BizTalk Server 2009" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/nabeelp/WindowsLiveWriter/BizTalkServer2009BizTalkServer2006R3_F5C3/BizTalkSvr09_h_rgb_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/nabeelp/WindowsLiveWriter/BizTalkServer2009BizTalkServer2006R3_F5C3/BizTalkSvr09_h_rgb_thumb_1.png" width="260" height="63" /></a> Another very interesting point is the change in name for the next release of BizTalk from the previously used name of &quot;BizTalk Server 2006 R3&quot; to the new name of &quot;BizTalk Server 2009&quot;.&#160; This is a clear indication of the number of changes and additions that have been included in this next release of BizTalk; not only is there a whole new set of platforms being used, but there are also new features being introduced, such as native support for unit testing, TFS, Hyper-V, etc.&#160; Some might feel that this is just a marketing ploy, but I believe this change is for the best due to the number of changes that have been incorporated in BizTalk since the original BizTalk Server 2006 release, and because this naming convention is more in line with the naming convention used for products such as SQL Server and Visual Studio.&#160; So keep a look out for CTP drops of BizTalk Server 2009 in the coming months.&#160; </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/nabeelp/WindowsLiveWriter/BizTalkServer2009BizTalkServer2006R3_F5C3/BizTalkSvr09_h_rgb_r_2.png" original-url="https://blogs.msdn.com/blogfiles/nabeelp/WindowsLiveWriter/BizTalkServer2009BizTalkServer2006R3_F5C3/BizTalkSvr09_h_rgb_r_2.png"></a></p>  <p>Lastly, the guys in the Connected Systems Division of Microsoft have committed themselves to making a major release of BizTalk every 2 years, with some tantalising promises of functionality that will come available through the next two releases.&#160; The ones that pique my interest the most are the &quot;Low-latency messaging enhancements&quot;, the hint at new BizTalk Mapper functionality, and the &quot;Real-time business event visibility&quot;.</p>  <p>So, all round ... a lot to look forward to both in the short and medium term.&#160; Interesting times lie ahead!&#160; :-)</p>]]></content:encoded>
    </item>
  </channel>
</rss>