<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>BizBert - BizTalk General</title>
    <link>http://www.bizbert.com/bizbert/</link>
    <description>BizTalk Uncovered, Discussed, and Promoted</description>
    <language>en-us</language>
    <copyright>Daniel Probert</copyright>
    <lastBuildDate>Thu, 01 Sep 2011 09:04:12 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>bizbert@probertsolutions.com</managingEditor>
    <webMaster>bizbert@probertsolutions.com</webMaster>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=1a7af31e-01b7-4fbc-8a1b-40e9ad106458</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,1a7af31e-01b7-4fbc-8a1b-40e9ad106458.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,1a7af31e-01b7-4fbc-8a1b-40e9ad106458.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=1a7af31e-01b7-4fbc-8a1b-40e9ad106458</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been waiting for this for a while... contains all hotfixes released since CU1
was released...
</p>
        <p>
Get it here: <a href="http://support.microsoft.com/kb/2573000" target="_new">http://support.microsoft.com/kb/2573000
</a></p>
        <img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=1a7af31e-01b7-4fbc-8a1b-40e9ad106458" />
      </body>
      <title>Cumulative Update 2 for BizTalk Server 2010</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,1a7af31e-01b7-4fbc-8a1b-40e9ad106458.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2011/09/01/Cumulative+Update+2+For+BizTalk+Server+2010.aspx</link>
      <pubDate>Thu, 01 Sep 2011 09:04:12 GMT</pubDate>
      <description>&lt;p&gt;
I've been waiting for this for a while... contains all hotfixes released since CU1
was released...
&lt;/p&gt;
&lt;p&gt;
Get it here: &lt;a href="http://support.microsoft.com/kb/2573000" target="_new"&gt;http://support.microsoft.com/kb/2573000
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=1a7af31e-01b7-4fbc-8a1b-40e9ad106458" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,1a7af31e-01b7-4fbc-8a1b-40e9ad106458.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=2b810e3f-543f-4e46-955e-47a4502e2089</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,2b810e3f-543f-4e46-955e-47a4502e2089.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,2b810e3f-543f-4e46-955e-47a4502e2089.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=2b810e3f-543f-4e46-955e-47a4502e2089</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Improving the ESB Toolkit: Fixing the "endless loop" bug when creating Fault messages</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,2b810e3f-543f-4e46-955e-47a4502e2089.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2011/05/06/Improving+The+ESB+Toolkit+Fixing+The+Endless+Loop+Bug+When+Creating+Fault+Messages.aspx</link>
      <pubDate>Fri, 06 May 2011 12:03:10 GMT</pubDate>
      <description>&lt;p&gt;The ESB Toolkit is great. However, it's not without its fair
share of bugs. I've been meaning to blog about this since I first came across this
bug a year or so ago, but it's taken me a while.&lt;/p&gt;

&lt;p&gt;If you use the ExceptionManagementDb functionality...&lt;/p&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=2b810e3f-543f-4e46-955e-47a4502e2089"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,2b810e3f-543f-4e46-955e-47a4502e2089.aspx</comments>
      <category>BizTalk General</category>
      <category>ESB Toolkit</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=3085343a-fe84-4154-a60b-df771367c09d</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,3085343a-fe84-4154-a60b-df771367c09d.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,3085343a-fe84-4154-a60b-df771367c09d.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=3085343a-fe84-4154-a60b-df771367c09d</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <title>BizTalk moving to the cloud… and to Windows Server AppFabric</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,3085343a-fe84-4154-a60b-df771367c09d.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2010/10/29/BizTalk+Moving+To+The+Cloud+And+To+Windows+Server+AppFabric.aspx</link>
      <pubDate>Fri, 29 Oct 2010 11:37:12 GMT</pubDate>
      <description>For those of you who may have missed &lt;A href="http://blogs.msdn.com/b/biztalk_server_team_blog/archive/2010/10/28/changing-the-game-biztalk-server-2010-and-the-road-ahead.aspx"&gt;Sriram’s blog post&lt;/A&gt;, there will be a CTP of the Integration as a Service version of BizTalk appearing in Azure sometime before July 2011 (interestingly, the blog entry was posted at 10am on October 28&lt;SUP&gt;th&lt;/SUP&gt;, i.e. an hour after PDC10 started…!).&lt;BR /&gt;
Additionally, BizTalk vNext will transition to being AppFabric...&lt;BR /&gt;&lt;BR /&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=3085343a-fe84-4154-a60b-df771367c09d"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,3085343a-fe84-4154-a60b-df771367c09d.aspx</comments>
      <category>AppFabric</category>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=17fc721b-000c-4be6-bcc8-5072d65a98c2</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,17fc721b-000c-4be6-bcc8-5072d65a98c2.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,17fc721b-000c-4be6-bcc8-5072d65a98c2.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=17fc721b-000c-4be6-bcc8-5072d65a98c2</wfw:commentRss>
      <title>AppFabric’s AutoStart feature: great news for BizTalk</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,17fc721b-000c-4be6-bcc8-5072d65a98c2.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2010/10/27/AppFabrics+AutoStart+Feature+Great+News+For+BizTalk.aspx</link>
      <pubDate>Wed, 27 Oct 2010 11:01:04 GMT</pubDate>
      <description>&lt;p&gt;Any of you who have been writing WCF front-ends for BizTalk services will know about one of ASP.NET’s failings: first request latency. A service (or application) hosted in IIS doesn’t start-up and JIT itself fully until the first request is received.&lt;/p&gt;
&lt;p&gt;And if low-latency is important to you, this isn’t acceptable, as the first request can incur delays ranging anywhere from 2 secs to 60 secs!&lt;/p&gt;
&lt;p&gt;There are many common ways to...&lt;/p&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=17fc721b-000c-4be6-bcc8-5072d65a98c2"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,17fc721b-000c-4be6-bcc8-5072d65a98c2.aspx</comments>
      <category>AppFabric</category>
      <category>BizTalk General</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=8be3fd64-8e17-4867-aef0-352f5a1f1dec</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,8be3fd64-8e17-4867-aef0-352f5a1f1dec.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,8be3fd64-8e17-4867-aef0-352f5a1f1dec.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=8be3fd64-8e17-4867-aef0-352f5a1f1dec</wfw:commentRss>
      <title>BizTalk 2010 Released; Development edition now free</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,8be3fd64-8e17-4867-aef0-352f5a1f1dec.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2010/09/26/BizTalk+2010+Released+Development+Edition+Now+Free.aspx</link>
      <pubDate>Sun, 26 Sep 2010 20:19:06 GMT</pubDate>
      <description>&lt;p&gt;
Well the announcement came over a week after I thought it would arrive, but BTS2010
is now officially released. And the developer edition is now free.
&lt;/p&gt;
&lt;p&gt;
However, that doesn’t mean that you can do development for free: you still need to
pay for SQL Server and Visual Studio.
&lt;/p&gt;
&lt;p&gt;
Although having said that, SQL Server 2008 Dev edition is fairly cheap (as in, about
£20 on a select agreement), so the only real cost is Visual Studio... Still, it means
that there won’t be hoards of hobbyist devs out there trying out BTS, unless they
manage to get it running with Visual Studio Express (does that actually work? Never
tried it, but wouldn't have thought so – might have a go tomorrow). Still, it means
that you no longer need an MSDN license to do BizTalk dev, which removes a huge barrier
for budding/hobbyist BizTalk devs. Especially if you want to start developing with
the AppFabric integration features in BTS 2010.
&lt;/p&gt;
&lt;p&gt;
You can download the dev editions of BTS2010 and HIS2010 from here:
&lt;/p&gt;
&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938102b8-a677-4c20-906d-f6ae472b3a6a&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938102b8-a677-4c20-906d-f6ae472b3a6a&amp;displaylang=en&lt;/a&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=8be3fd64-8e17-4867-aef0-352f5a1f1dec" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,8be3fd64-8e17-4867-aef0-352f5a1f1dec.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=c563d4a1-db01-45c3-a77e-91ddcfe625ec</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,c563d4a1-db01-45c3-a77e-91ddcfe625ec.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,c563d4a1-db01-45c3-a77e-91ddcfe625ec.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=c563d4a1-db01-45c3-a77e-91ddcfe625ec</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Installing the ESB Toolkit v2.0 on Windows 7 Error: Operation Not Completed</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,c563d4a1-db01-45c3-a77e-91ddcfe625ec.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2010/08/22/Installing+The+ESB+Toolkit+V20+On+Windows+7+Error+Operation+Not+Completed.aspx</link>
      <pubDate>Sun, 22 Aug 2010 17:22:56 GMT</pubDate>
      <description>&lt;p&gt;Here's an interesting one: I was installing the ESB Toolkit 2.0 on a Win 7 x86 machine the other day, and during install got an error from Visual Studio saying "The operation could not be completed.":&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;image src="http://www.bizbert.com/bizbert/content/binary/OpNotCompleted.jpg"&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you choose OK, the ESB Installer finishes with a success message, but then the Itinerary Designer doesn't work in Visual Studio (you get an error about a missing assembly when you try and add a new itinerary to a project).&lt;/p&gt;

&lt;p&gt;There was nothing...&lt;/p&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=c563d4a1-db01-45c3-a77e-91ddcfe625ec"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,c563d4a1-db01-45c3-a77e-91ddcfe625ec.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=cfc42eae-23b6-4c29-9757-3a9caf6dee19</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,cfc42eae-23b6-4c29-9757-3a9caf6dee19.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,cfc42eae-23b6-4c29-9757-3a9caf6dee19.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=cfc42eae-23b6-4c29-9757-3a9caf6dee19</wfw:commentRss>
      <title>XPath – the hidden language of BizTalk?</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,cfc42eae-23b6-4c29-9757-3a9caf6dee19.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/11/30/XPath+The+Hidden+Language+Of+BizTalk.aspx</link>
      <pubDate>Fri, 30 Nov 2007 16:53:03 GMT</pubDate>
      <description>&lt;p&gt;For those of you who are unaware, XPath is a powerful query language for XML (ignoring XQuery for now).&lt;/p&gt;
&lt;p&gt;In my experience I've worked with a lot of BizTalk developers who have come from a C# (and usually VB before that) background, and so haven't always had the background in XML, XSLT, XSD, and XPath needed to fully appreciate BizTalk.&lt;/p&gt;
&lt;p&gt;Because let's face it: before you were working on BizTalk, how often did you need to deal directly with Xml? When writing ASP.NET web services, the .NET framework abstracts away the need to understand XML, leaving you with classes which are handily serialised/de-serialised across the wire for you.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I have come across a similar pattern in the J2EE world – ask many Java developers about an Xml document they received as a request in a J2EE Web Service, and they'll only know about Beans, as the framework looks after the de-serialization from Xml into a Bean for them).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;However, BizTalk is a different beastie: it works predominantly with data streams containing Xml.&lt;br&gt;Therefore the ability to know how to query this Xml without having to resort to C# code is very very important.&lt;/p&gt;
&lt;p&gt;BizTalk 2004 and 2006/2006R2 support XPath 1.0 - as at this time, there is no support for XPath 2.0 in BizTalk.&lt;br&gt;You can get a good idea of the functions available in XPath 1.0 &lt;a href="http://www.edankert.com/xpathfunctions.html" target="_blank"&gt;here&lt;/a&gt; (which is a useful summary of the &lt;a href="http://www.w3.org/TR/xpath" target="_blank"&gt;W3 Recommendation&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;(as a comparison, here's what &lt;a href="http://www.w3schools.com/xpath/xpath_functions.asp" target="_blank"&gt;XPath 2.0 gives you&lt;/a&gt;&amp;nbsp;- here's hoping we get this in BizTalk sometime soon...!)&lt;/p&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=cfc42eae-23b6-4c29-9757-3a9caf6dee19"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,cfc42eae-23b6-4c29-9757-3a9caf6dee19.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=1ee42353-fdb8-474c-816e-b04c49c9de35</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,1ee42353-fdb8-474c-816e-b04c49c9de35.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,1ee42353-fdb8-474c-816e-b04c49c9de35.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=1ee42353-fdb8-474c-816e-b04c49c9de35</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Auto-generating BizUnit Test Cases</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,1ee42353-fdb8-474c-816e-b04c49c9de35.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/11/27/Autogenerating+BizUnit+Test+Cases.aspx</link>
      <pubDate>Tue, 27 Nov 2007 17:59:18 GMT</pubDate>
      <description>&lt;P&gt;This post follows on from yesterday's post: &lt;A href="http://www.bizbert.com/bizbert/2007/11/26/Creating+BizUnit+Test+Cases+For+Comparing+Xml+Files.aspx" target=_blank&gt;Creating BizUnit Test Cases for comparing Xml Files&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If you are using the &lt;FONT face="Courier New" color=#a52a2a&gt;XmlValidationStep&lt;/FONT&gt;/&lt;FONT face="Courier New" color=#a52a2a&gt;XmlValidationStepEx&lt;/FONT&gt; BizUnit steps and using XPath validation, then it can be a pain to write all these XPathValidation statements by hand.&lt;/P&gt;
&lt;P&gt;So I wrote a utility to generate the XPath statements for you.&lt;BR&gt;In fact, it generates the entire BizUnit Test Case for validating an Xml file.&lt;BR&gt;Once it has been generated, all you have to do is[...]&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=1ee42353-fdb8-474c-816e-b04c49c9de35"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,1ee42353-fdb8-474c-816e-b04c49c9de35.aspx</comments>
      <category>BizTalk General</category>
      <category>BizUnit</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=b992dcc9-b91d-4fa1-9ac0-eaa633325b90</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,b992dcc9-b91d-4fa1-9ac0-eaa633325b90.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,b992dcc9-b91d-4fa1-9ac0-eaa633325b90.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=b992dcc9-b91d-4fa1-9ac0-eaa633325b90</wfw:commentRss>
      <title>Creating BizUnit Test Cases for comparing Xml Files</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,b992dcc9-b91d-4fa1-9ac0-eaa633325b90.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/11/26/Creating+BizUnit+Test+Cases+For+Comparing+Xml+Files.aspx</link>
      <pubDate>Mon, 26 Nov 2007 17:51:27 GMT</pubDate>
      <description>&lt;P&gt;BizUnit is a great tool for performing end-to-end testing of BizTalk applications (and can even be used for testing non-BizTalk applications like Web services too).&lt;BR&gt;Although you're not strictly performing unit-testing of your BizTalk artefacts per-se, with the right setup you can get very close to unit testing.&lt;/P&gt;
&lt;P&gt;For example if you want to test an orchestration in isolation you can:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Hook your orchestration up to file send/receive ports&lt;BR&gt;or 
&lt;LI&gt;Write a façade orchestration which calls your orchestration, and is itself hooked up to file send/receive ports or&lt;BR&gt;or 
&lt;LI&gt;Write your own orchestration hosting engine&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I don't know many people who'd be crazy enough to do 3) (although I do know one…) but BizUnit is of great help for 1) and 2)&lt;/P&gt;
&lt;P&gt;In its simplest form you can use BizUnit to[...]&lt;/p&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=b992dcc9-b91d-4fa1-9ac0-eaa633325b90"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,b992dcc9-b91d-4fa1-9ac0-eaa633325b90.aspx</comments>
      <category>BizTalk General</category>
      <category>BizUnit</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=b3ea5779-950d-4d4c-8991-c716b7213592</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,b3ea5779-950d-4d4c-8991-c716b7213592.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,b3ea5779-950d-4d4c-8991-c716b7213592.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=b3ea5779-950d-4d4c-8991-c716b7213592</wfw:commentRss>
      <title>BizUnit: XmlValidationStep using .NET 2.0 Schema Validation</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,b3ea5779-950d-4d4c-8991-c716b7213592.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/11/24/BizUnit+XmlValidationStep+Using+NET+20+Schema+Validation.aspx</link>
      <pubDate>Sat, 24 Nov 2007 18:43:10 GMT</pubDate>
      <description>This is something that bit me recently:&lt;br&gt;The current version of &lt;a href="http://www.codeplex.com/bizunit" target="_blank"&gt;BizUnit&lt;/a&gt; (v.2.2.1003.0)&amp;nbsp; uses the .NET 1.0 &lt;a href="http://msdn2.microsoft.com/En-US/library/system.xml.xmlvalidatingreader.aspx" target="_blank"&gt;XmlValidatingReader&lt;/a&gt; to do schema validation in both the XmlValidationStep and XmlValidationStepEx steps.&lt;br&gt;&lt;br&gt;.NET 2.0 deprecated the XmlValidatingReader class, proposing that you use the &lt;a href="http://msdn2.microsoft.com/En-US/library/system.xml.xmlreader.aspx" target="_blank"&gt;XmlReader&lt;/a&gt; class and the new &lt;a href="http://msdn2.microsoft.com/En-US/library/system.xml.xmlreadersettings.aspx" target="_blank"&gt;XmlReaderSettings&lt;/a&gt; class instead.&lt;br&gt;Microsoft also introduced a slew of bug fixes to the validation logic[...]&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=b3ea5779-950d-4d4c-8991-c716b7213592"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,b3ea5779-950d-4d4c-8991-c716b7213592.aspx</comments>
      <category>BizTalk General</category>
      <category>BizUnit</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=29f5f5b2-c752-44d5-ba05-9f07e6e1030c</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,29f5f5b2-c752-44d5-ba05-9f07e6e1030c.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,29f5f5b2-c752-44d5-ba05-9f07e6e1030c.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=29f5f5b2-c752-44d5-ba05-9f07e6e1030c</wfw:commentRss>
      <title>Distinguished Fields and Optional Elements</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,29f5f5b2-c752-44d5-ba05-9f07e6e1030c.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/11/15/Distinguished+Fields+And+Optional+Elements.aspx</link>
      <pubDate>Thu, 15 Nov 2007 15:09:42 GMT</pubDate>
      <description>&lt;P&gt;Thought this might be of interest to a few BizTalk developers out there.&lt;/P&gt;
&lt;P&gt;It's quite common practice to use Distinguished Fields in orchestrations, to get/set the value of an element or attribute.&lt;/P&gt;
&lt;P&gt;However, if the element you're trying to set/get doesn't exist, then this poses a few problems.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Setting a Distinguished Field&lt;/STRONG&gt;&lt;BR&gt;If the element/attribute doesn't exist in the target message, then you'll get an exception, no questions asked – there's no way around this.&lt;BR&gt;Under the covers, the &lt;FONT face="Courier New" color=#000080&gt;SetDistinguishedField&lt;/FONT&gt; method is called to set the value – and it doesn't check if the element/attribute exists first.&lt;BR&gt;The same thing happens if you use the &lt;FONT face="Courier New" color=#000080&gt;xpath()&lt;/FONT&gt; function to set a value, and the element/attribute doesn't exist –&amp;nbsp;BizTalk isn't about to modify your message and add the element/attribute for you[...]&lt;/P&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=29f5f5b2-c752-44d5-ba05-9f07e6e1030c"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,29f5f5b2-c752-44d5-ba05-9f07e6e1030c.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=e9b569f7-22b7-4001-ba8c-7f6674ccf737</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,e9b569f7-22b7-4001-ba8c-7f6674ccf737.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,e9b569f7-22b7-4001-ba8c-7f6674ccf737.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=e9b569f7-22b7-4001-ba8c-7f6674ccf737</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Manually sending a response back to a waiting Web Service client</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,e9b569f7-22b7-4001-ba8c-7f6674ccf737.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/09/09/Manually+Sending+A+Response+Back+To+A+Waiting+Web+Service+Client.aspx</link>
      <pubDate>Sun, 09 Sep 2007 10:41:48 GMT</pubDate>
      <description>&lt;p&gt;(or how to do asynchronous processing of a synchronous request/response message)&lt;br&gt;[&lt;strong&gt;Note&lt;/strong&gt;: this post follows on from my previous post &lt;a href="http://www.bizbert.com/bizbert/2007/09/01/How+To+Validate+Xml+Documents+Against+Schemas+In+BizTalk.aspx" target="_new"&gt;How to validate Xml Documents against schemas in BizTalk&lt;/a&gt;. For example, if you validate a message in a pipeline and validation fails, how do you send a response back to a waiting web service client.]&lt;br&gt;&lt;br&gt;For a while now, people have been struggling with how to asynchronously process request/response messages - basically, how to get away from having a request/response port in an orchestration bound to a request/response&amp;nbsp; receive location.&lt;br&gt;&lt;br&gt;For example, Yossi Dohan blogged on this a while back, and came up with a solution involving multiple orchestrations:&lt;br&gt;&lt;a href="http://www.sabratech.co.uk/blogs/yossidahan/2006/06/sync-to-async-conversion.html" target="_new"&gt;http://www.sabratech.co.uk/blogs/yossidahan/2006/06/sync-to-async-conversion.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;The problem revolves around the fact that BizTalk will always demote the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms966048.aspx" target="_new"&gt;&lt;i&gt;EpmRRCorrelationToken &lt;/i&gt;&lt;/a&gt;context property when your message leaves the orchestration if you try and manually set it yourself.&lt;br&gt;&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=e9b569f7-22b7-4001-ba8c-7f6674ccf737"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,e9b569f7-22b7-4001-ba8c-7f6674ccf737.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=c04612b1-f77d-4cb8-bdb5-ff6acf5b1790</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,c04612b1-f77d-4cb8-bdb5-ff6acf5b1790.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,c04612b1-f77d-4cb8-bdb5-ff6acf5b1790.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=c04612b1-f77d-4cb8-bdb5-ff6acf5b1790</wfw:commentRss>
      <title>How to validate Xml Documents against schemas in BizTalk</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,c04612b1-f77d-4cb8-bdb5-ff6acf5b1790.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/09/01/How+To+Validate+Xml+Documents+Against+Schemas+In+BizTalk.aspx</link>
      <pubDate>Sat, 01 Sep 2007 10:16:55 GMT</pubDate>
      <description>I got asked a question the other day: &lt;i&gt;How would you validate an incoming message against a schema if the message was the request part of a request-response pair and you wanted to return a response if the request wasn't valid?&lt;/i&gt;&lt;br&gt;&lt;br&gt;In the example given, an orchestration had been exposed as a web service, and the requirement was to validate the incoming message. If the message did not validate they wanted to return a response message with an error message in it.&lt;br&gt;&lt;br&gt;I gave two of the ways I would do it, but that wasn't what they were expecting: they were expecting the simplest (and computationally slowest) way of doing it. And I realised that many people use this mechanism as they &lt;i&gt;don't know there's any other way&lt;/i&gt;.&lt;br&gt;&lt;br&gt;Why do I say this? I'll explain as I give my solutions.&lt;br&gt;First of all: The solution that was expected was to use an orchestration to do the validation - as the person explained to me, that was the only way to get the response message back to the same "connection" i.e. have it go back out as a response to the matching request.&lt;br&gt;As you'll see this is not true.&lt;br&gt;In this post I'll cover the ways to do validation.&lt;br&gt;In the next post, I'll cover how you correlate the response back to the client who is waiting for a response.&lt;br&gt;&lt;br&gt;Let me say one thing: BizTalk is not magic. There is no magic (thanks &lt;a href="http://en.wikipedia.org/wiki/Nakor"&gt;Nakor&lt;/a&gt;). There's simply some COM+ applications, some .NET assemblies, instances of a Windows Service, some database tables... and a lot of unmanaged code.&lt;br&gt;What gets confusing[...]&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=c04612b1-f77d-4cb8-bdb5-ff6acf5b1790"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,c04612b1-f77d-4cb8-bdb5-ff6acf5b1790.aspx</comments>
      <category>BizTalk General</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=362d762a-4ec2-4c7d-81ec-9b275635d5af</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,362d762a-4ec2-4c7d-81ec-9b275635d5af.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,362d762a-4ec2-4c7d-81ec-9b275635d5af.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=362d762a-4ec2-4c7d-81ec-9b275635d5af</wfw:commentRss>
      <title>Sending HTML emails with embedded images in BizTalk</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,362d762a-4ec2-4c7d-81ec-9b275635d5af.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/06/12/Sending+HTML+Emails+With+Embedded+Images+In+BizTalk.aspx</link>
      <pubDate>Tue, 12 Jun 2007 09:01:16 GMT</pubDate>
      <description>Ever wanted to send emails from BizTalk (using the SMTP adapter) which have images embedded in them? I did recently.&lt;br&gt;&lt;br&gt;Sending HTML emails (or text emails) in BizTalk without embedded images has been done to death – all you need is the &lt;a target="_new" href="http://msdn2.microsoft.com/en-us/library/ms962963.aspx"&gt;RawString message type&lt;/a&gt;.&lt;br&gt;&lt;br&gt;But how do you use the SMTP adapter to send emails with embedded images?&lt;br&gt;I didn't want to cheat and write a helper class.&lt;br&gt;&lt;br&gt;I first looked at using the MIME/SMIME encoder pipeline component.&lt;br&gt;By default the MIME encoder uses a mime Content-Type of &lt;i&gt;multipart/mixed&lt;/i&gt;.&lt;br&gt;&lt;br&gt;So if you have a multipart message with an HTML body part and a single image as a second part, this is what the MIME encoder generates[...]&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=362d762a-4ec2-4c7d-81ec-9b275635d5af"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,362d762a-4ec2-4c7d-81ec-9b275635d5af.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=03263042-8688-4d92-b100-05d5a841559e</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,03263042-8688-4d92-b100-05d5a841559e.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,03263042-8688-4d92-b100-05d5a841559e.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=03263042-8688-4d92-b100-05d5a841559e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Validating Schemas in WebMethods using Attributes</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,03263042-8688-4d92-b100-05d5a841559e.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/04/15/Validating+Schemas+In+WebMethods+Using+Attributes.aspx</link>
      <pubDate>Sun, 15 Apr 2007 16:44:54 GMT</pubDate>
      <description>One of the most annoying things in BizTalk is when an error is generated in a Receive Pipeline indicating that a message has been suspended because of the content of the message doesn't validate against the given schema (for the moment, we'll gloss over the fact that in an ideal situation this should only ever happen during testing).&lt;br&gt;&lt;br&gt;Using BizTalk 2006's new &lt;a href="http://msdn2.microsoft.com/en-us/library/aa578516.aspx" target="_new"&gt;Failed Message Routing&lt;/a&gt; feature, it's fairly simple to write something which can deal with this situation (using either an Orchestration or SendPort subscribing to the Error Report). &lt;br&gt;Returning a message back to a Web Service caller indicating that there is something wrong with their message, is non-trivial – it's possible, but requires some in-depth knowledge of how instance subscriptions work.&lt;br&gt;&lt;br&gt;However, there is an easier way: validating the message at the endpoint (i.e. inside the Web Service itself).&lt;br&gt;&lt;a href="http://pluralsight.com/blogs/aaron/" target="_new"&gt;Aaron Skonnard&lt;/a&gt; and Dan Sullivan wrote an article for MSDN magazine in July 2003 on &lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/07/xmlschemavalidation/default.aspx" target="_new"&gt;how to implement attribute based schema validation for Web Method parameters&lt;/a&gt;.&lt;br&gt;&lt;br&gt;It's a great idea: decorate a Web Method with an attribute, and when the web method is called then any messages received will be validated against their schemas – if they don't validate, then a SOAP Fault is returned back to the caller[...]&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=03263042-8688-4d92-b100-05d5a841559e"/&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,03263042-8688-4d92-b100-05d5a841559e.aspx</comments>
      <category>BizTalk General</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=06f8206d-1517-4f9f-8824-7b52da2f1b55</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,06f8206d-1517-4f9f-8824-7b52da2f1b55.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,06f8206d-1517-4f9f-8824-7b52da2f1b55.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=06f8206d-1517-4f9f-8824-7b52da2f1b55</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">So now everyone gets to play...!<br />
Announcement is <a href="http://blogs.msdn.com/biztalk_server_team_blog/archive/2007/04/03/public-beta-for-biztalk-2006-r2-has-released.aspx">here</a>.<br />
Download it from <a href="http://connect.microsoft.com/site/sitehome.aspx?SiteID=65">here</a> (you'll
need to register for Microsoft Connect and/or sign in - but it's free to register).<br />
If you download everything, it's a 558MB download.<br /><br />
This the Beta2 version.<br /><br />
So download it, and go play with all the WCF goodness...<br /><br />
What's new in R2?<br /><ul><li>
Better EDI (<a href="http://en.wikipedia.org/wiki/Electronic_Data_Interchange">Electronic
Data Exchange</a>) and AS2 (<a href="http://en.wikipedia.org/wiki/AS2">Applicability
Statement 2</a>) support</li><li>
Support for RFID (<a href="http://en.wikipedia.org/wiki/RFID">Radio-Frequency Identification</a>)<br /></li><li>
New WCF Adapters</li><li>
Better SharePoint integration</li><li>
Supported under Vista (i.e it'll work without hacking it!)</li><li>
Better integration with Office 2007</li></ul>
I'll have a play with this new Beta and blog about my findings soon.<br /><br /><br /><p></p><img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=06f8206d-1517-4f9f-8824-7b52da2f1b55" /></body>
      <title>BizTalk 2006 R2 Public Beta released</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,06f8206d-1517-4f9f-8824-7b52da2f1b55.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/04/03/BizTalk+2006+R2+Public+Beta+Released.aspx</link>
      <pubDate>Tue, 03 Apr 2007 07:25:48 GMT</pubDate>
      <description>So now everyone gets to play...!&lt;br&gt;
Announcement is &lt;a href="http://blogs.msdn.com/biztalk_server_team_blog/archive/2007/04/03/public-beta-for-biztalk-2006-r2-has-released.aspx"&gt;here&lt;/a&gt;.&lt;br&gt;
Download it from &lt;a href="http://connect.microsoft.com/site/sitehome.aspx?SiteID=65"&gt;here&lt;/a&gt; (you'll
need to register for Microsoft Connect and/or sign in - but it's free to register).&lt;br&gt;
If you download everything, it's a 558MB download.&lt;br&gt;
&lt;br&gt;
This the Beta2 version.&lt;br&gt;
&lt;br&gt;
So download it, and go play with all the WCF goodness...&lt;br&gt;
&lt;br&gt;
What's new in R2?&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Better EDI (&lt;a href="http://en.wikipedia.org/wiki/Electronic_Data_Interchange"&gt;Electronic
Data Exchange&lt;/a&gt;) and AS2 (&lt;a href="http://en.wikipedia.org/wiki/AS2"&gt;Applicability
Statement 2&lt;/a&gt;) support&lt;/li&gt;
&lt;li&gt;
Support for RFID (&lt;a href="http://en.wikipedia.org/wiki/RFID"&gt;Radio-Frequency Identification&lt;/a&gt;)&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
New WCF Adapters&lt;/li&gt;
&lt;li&gt;
Better SharePoint integration&lt;/li&gt;
&lt;li&gt;
Supported under Vista (i.e it'll work without hacking it!)&lt;/li&gt;
&lt;li&gt;
Better integration with Office 2007&lt;/li&gt;
&lt;/ul&gt;
I'll have a play with this new Beta and blog about my findings soon.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=06f8206d-1517-4f9f-8824-7b52da2f1b55" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,06f8206d-1517-4f9f-8824-7b52da2f1b55.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=bcd51d5c-09bb-4064-8c0b-1f4d59963241</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,bcd51d5c-09bb-4064-8c0b-1f4d59963241.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,bcd51d5c-09bb-4064-8c0b-1f4d59963241.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=bcd51d5c-09bb-4064-8c0b-1f4d59963241</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">You know, I'm really sad that Lee has left
the BizTalk team.<br />
'Cause he's one of the few that can come up with gems like <a href="http://blogs.msdn.com/biztalk_core_engine/archive/2007/03/31/hidden-gem-in-biztalk-2006-r2.aspx" target="_new">this</a>:<br /><font color="#008000" size="1"><br /></font><font size="2"><font color="#008000" size="1">"As a "parting gift", I managed
to convince the team to let me add a small enhancement to persistence as long as I
did not push changes to the UI... As part of default dehydration now, the orchestration
engine also persists, in the clear, the name of the shape on which it was blocked"</font><br /><br />
How is this useful? Well if you don't know, you can't have had to debug too many orchestrations...
;-)<br />
If you have an orchestration which gets "blocked" i.e. gets dehydrated whilst waiting
for an operation to finish, or a message to arrive (or any one of the things which <a href="http://msdn2.microsoft.com/en-us/library/aa559350.aspx" target="_new">can
cause a dehydration event to occur</a>) now you can see the name of the shape at which
dehydration occurred.<br />
Previous to this, you would need to log the names of all the shapes as they executed,
or fire up orchestration debugger to see what the last shape executed was.<br /><br />
So now the race is on to develop a GUI for this...<br />
Pity <a href="http://www.gotdotnet.com/" target="_new">GotDotNet</a> is no more, as
that would have been the perfect place for it.<br /><br />
Also, note that this applies to BizTalk 2006 R2 only, so unless you're on the TAP,
you'll have to wait for the Beta or final release to use this.<br /><br /></font><br /><p></p><img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=bcd51d5c-09bb-4064-8c0b-1f4d59963241" /></body>
      <title>Finding out the last shape executed in a dehydrated orchestration</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,bcd51d5c-09bb-4064-8c0b-1f4d59963241.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/04/01/Finding+Out+The+Last+Shape+Executed+In+A+Dehydrated+Orchestration.aspx</link>
      <pubDate>Sun, 01 Apr 2007 08:23:23 GMT</pubDate>
      <description>You know, I'm really sad that Lee has left the BizTalk team.&lt;br&gt;
'Cause he's one of the few that can come up with gems like &lt;a href="http://blogs.msdn.com/biztalk_core_engine/archive/2007/03/31/hidden-gem-in-biztalk-2006-r2.aspx" target="_new"&gt;this&lt;/a&gt;:&lt;br&gt;
&lt;font color="#008000" size="1"&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#008000" size="1"&gt;"As a "parting gift", I managed
to convince the team to let me add a small enhancement to persistence as long as I
did not push changes to the UI... As part of default dehydration now, the orchestration
engine also persists, in the clear, the name of the shape on which it was blocked"&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
How is this useful? Well if you don't know, you can't have had to debug too many orchestrations...
;-)&lt;br&gt;
If you have an orchestration which gets "blocked" i.e. gets dehydrated whilst waiting
for an operation to finish, or a message to arrive (or any one of the things which &lt;a href="http://msdn2.microsoft.com/en-us/library/aa559350.aspx" target="_new"&gt;can
cause a dehydration event to occur&lt;/a&gt;) now you can see the name of the shape at which
dehydration occurred.&lt;br&gt;
Previous to this, you would need to log the names of all the shapes as they executed,
or fire up orchestration debugger to see what the last shape executed was.&lt;br&gt;
&lt;br&gt;
So now the race is on to develop a GUI for this...&lt;br&gt;
Pity &lt;a href="http://www.gotdotnet.com/" target="_new"&gt;GotDotNet&lt;/a&gt; is no more, as
that would have been the perfect place for it.&lt;br&gt;
&lt;br&gt;
Also, note that this applies to BizTalk 2006 R2 only, so unless you're on the TAP,
you'll have to wait for the Beta or final release to use this.&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=bcd51d5c-09bb-4064-8c0b-1f4d59963241" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,bcd51d5c-09bb-4064-8c0b-1f4d59963241.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=7e41d741-b4c5-4907-9fcc-8f2f0139060f</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,7e41d741-b4c5-4907-9fcc-8f2f0139060f.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,7e41d741-b4c5-4907-9fcc-8f2f0139060f.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=7e41d741-b4c5-4907-9fcc-8f2f0139060f</wfw:commentRss>
      <title>BizTalk and Certificate Revocation Lists (CRLs) - Part II</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,7e41d741-b4c5-4907-9fcc-8f2f0139060f.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/03/24/BizTalk+And+Certificate+Revocation+Lists+CRLs+Part+II.aspx</link>
      <pubDate>Sat, 24 Mar 2007 20:41:17 GMT</pubDate>
      <description>&lt;o:p&gt;&lt;/o:p&gt;
(This is the third in a series of three posts about CRLs - the first was &lt;a href="http://www.bizbert.com/bizbert/2007/03/10/Web+Services+And+The+15+Second+Delay.aspx" target="_new"&gt;Web
Services and the 15 Second Delay&lt;/a&gt;, and the second was &lt;a href="http://www.bizbert.com/bizbert/2007/03/17/BizTalk+And+Certificate+Revocation+Lists+CRLs+Part+I.aspx" target="_new"&gt;BizTalk
and Certificate Revocation Lists (CRLs) - Part I&lt;/a&gt;).&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;p class="MsoNormal"&gt;
&lt;b&gt;Note&lt;/b&gt;: A lot of the information in this post comes from a great MSDN article
located &lt;a href="http://www.microsoft.com/technet/prodtechnol/winxppro/support/tshtcrl.mspx" target="_new"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;strong&gt;Caveat&lt;/strong&gt;: My client uses 64-bit servers (AMD Opterons), running 64-bit
versions of Windows 2003 R2 and BizTalk 2006. IIS is running in &lt;a href="http://support.microsoft.com/kb/894435"&gt;32-bit
compatibility mode&lt;/a&gt;&amp;nbsp;(as we use Sharepoint). I haven't yet worked out if the
CRL problem occurs on 32-bit servers - I definitely haven't noticed the problem on
our 32-bit servers as of yet.&lt;br&gt;
&lt;br&gt;
For 2 months, my BizTalk application was working fine. The system passed performance
testing, and was deployed on the Live servers in preparation for final connectivity
testing. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Then one Monday, last week, the test team complained that they were experiencing sporadic
timeouts. On the same day, I was doing some testing on an unrelated BizTalk application
on a separate server... and I noticed that I would occasionally get request-response
latency approaching 70 secs... 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Given that the same day I'd noticed I no longer had access to iTunes Radio from that
morning (bah!), I assumed that changes had been made to our proxy sever or firewall.
I fired up TCP View on the server I was working on, and there was our old friend SYN_SENT:
something was blocking access to the CRL again. I spoke to the Tech Support team and
discovered that no changes had been made to the proxy server. Leaving them to check
for changes to our firewall and security policies, I decided to do some research into
why this delay exists (if the call is blocked) and if there was a way around it. Here's
what I discovered (refer to &lt;a href="http://www.microsoft.com/technet/prodtechnol/winxppro/support/tshtcrl.mspx" target="_new"&gt;this&lt;/a&gt; article
for a more in-depth explanation of Certificates and CRLs):&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Any given Digital Certificate contains a property called the CRL Distribution Point
which is a collection of URIs.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
When a certificate is validated, a CRL retrieval attempt is made using each URI in
the list. Retrieval stops with the first URI to return a valid CRL&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;&lt;/span&gt;When a valid CRL is obtained, it is stored in the Certificate Store for
the Local Machine (under &lt;i&gt;Certificates (Local Computer)/Intermediate Certification
Authorities/Certificate Revocation Lists&lt;/i&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;&lt;/span&gt;A CRL is a certificate in its own right and as such, it contains an expiry/update
date called the &lt;i&gt;Next Update&lt;/i&gt; date&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;&lt;/span&gt;If the CRL already exists in the Certificate Store and is still valid
then this CRL is used; otherwise an attempt is made to download an updated CRL&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
URI schemas valid for CRLs include http://, ldap://, and file:// - it is the Publisher
of the certificate who decides upon the contents of the CRL Distribution Point 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;&lt;/span&gt;In large corporations, it is common to &lt;a href="http://technet2.microsoft.com/WindowsServer/en/library/073732b5-80f0-4cf0-bc8e-d8e055ce26491033.mspx" target="_new"&gt;use
Active Directory (AD) as the provider of CRLs&lt;/a&gt;: AD can download the required CRLs
and either publish them to a master location, or distribute them to servers that need
them&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;
One thing I was curious about was this 15 second delay which kept popping up.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
The &lt;a href="http://blogs.xceedsoft.com/plantem/PermaLink,guid,3dde0262-1b7f-45d3-9a6e-164c842e422d.aspx" target="_new"&gt;Xceed
Software post&lt;/a&gt; I had read had made reference to there being a 15 second delay hard-coded
into the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa388208.aspx" target="_new"&gt;WinVerifyTrust&lt;/a&gt; API
call.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Looking through &lt;a href="http://msdn2.microsoft.com/en-us/library/aa388208.aspx" target="_new"&gt;the
documentation for WinVerifyTrust&lt;/a&gt; I noticed two things:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;span&gt;&lt;/span&gt;Microsoft recommend the use of &lt;a href="http://msdn2.microsoft.com/en-us/library/aa376078.aspx" target="_new"&gt;CertGetCertificateChain&lt;/a&gt; for
validating a certificate (instead of WinVerifyTrust)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;li&gt;
That WinVerifyTrust enumerated a registry key (&lt;i&gt;HKLM\SOFTWARE\Microsoft\Cryptography\Providers\Trust\&lt;/i&gt;)
to find out what API call to use to verify the trust of the given object&lt;o:p&gt;&lt;/o:p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="MsoNormal"&gt;
I'm not about to trace what WinVerifyTrust does to actually check the CRL, but I'd
suspect that it ends up delegating to either &lt;a href="http://msdn2.microsoft.com/en-us/library/aa376078.aspx" target="_new"&gt;CertGetCertificateChain&lt;/a&gt; or &lt;a href="http://msdn2.microsoft.com/en-us/library/aa377167.aspx" target="_new"&gt;CertVerifyRevocation&lt;/a&gt; (and
I'd bet that internally, CertGetCertificateChain calls CertVerifyRevocation to verify
the CRL for a given certificate).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Suffice to say that CertGetCertificateChain will build a chain of certificates starting
from the given certificate, and building the chain all the way up to the root CA,
and will optionally check the revocation status for each certificate in the chain;
whilst CertVerifyRevocation will verify the revocation status for a single certificate.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
And both of them take, as one of their parameters, a struct called &lt;a href="http://msdn2.microsoft.com/en-us/library/aa377524.aspx" target="_new"&gt;CERT_REVOCATION_PARA&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;br&gt;
The format of that structure is:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;font color="#808080"&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400"&gt;typedef
struct _CERT_REVOCATION_PARA {&lt;br&gt;
&amp;nbsp; DWORD cbSize;&lt;br&gt;
&amp;nbsp; PCCERT_CONTEXT pIssuerCert;&lt;br&gt;
&amp;nbsp; DWORD cCertStore;&lt;br&gt;
&amp;nbsp; HCERTSTORE* rgCertStore;&lt;br&gt;
&amp;nbsp; HCERTSTORE hCrlStore;&lt;br&gt;
&amp;nbsp; LPFILETIME pftTimeToUse;&lt;br&gt;
&amp;nbsp; DWORD dwUrlRetrievalTimeout;&lt;br&gt;
&amp;nbsp; BOOL fCheckFreshnessTime;&lt;br&gt;
&amp;nbsp; DWORD dwFreshnessTime;&lt;br&gt;
&amp;nbsp; LPFILETIME pftCurrentTime;&lt;br&gt;
&amp;nbsp; PCERT_REVOCATION_CRL_INFO pCrlInfo;&lt;br&gt;
&amp;nbsp; LPFILETIME pftCacheResync;&lt;br&gt;
&amp;nbsp; PCERT_REVOCATION_CHAIN_PARA pChainPara;&lt;br&gt;
} CERT_REVOCATION_PARA,&lt;br&gt;
&amp;nbsp;*PCERT_REVOCATION_PARA;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&lt;p class="MsoNormal"&gt;
&lt;font color="#808080" face="Courier New" size="2"&gt;&lt;/font&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Heh, look, there's a member called &lt;i&gt;dwUrlRetrievalTimeout&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Wonder if that's relevant??? ;-)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
The documentation has this to say:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;font color="#006400" face="Verdana" size="1"&gt;This member contains the time-out limit,
in milliseconds. If zero, the revocation handler's default time-out is used.&lt;/font&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
And what's the revocation handler's default time-out?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Well, Microsoft doesn't specify this directly... but I notice in a &lt;a href="http://support.microsoft.com/kb/841632"&gt;related
knowledge base post&lt;/a&gt;, that a value of 15000 milliseconds is used… i.e. 15 seconds! 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
So that's as far as we can go with that – unless IIS includes an option to configure
this timeout, then we can't change it (and they do, sort of).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Whilst researching this post, I noticed that one solution that is &lt;a href="http://digital.ni.com/public.nsf/allkb/18e25101f0839c6286256f960061b282" target="_new"&gt;frequently
touted&lt;/a&gt; is to modify the following registry key:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;font face="Verdana" size="1"&gt;HKCU\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust
Providers\Software Publishing\State&lt;/font&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
But that's not much use, as that's for the Current User (hence the HKCU). Great if
I was using my own local user account for the application pools, bad if I'm using
a non-interactive user account (which we are). Plus I'm not sure this would work for
IIS… maybe I'll try it at some stage.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
(&lt;b&gt;Note&lt;/b&gt;: looks like Microsoft are aware of this issue, because &lt;a href="http://technet2.microsoft.com/WindowsVista/en/library/771e1f29-4eba-40c9-9193-60043889bbf41033.mspx" target="_new"&gt;in
Windows Vista/Longhorn there's now a Group Policy setting&lt;/a&gt; which lets you set this
default timeout for non-interactive processes i.e. IIS App Pools!!)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
So what's the solution in this case?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Well, unless the technical support guys can work out what they changed to block CRL
access (I suspect they turned on authentication on the proxy), we have four choices:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use Active Directory to store and publish CRLs (which we should have been
doing from the start IMO)&lt;br&gt;
&lt;/strong&gt;This is Microsoft's preferred way of doing it for large customers.&lt;br&gt;
More information on configuring CRLs with AD can be found &lt;a href="http://technet2.microsoft.com/WindowsServer/en/library/073732b5-80f0-4cf0-bc8e-d8e055ce26491033.mspx"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manually download the required CRL and install it&lt;br&gt;
&lt;/strong&gt;This is my preferred solution for this particular issue, and is detailed
below.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disable CRL checking for the server&lt;br&gt;
&lt;/strong&gt;This is an interesting one. I'm not convinced that this can be done - there
are a few posts about how to do this, including one on how to do it for IIS &lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/1c48c239-b00e-496e-b560-e6aac11a3f79.mspx"&gt;here&lt;/a&gt;.&lt;br&gt;
However, this seems to be related to certificate exchange for HTTP request/responses,
as opposed to certificate validation for signed code, which is a whole different thing.
Plus, turing off certificate checking is a rather large security hole as you don't
know if a given certificate is still valid.&amp;nbsp;&lt;strong&gt;
&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/strong&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change the default CRL timeout period for CAPI&lt;br&gt;
&lt;/strong&gt;&lt;a href="http://www.bizbert.com/bizbert/content/binary/CRLCertStore.JPG"&gt;I
noticed in the Knowledge Base article for an &lt;/a&gt;&lt;a href="http://support.microsoft.com/kb/841632" target="_new"&gt;update
to IIS 5.0&lt;/a&gt; that new registry keys had been added, including allowing a value called &lt;i&gt;ChainUrlRetrievalTimeoutMilliseconds&lt;/i&gt; to
be set.&lt;o:p&gt;&lt;/o:p&gt;
&lt;p class="MsoNormal"&gt;
Then when browsing through the PKI documentation, I noticed a reference to the same
registry keys, plus a note saying "this setting was first introduced with MS04-011"
(the IIS 5.0 update linked to above).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
So it looks like it &lt;i&gt;is&lt;/i&gt; possible to set the default timeout.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
I haven't tried this, so can't verify that it works, but to me it's not the correct
solution: the CRL should be available, either from AD or the URL, or by installing
it manually – setting the timeout to a lower value seems to be just ignoring the problem,
plus creates a potential security hole as you can't be sure that the certificate used
to sign code is valid anymore.
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;o:p&gt;
&lt;strong&gt;Manually downloading and installing a CRL&lt;br&gt;
&lt;/strong&gt;
&lt;/o:p&gt;
Needless to say, I thought I'd have a go manually downloading the CRL and installing
it – and it worked a treat. Problem solved (at least until the next CRL update is
needed, which is August 2007). Still, gives us a breather to get it properly sorted.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Finding the URL to the certificate is easy: look in the certificate details for the
CRL Distribution Point, and copy the URL from there. In this case, it's the Microsoft
Code Signing Public Certification Authority CRL: &lt;a href="http://crl.microsoft.com/pki/crl/products/CodeSignPCA.crl" target="_new"&gt;http://crl.microsoft.com/pki/crl/products/CodeSignPCA.crl&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
You can put this URL in a web browser, and download the certificate.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
(&lt;b&gt;Note&lt;/b&gt;: if you're doing this in Windows Server 2003, you'll need to add crl.microsoft.com
to your list of Trusted Sites, otherwise you won't be able to download the CRL file)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Once you have the file, you can install it following the instructions &lt;a href="http://support.microsoft.com/kb/884115" target="_new"&gt;here&lt;/a&gt;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;a href="http://www.bizbert.com/bizbert/content/binary/CRLCertStore.JPG" target="new"&gt;&lt;img title="This is where your CRL Certificate should be installed (click for a larger image)" src="http://www.bizbert.com/bizbert/content/binary/CRLCertStore_Sml.JPG" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;b&gt;&lt;/b&gt;
&lt;o:p&gt;And lo and behold, the problem was fixed.&lt;br&gt;
At least, it is fixed until August 30th 2007 when the CodeSignPCA.crl expires... ;-)&lt;br&gt;But by then, I'm sure we'll have found a permanent fix!&lt;/o:p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=7e41d741-b4c5-4907-9fcc-8f2f0139060f" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,7e41d741-b4c5-4907-9fcc-8f2f0139060f.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=ef342b97-5ea5-4f65-820f-0d058a3f7b49</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,ef342b97-5ea5-4f65-820f-0d058a3f7b49.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,ef342b97-5ea5-4f65-820f-0d058a3f7b49.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=ef342b97-5ea5-4f65-820f-0d058a3f7b49</wfw:commentRss>
      <title>BizTalk and Certificate Revocation Lists (CRLs) - Part I</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,ef342b97-5ea5-4f65-820f-0d058a3f7b49.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/03/17/BizTalk+And+Certificate+Revocation+Lists+CRLs+Part+I.aspx</link>
      <pubDate>Sat, 17 Mar 2007 22:22:34 GMT</pubDate>
      <description>&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;(This post follows on from last
week's post &lt;a href="http://www.bizbert.com/bizbert/2007/03/10/Web+Services+And+The+15+Second+Delay.aspx" target="_new"&gt;Web
Services and the 15 Second Delay&lt;/a&gt;).&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;br&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Having accounted for 15 secs of
the 45 secs latency I'd been observing in my BizTalk application, I started looking
at where the additional 30 secs was coming from.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;When I looked at my log files,
I noticed the entire process from start to end (including calling external Web Services)
was now taking just over three seconds. However, when invoking the BizTalk Web Service
from a test client, the measured latency was still over 30 seconds. Something wasn't
right…&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;I put logging code in the BizTalk
Web Service around the ServerProxy.Invoke() call (the method call the submits the
received SOAP message to BizTalk).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;In my BizTalk application, the
BizTalk Web Service is used to submit a message to the MessageBox, via the SOAP Adapter
and a static request-response 
&lt;st1:place w:st="on"&gt;
&lt;st1:placename w:st="on"&gt;Receive&lt;/st1:placename&gt;
&lt;st1:placetype w:st="on"&gt;Port&lt;/st1:placetype&gt;
&lt;/st1:place&gt;
using the PassThru pipeline. There is an Orchestration which subscribes to messages
coming from this receive port, processes them, and then returns a response back to
the receive port (and therefore the Web Service). My logging code logged the time
at which the orchestration received a request message, and the time at which it sent
a response message.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;What I saw in my log files was
that there was a 15 sec delay between calling ServerProxy.Invoke(), and the orchestration
logging that it had received a request, and then &lt;i&gt;another&lt;/i&gt; 15 sec delay between
the orchestration sending a response, and the return from ServerProxy.Invoke() in
the WebService.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Interesting.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Our BizTalk Load Test environment
is composed of a single BizTalk 2006 Server, a single SQL Server, and &lt;a href="http://en.wikipedia.org/wiki/Storage_area_network" target="_new"&gt;SAN&lt;/a&gt; disk
storage. Given that everything that happens between ServerProxy.Invoke() and an orchestration
instance being started is non-user code (i.e. not my code!!), the problem was most
likely environmental i.e. network, disk, database, security or "other".&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;So my first step was to attach &lt;a href="http://msdn2.microsoft.com/en-us/library/ms173757.aspx" target="_new"&gt;SQL
Server Profiler&lt;/a&gt; and log all the database calls going between the BizTalk Server
and SQL Server.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;If you haven't used Profiler before,
be aware that it captures a huge amount of data – going through its logs can be very
very painful.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;However, in this case we're only
interested in calls that have originated from BizTalk – specifically, calls which
have originated from one of the Service Accounts that BizTalk runs under. In this
case, the service account that the Isolated host instance runs under, and the account
that my Orchestration Host's host instance runs under.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Why these two? The SOAP adapter
runs under the Isolated host, which means that it'll be this Isolated host instance
that will be putting the request into the MessageBox. And the Orchestration Host's
host instance will be the one which picks up the request from the MessageBox, and
then writes the response back the MessageBox.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;For the Orchestration Host's host
instance, finding out the service account name is easy – just look in the Services
console, find the service named something like &lt;i&gt;BizTalk Service BizTalk Group :
&amp;lt;host name&amp;gt;&lt;/i&gt;, and then note the value in the &lt;i&gt;Log On As&lt;/i&gt; column.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;For the Isolated Host's host instance,
we need to check the identity account for the Application Pool under which the BizTalk
Web Service is running (if you're using IIS 6 – if you're using IIS 5, you'd use the
service account for IIS itself, usually the &lt;a href="http://support.microsoft.com/kb/895967" target="_new"&gt;ASPNET&lt;/a&gt; account).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;So all we have to do is look for
entries in the Profile log file which have a &lt;i&gt;LoginName&lt;/i&gt; property equal to one
of these two account names. Fortunately, you can setup a filter in Profiler quite
easily – either before you run the trace (so that only events you're interested in
are captured) or after.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;I chose to capture all events
and then filtered on entries which had an &lt;i&gt;EntryClass&lt;/i&gt; of RPC:Completed, and
a &lt;i&gt;LoginName&lt;/i&gt; value of the Isolated host account name.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;(&lt;b&gt;Note&lt;/b&gt;: because I'm only
interested in the SQL statements being executed by BizTalk to call Stored Procedures,
I only need to see RPC events – none of the other events are relevant here as they
pertain to Audit events, Keep-Alive requests, or Transaction statements).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Running through the filtered log
means I only have to trawl through 300 odd lines, rather than 10,000…!&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;What I'm looking for is the time
at which the Isolated host submitted the SOAP request to the MessageBox, so I'm looking
for a call to Stored Procedure (SPROC) called &lt;a href="http://msdn2.microsoft.com/en-us/library/aa560414.aspx" target="_new"&gt;bts_InsertMessage&lt;/a&gt;:&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;a href="http://www.bizbert.com/bizbert/content/binary/SQLTrace-InsertMsg_Sml.JPG" target="_new"&gt;&lt;img title="SQL Profiler log showing the Isolated Host Instance inserting messages into the MessageBox (click to enlarge)" src="http://www.bizbert.com/bizbert/content/binary/SQLTrace-InsertMsg_Sml.JPG" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;(&lt;b&gt;Note&lt;/b&gt;: You'll notice in
the above image that just before &lt;i&gt;bts_InsertMessage&lt;/i&gt; is called, there are calls
to &lt;i&gt;bts_InsertPredicate&lt;/i&gt;_&amp;lt;&lt;i&gt;hostname&amp;gt; &lt;/i&gt;and &lt;i&gt;bts_InsertProperty&lt;/i&gt; followed
by a call to &lt;i&gt;bts_FindSubscription&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;InsertPredicate and InsertProperty
populate the MessageProps table, and FindSubscription checks whether the combination
of these predicates and properties match a current subscription – if so, &lt;i&gt;bts_InsertMessage&lt;/i&gt; is
called; if not, a "subscription not found" exception is raised).&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;So now I know at what time the
SOAP request was placed in the MessageBox: 17 seconds after ServerProxy.Invoke() was
called. Now I need to check what time the message was picked up by my Orchestration
Host's host instance.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;To do this, I filter the Profiler
log on the service account name used by the host instance.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;However, this time I'm looking
for a call to &lt;i&gt;bts_DeQueueMessages_&amp;lt;hostname&amp;gt;&lt;/i&gt; which did some work – that
is, a call which has a higher duration than the others:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;a href="http://www.bizbert.com/bizbert/content/binary/SQLTrace-DeQueueMsg.JPG" target="_new"&gt;&lt;img title="SQL Profiler log showing the Orchestration Host's Host Instance calling Dequeue Messages (click to enlarge)" src="http://www.bizbert.com/bizbert/content/binary/SQLTrace-DeQueueMsg_Sml.JPG" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;However, this doesn't clear up
the mystery – this just shows that the message was picked up by the Orchestration
Host's host instance 4 secs after being inserted by the Isolated host instance.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;And then something hits me: what
if this related to the problems I was having earlier, with the Web Service and the
CRL?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;What if "17 seconds" is really
"15 seconds plus some BizTalk processing time"?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;I started up &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;&lt;a href="http://www.microsoft.com/technet/sysinternals/Networking/TcpView.mspx" target="_new"&gt;TCP
View&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;, passed a test
message through – and sure enough, there was a CRL call with a SYN_SENT state.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Only this time, the TCP connection
was to &lt;a href="http://crl.microsoft.com/" target="_new"&gt;http://crl.microsoft.com/&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;What are the chances that the
BizTalk assemblies are digitally signed? Specifically Microsoft.BizTalk.WebServices.ServerProxy.dll,
the assembly used by BizTalk Web Services.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Let's have a look:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;a href="http://www.bizbert.com/bizbert/content/binary/BTSDigSign1.JPG" target="_new"&gt;&lt;img src="http://www.bizbert.com/bizbert/content/binary/BTSDigSign1_Sml.JPG" title="Properties for Microsoft.BizTalk.WebServices.ServerProxy.dll (click to enlarge)" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;And if we drill down into the
Certificate Details, and look at the CRL Distribution point we see:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;a href="http://www.bizbert.com/bizbert/content/binary/BTSDigSign2.JPG" target="_new"&gt;&lt;img title="Properties for the certificate showing the CDP (click to enlarge)" src="http://www.bizbert.com/bizbert/content/binary/BTSDigSign2_Sml.JPG" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;So there we are – because the
code is hosted in IIS, and is digitally signed, IIS will attempt to validate the certificate,
which involves attempting to download the CRL for the certificate.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;Unlike my Web Service, I don't
think I'd have much luck in convincing Microsoft to *not* digitally sign the BizTalk
assemblies… ;-)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;So, we set the default proxy on
the BizTalk server (using the &lt;/span&gt;&lt;i&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa384069.aspx" target="_new"&gt;proxycfg&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt; command
line tool discussed in the previous &lt;a href="http://www.bizbert.com/bizbert/2007/03/10/Web+Services+And+The+15+Second+Delay.aspx" target="_new"&gt;post&lt;/a&gt;).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;And sure enough, the delay in
the BizTalk Web Service w&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;ent
away.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;The 45 secs latency dropped to
2 secs… and then dropped to 0.5 secs once I did some low-latency tuning.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;So there we go. Now the only r&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;eason
my client has this issue is because they don't want to have separate BizTalk servers
which just run the BizTalk Web Services (i.e. dedicated BizTalk Servers, most likely
in a DMZ, which don't do anything but put received SOAP messages in the MessageBox
– all the other BizTalk servers would be behind the firewalls and in the secure portion
of the network – this is Microsoft's recommended way of doing it, but is costlier
in terms of licensing).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;We decided we could live with
the Load Test server having access to the internet via a proxy server, so applied
this change to all our BizTalk servers (both Live and Test).&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=ef342b97-5ea5-4f65-820f-0d058a3f7b49" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,ef342b97-5ea5-4f65-820f-0d058a3f7b49.aspx</comments>
      <category>BizTalk General</category>
    </item>
    <item>
      <trackback:ping>http://www.bizbert.com/bizbert/Trackback.aspx?guid=b51fe72f-2d73-4d02-bcd9-3b7165ec474d</trackback:ping>
      <pingback:server>http://www.bizbert.com/bizbert/pingback.aspx</pingback:server>
      <pingback:target>http://www.bizbert.com/bizbert/PermaLink,guid,b51fe72f-2d73-4d02-bcd9-3b7165ec474d.aspx</pingback:target>
      <dc:creator>Daniel Probert</dc:creator>
      <wfw:comment>http://www.bizbert.com/bizbert/CommentView,guid,b51fe72f-2d73-4d02-bcd9-3b7165ec474d.aspx</wfw:comment>
      <wfw:commentRss>http://www.bizbert.com/bizbert/SyndicationService.asmx/GetEntryCommentsRss?guid=b51fe72f-2d73-4d02-bcd9-3b7165ec474d</wfw:commentRss>
      <title>Web Services and the 15 Second Delay</title>
      <guid isPermaLink="false">http://www.bizbert.com/bizbert/PermaLink,guid,b51fe72f-2d73-4d02-bcd9-3b7165ec474d.aspx</guid>
      <link>http://www.bizbert.com/bizbert/2007/03/10/Web+Services+And+The+15+Second+Delay.aspx</link>
      <pubDate>Sat, 10 Mar 2007 12:01:13 GMT</pubDate>
      <description>&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Background: The large(ish)
BizTalk system I've been working on for the last few months consumes a few external
Web Services. Whilst doing some early performance tuning, I noticed that I was getting
pretty serious request-response latency from the primary BizTalk Web Service... Like
over 45 secs, instead of the expected 0.5 – 2 secs... 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Fortunately, I routinely
put tracing/audit calls in my BizTalk code which includes timing info - and I &lt;i style=""&gt;always&lt;/i&gt; log
the times around orchestration entry/exit... So I was quite surprised to see that
a request to one of the external Web Services was taking 15secs to respond... especially
as the web service was hosted (temporarily) on the same server... 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Although I didn't
have the source code, with the help of Lutz Roeder's trusty &lt;a href="http://www.aisto.com/roeder/dotnet/" target="_new"&gt;.NET
Reflector&lt;/a&gt; I was poking around the innards within minutes… and couldn't find anything
that would cause a delay of 15 secs. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;What's more, after
further testing I found that the problem only occurred the first time after IIS was
restarted. After the first time, it would return within 2 secs (still not very good,
but much better). One thing I noticed about the Web Service was that it made use of
some code in an unmanaged assembly (old school &lt;a href="http://en.wikipedia.org/wiki/C++" target="_new"&gt;C++&lt;/a&gt; DLL)... 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;On a hunch, I wrote
a simple test Web Service which simply referenced some functions in the DLL (using
the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx" target="_new"&gt;DllImport&lt;/a&gt; attribute)...
and bang, a 15 sec delay before the Web Service constructor was called.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;I also tried the
same trick in a console app... and there was no delay.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;By this time I was
fairly stumped. This issue only happened on our Load Test server: it didn't happen
on the Dev or Test servers. And it seemed to only happen to code hosted under IIS.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;I figured it was
time to dig a bit deeper and see what IIS was doing: starting up &lt;a href="http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/processmonitor.mspx" target="_new"&gt;Process
Monitor&lt;/a&gt; (to monitor file and registry access) and &lt;a href="http://www.microsoft.com/technet/sysinternals/Networking/TcpView.mspx" target="_new"&gt;TCP
View&lt;/a&gt; (to monitor network activity), I called my test Web Service.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Filtering the Process
Monitor logs to the &lt;i style=""&gt;w3wp.exe&lt;/i&gt; process (the IIS Worker Process for Application
Pools) I noticed that w3wp was reading a lot of security and cryptography keys from
the registry:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;a href="http://www.bizbert.com/bizbert/content/binary/ProcMon_Screenshot.JPG" target="_new"&gt;&lt;img src="http://www.bizbert.com/bizbert/content/binary/ProcMon_Screenshot_Sml1.JPG" title="Process Monitor screenshot showing Cryptography API registry keys being read by IIS (click to enlarge)" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Hmm. Interesting.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Then I looked at
the TCP View log. And I noticed something very interesting coming from the w3wp process:
a connection was being attempted to &lt;a href="http://crl.versign.com/" target="_new"&gt;http://crl.versign.com&lt;/a&gt; and
was being blocked.&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;How do I know it
was being blocked? Well, the TCP View log showed a SYN_SENT, which appeared and was
visible for 15 secs before disappearing:&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;a href="" target="_new"&gt;&lt;img src="http://www.bizbert.com/bizbert/content/binary/TCPView_Screenshot_sml1.JPG" title="TCPView screenshot showing access to crl.microsoft.com being blocked (click to enlarge)" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Now if you're not
familiar with how &lt;a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol" target="_new"&gt;TCP
works&lt;/a&gt;, then you migh&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;t
miss the significance of this: When a TCP client attempts to contact a TCP server,
the first thing performed is a handshake. This involves the client sending a SYN,
the server responding with a SYN-ACK, and the client sending a SYN-A&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;CK-ACK.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;In the TCP View tool,
the rightmost column indicates the state of the local TCP connection end-point. You'll
see that in this case, the state is SYN_SENT: this state indicates that the local
TCP client is waiting for a SYN-ACK response from the SYN it sent.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Why would this be?
Well, many reasons, but mostly because the address can't be reached e.g. a proxy server
is required, or a firewall rule is blocking the call.&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;And what's the relevance
of crl.verisign.com? A CRL (Certificate Revocation List) is used to indicate which
Certificates (issued by a Certificate Authority) are no longer valid.&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;And this is only
done when you are using an assembly which has been digitally signed.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;(&lt;b style=""&gt;Note&lt;/b&gt;:
Microsoft became really really serious about CRL's back in 2001 when &lt;a href="http://support.microsoft.com/?id=293817" target="_new"&gt;VeriSign
accidentally released two Microsoft certificates&lt;/a&gt; to a third party – which meant
that the third party could sign code that appeared to have come from Microsoft).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;So what does this
have to do w&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;ith
my Web Service and a 15&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt; second
delay?&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Looking through the
assemblies in the Web Service, I noticed that the unmanaged assembly was digitally
signed. Aha! So when the unmanaged assembly was referenced in a Web Service, IIS would
hand off control to the Windows Cryptography API (CAPI) and ask it to verify the certificate.
And this involves retrieving a CRL for the certificate.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;After doing some
more poki&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;ng
around, I found &lt;a href="http://blogs.xceedsoft.com/plantem/PermaLink,guid,3dde0262-1b7f-45d3-9a6e-164c842e422d.aspx" target="_new"&gt;this&lt;/a&gt; blog
post (from one of the developers at &lt;a href="http://xceed.com/" target="_new"&gt;Xceed
Software&lt;/a&gt;, a company specializing in .NET components).&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;The thing that drew
my attention was this comment:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 8.5pt; font-family: Verdana;" lang="EN-US"&gt;Some people behind
a very strict firewall, ignoring outgoing connections instead of rejecting them, had
a timeout while loading our assemblies. That timeout (at least 15 seconds) is hardcoded
in WinVerifyTrust!&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;st1:city w:st="on"&gt;
&lt;st1:place w:st="on"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Eureka&lt;/span&gt;
&lt;/st1:place&gt;
&lt;/st1:city&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;! That's exactly
my problem!&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;And it explained
why it was only happening on our Load Test server: Our Dev and Test servers have access
to the internet, whilst the Load Test server does not: it has no proxy server configured.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;To test this theory,
I configured the Load Test server to use a proxy server. If you haven't done this
before, you can't do it via Internet Explorer settings – that only configures a proxy
for application which go via &lt;i style=""&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa385331.aspx" target="_new"&gt;wininet.dll&lt;/a&gt;&lt;/i&gt; i.e.
the Internet Explorer API, which uses the proxy server settings in the &lt;i style=""&gt;Internet
Explorer/Internet Options/Connections/LAN Settings&lt;/i&gt; panel.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;CAPI, however, uses &lt;i style=""&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa384273.aspx" target="_new"&gt;winhttp.dll&lt;/a&gt; &lt;/i&gt;(Microsoft
Windows HTTP Services). And to set the proxy server for that, you need to use the &lt;i style=""&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa384069.aspx" target="_new"&gt;proxycfg&lt;/a&gt;&lt;/i&gt; command
line tool which sets proxy server set&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;tings
for winhttp.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;If you run &lt;i style=""&gt;proxycfg
–u&lt;/i&gt;, this w&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;ill
i&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;mport your
Internet Explorer proxy server settings:&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;a href="" target="_new"&gt;&lt;img src="http://www.bizbert.com/bizbert/content/binary/proxycfg_sml.JPG" title="How to use ProxyCFG to import ProxyServer settings from Internet Explorer (click to enlarge)" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;So I did this, restarted
IIS and presto! The pr&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;oblem
went away.&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;However, giving the
Load Test server access to the Internet is a fairly large security hole (at least
it is in our network, where the Load test server is behind both the firewal&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;l
and DMZ).&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;So, we contacted
the vendor who supplied the unmanaged DLL, and managed to get them to release a new
version which wasn't digitally signed. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Which solved the&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt; problem
of the latency in the Web Service (which accounted for 15 secs of the 45 secs latency).&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;Solving the remaining
30 secs latency is the subject of next week's post.&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height: 12pt;"&gt;
&lt;span style="font-size: 10pt; font-family: Tahoma;" lang="EN-US"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.bizbert.com/bizbert/aggbug.ashx?id=b51fe72f-2d73-4d02-bcd9-3b7165ec474d" /&gt;</description>
      <comments>http://www.bizbert.com/bizbert/CommentView,guid,b51fe72f-2d73-4d02-bcd9-3b7165ec474d.aspx</comments>
      <category>BizTalk General</category>
      <category>Web Services</category>
    </item>
  </channel>
</rss>