<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Abhilash M S</title><subtitle type="html">Rants and Raves on Biztalk Server 2004  and 2006 </subtitle><id>http://bloggingabout.net/blogs/abhilash/atom.aspx</id><link rel="alternate" type="text/html" href="http://bloggingabout.net/blogs/abhilash/default.aspx" /><link rel="self" type="application/atom+xml" href="http://bloggingabout.net/blogs/abhilash/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.40407.4157">Community Server</generator><updated>2005-06-22T17:42:00Z</updated><entry><title>Introduction to Functoids</title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2006/03/28/11837.aspx" /><id>/blogs/abhilash/archive/2006/03/28/11837.aspx</id><published>2006-03-28T04:40:00Z</published><updated>2006-03-28T04:40:00Z</updated><content type="html">&lt;h2&gt;Introduction to Functoids&lt;/h2&gt;
&lt;p&gt;I am sure you have heard about functions, but what about functoids? Functoids or BizTalk functoids are, in a way, small reusable functions that you build just like functions. These are like operations that you need to perform specific tasks on data. BizTalk comes with a good collection of readymade functoids. But you will frequently face situations where you desire a simple functionality. Let us say, you want to validate a credit card number, it will be great if we can build a functoid which can take in a credit card number and credit card type, and return true or false. This will be a very good scenario for writing a functoid of your own.&lt;/p&gt;
&lt;h2&gt;Scenario&lt;/h2&gt;
&lt;p&gt;As a learning exercise, I suggest building a functoid which calculates the perimeter of a rectangle for a fencing company. The logic of the functoid implementation is really concise:&lt;/p&gt;
&lt;pre&gt;2   x (length + breadth)&lt;/pre&gt;
&lt;h2&gt;A Bird's Eye View of the Steps&lt;/h2&gt;
&lt;p&gt;To create a BizTalk functoid, we need to briefly do the following:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Derive our functoid from &lt;code&gt;Microsoft.BizTalk.BaseFunctoids&lt;/code&gt;. &lt;/li&gt;
    &lt;li&gt;Give it all resource strings like function name, function bitmaps to be displayed in the mapper, tool tip text, and description. &lt;/li&gt;
    &lt;li&gt;Give it a unique GUID and a functoid ID. &lt;/li&gt;
    &lt;li&gt;Specify what category the functoid belongs to (Math, Logical, String etc..). &lt;/li&gt;
    &lt;li&gt;Specify input and output parameters. &lt;/li&gt;
    &lt;li&gt;Specify the input and output connection types. &lt;/li&gt;
    &lt;li&gt;Specify the function to call. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting Down to Business ..&lt;/h2&gt;
&lt;p&gt;I have broken down the activity into a series of logical steps.&lt;/p&gt;
&lt;h3&gt;Step 1: Creating your functoid project&lt;/h3&gt;
&lt;p&gt;You need to create a functoid as a class library. So we need to select a class library project to begin. Make sure you give a proper namespace name for it as we will need this to load the functoid later, using Reflection. We will use &lt;code&gt;Custom.Biztalk.MathFunctoid&lt;/code&gt; as the namespase in our example:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img height="371" alt="sample screenshot" src="http://www.codeproject.com/dotnet/CustomFunctoid/Projectype.JPG" width="531" /&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Signing the DLL with a key&lt;/h3&gt;
&lt;p&gt;You need to have a strong name for this assembly to get it loaded into the toolbox. So create a strong name and sign it:&lt;/p&gt;
&lt;pre&gt;C:\Samples\MathFunctoid &amp;gt; sn   -k mathFunctoid.snk&lt;/pre&gt;
&lt;p&gt;Once you have the strong key generated, insert the line below to the &lt;i&gt;AssemblyInfo.cs&lt;/i&gt;:&lt;/p&gt;
&lt;pre&gt;[assembly: AssemblyKeyFile(&lt;span class="cpp-string"&gt;&amp;quot;..\\..\\mathFunctoid.snk&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;h3&gt;Step 3: Give a unique ID for this assembly&lt;/h3&gt;
&lt;p&gt;We need to give a unique ID for this assembly. Using GUIDGEN from the Visual Studio prompt, generate a new GUID and add the following to the &lt;i&gt;AssemblyInfo.cs&lt;/i&gt;:&lt;/p&gt;
&lt;pre&gt;[assembly: Guid(&lt;span class="cpp-string"&gt;&amp;quot;5DE500CC-45BC-454b-A23D-24449899042C&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;
&lt;h3&gt;Step 4: Add the class skeleton&lt;/h3&gt;
&lt;p&gt;We need to have a class to implement this functionality, so add a class and call it &lt;code&gt;CPerimeter&lt;/code&gt; &lt;i&gt;(or any meaningful name of your choice)&lt;/i&gt;:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img height="399" alt="screenshot" src="http://www.codeproject.com/dotnet/CustomFunctoid/addClass.JPG" width="531" /&gt;&lt;/p&gt;
&lt;p&gt;Once the class is added, add the following lines in the namespace inclusion section at the top of your class file:&lt;/p&gt;
&lt;pre&gt;&lt;span class="cs-keyword"&gt;using&lt;/span&gt; Microsoft.BizTalk.BaseFunctoids;
&lt;span class="cs-keyword"&gt;using&lt;/span&gt; System.Reflection;
&lt;span class="cs-keyword"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="cs-keyword"&gt;using&lt;/span&gt; System.Resources;&lt;/pre&gt;
&lt;h3&gt;Step 6: Add references to BizTalk base functoids&lt;/h3&gt;
&lt;p&gt;In the project references, add a reference to &lt;i&gt;Microsoft.BizTalk.BaseFunctoids.dll&lt;/i&gt;. This DLL implements all the base classes we need to create a functoid.&lt;/p&gt;
&lt;h3&gt;Step 7: Add a resource file&lt;/h3&gt;
&lt;p&gt;In Visual Studio, go to File-&amp;gt;Add New Item-&amp;gt;Resource File.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img height="380" alt="screenshot" src="http://www.codeproject.com/dotnet/CustomFunctoid/addResourceMap.JPG" width="600" /&gt;&lt;/p&gt;
&lt;p&gt;I named the resource file &lt;i&gt;Mathresource.resx&lt;/i&gt; for this example. Now, add the following resource strings and specify their custom descriptions:&lt;/p&gt;
&lt;table id="table1" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;Resource ID&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;Value&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;Explanation&lt;/b&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;code&gt;IDS_CONVERTINTFUNCTOID_ID&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;6123&lt;/td&gt;
            &lt;td&gt;A value greater than 6000 &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;code&gt;IDS_FUNCTOID_NAME&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&amp;ldquo;Perimeter&amp;rdquo;&lt;/td&gt;
            &lt;td&gt;The functoid description in toolbox&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;code&gt;IDS_MATHFUNCTOID_TOOLTIP&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&amp;ldquo;Calculates the perimeter of a rectangle&amp;rdquo;&lt;/td&gt;
            &lt;td&gt;What appears on the tool tip&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;code&gt;IDS_MATH_DESCRIPTION&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&amp;ldquo;Calculates the perimeter&amp;rdquo;&lt;/td&gt;
            &lt;td&gt;Description of functoid in VS&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;code&gt;IDS_PERIMETERFUNCTOID_EXCEPTION&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&amp;quot;Perimeter functoid threw an exception&amp;quot;&lt;/td&gt;
            &lt;td&gt;Description of exception to the Biztalk subsystem&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Now, create a 16 x 16 bitmap and add that to the resource file, and reference it as &lt;code&gt;IDS_MATH_BITMAP&lt;/code&gt; using the Resource Editor.&lt;/p&gt;
&lt;h3&gt;Step 8: Implement the class&lt;/h3&gt;
&lt;p&gt;To implement this class, we derive our class from &lt;code&gt;BaseFunctoid&lt;/code&gt;. And in the class, we load the resource file, and set the different parameters like functoid name, tool tip text, and parameters for the functoid.&lt;/p&gt;
&lt;pre&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;class&lt;/span&gt; CPerimeter : BaseFunctoid
{
&lt;span class="cs-keyword"&gt;static&lt;/span&gt; ResourceManager resmgr = &lt;span class="cs-keyword"&gt;new&lt;/span&gt;
ResourceManager(&lt;span class="cpp-string"&gt;&amp;quot;Custom.Biztalk.MathFunctoid&amp;quot;&lt;/span&gt; +
&lt;span class="cpp-string"&gt;&amp;quot;.MathResource&amp;quot;&lt;/span&gt;, Assembly.GetExecutingAssembly());
&lt;span class="cs-keyword"&gt;public&lt;/span&gt; CPerimeter():&lt;span class="cs-keyword"&gt;base&lt;/span&gt;()
{
&lt;span class="cs-keyword"&gt;int&lt;/span&gt; functoidID;
functoidID = System.Convert.ToInt32(
resmgr.GetString(&lt;span class="cpp-string"&gt;&amp;quot;IDS_CONVERTINTFUNCTOID_ID&amp;quot;&lt;/span&gt;));
&lt;span class="cs-keyword"&gt;this&lt;/span&gt;.ID = functoidID;
&lt;span class="cs-comment"&gt;// This has to be a number greater than 6000&lt;/span&gt;
SetupResourceAssembly(&lt;span class="cpp-string"&gt;&amp;quot;Custom.Biztalk.MathFunctoid&amp;quot;&lt;/span&gt; +
&lt;span class="cpp-string"&gt;&amp;quot;.MathResource&amp;quot;&lt;/span&gt;, Assembly.GetExecutingAssembly());
&lt;span class="cs-comment"&gt;//Set Resource strings , bitmaps&lt;/span&gt;
SetName(&lt;span class="cpp-string"&gt;&amp;quot;IDS_FUNCTOID_NAME&amp;quot;&lt;/span&gt;);
SetTooltip(&lt;span class="cpp-string"&gt;&amp;quot;IDS_MATHFUNCTOID_TOOLTIP&amp;quot;&lt;/span&gt;);
SetDescription(&lt;span class="cpp-string"&gt;&amp;quot;IDS_MATH_DESCRIPTION&amp;quot;&lt;/span&gt;);
SetBitmap(&lt;span class="cpp-string"&gt;&amp;quot;IDS_MATH_BITMAP&amp;quot;&lt;/span&gt;);
&lt;span class="cs-comment"&gt;// Minimum and maximum parameters&lt;/span&gt;
&lt;span class="cs-comment"&gt;// that the  functoid accepts &lt;/span&gt;
&lt;span class="cs-keyword"&gt;this&lt;/span&gt;.SetMinParams(&lt;span class="cs-literal"&gt;2&lt;/span&gt;);
&lt;span class="cs-keyword"&gt;this&lt;/span&gt;.SetMaxParams(&lt;span class="cs-literal"&gt;2&lt;/span&gt;);
&lt;span class="cs-comment"&gt;/// Function name that needs to be&lt;/span&gt;
&lt;span class="cs-comment"&gt;/// called when this Functoid is invoked.&lt;/span&gt;
&lt;span class="cs-comment"&gt;/// Put this in GAC                    &lt;/span&gt;
SetExternalFunctionName(GetType().Assembly.FullName,
&lt;span class="cpp-string"&gt;&amp;quot;Custom.Biztalk.MathFunctoid.CPerimeter&amp;quot;&lt;/span&gt;,
&lt;span class="cpp-string"&gt;&amp;quot;CalcPerimeter&amp;quot;&lt;/span&gt;);
&lt;span class="cs-comment"&gt;//Category for this functoid.&lt;/span&gt;
&lt;span class="cs-keyword"&gt;this&lt;/span&gt;.Category = FunctoidCategory.Math;
&lt;span class="cs-comment"&gt;//Input and output Connection type&lt;/span&gt;
&lt;span class="cs-keyword"&gt;this&lt;/span&gt;.OutputConnectionType =
ConnectionType.AllExceptRecord ;
AddInputConnectionType(ConnectionType.AllExceptRecord);
}
}&lt;/pre&gt;
&lt;h3&gt;Step 9: Implement the function logic&lt;/h3&gt;
&lt;p&gt;Now, we implement the functoid logic for the function name specified in the above step, using &lt;code&gt;SetExternalFunctionName&lt;/code&gt;. The code below trims the incoming values. This is done because in XML, string data that are numerals could contain white spaces.&lt;/p&gt;
&lt;pre&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;string&lt;/span&gt; CalcPerimeter(&lt;span class="cs-keyword"&gt;string&lt;/span&gt; RectangleLength,
&lt;span class="cs-keyword"&gt;string&lt;/span&gt; RectangleBreadth)
{
&lt;span class="cs-keyword"&gt;int&lt;/span&gt; ilength = &lt;span class="cs-literal"&gt;0&lt;/span&gt;;
&lt;span class="cs-keyword"&gt;int&lt;/span&gt; ibreadth = &lt;span class="cs-literal"&gt;0&lt;/span&gt;;
&lt;span class="cs-keyword"&gt;int&lt;/span&gt; iPerimeter = &lt;span class="cs-literal"&gt;0&lt;/span&gt;;
ResourceManager resmgr = &lt;span class="cs-keyword"&gt;new&lt;/span&gt; ResourceManager(&lt;span class="cpp-string"&gt;&amp;quot;Custom.&amp;quot;&lt;/span&gt; +
&lt;span class="cpp-string"&gt;&amp;quot;Biztalk.MathFunctoid.MathResource&amp;quot;&lt;/span&gt;,
Assembly.GetExecutingAssembly());
&lt;span class="cs-comment"&gt;//Remove whitespace&lt;/span&gt;
RectangleLength = RectangleLength.Trim();
RectangleBreadth = RectangleBreadth.Trim();
&lt;span class="cs-keyword"&gt;if&lt;/span&gt; ( IsNumeric(RectangleLength) &amp;amp;&amp;amp; IsNumeric(RectangleBreadth) )
{
&lt;span class="cs-keyword"&gt;try&lt;/span&gt;
{
ilength = Convert.ToInt32(RectangleLength,
System.Globalization.CultureInfo.InvariantCulture);
ibreadth = Convert.ToInt32(RectangleBreadth,
System.Globalization.CultureInfo.InvariantCulture);
iPerimeter = &lt;span class="cs-literal"&gt;2&lt;/span&gt;  * (ilength + ibreadth);
}
&lt;span class="cs-keyword"&gt;catch&lt;/span&gt;
{
&lt;span class="cs-keyword"&gt;throw&lt;/span&gt; &lt;span class="cs-keyword"&gt;new&lt;/span&gt; Exception(&lt;span class="cs-keyword"&gt;string&lt;/span&gt;.Format(resmgr.GetString(
&lt;span class="cpp-string"&gt;&amp;quot;IDS_PERIMETERFUNCTOID_EXCEPTION&amp;quot;&lt;/span&gt;),
RectangleLength +  &lt;span class="cpp-string"&gt;&amp;quot; &amp;quot;&lt;/span&gt;  +
RectangleBreadth));
}
}
&lt;span class="cs-keyword"&gt;return&lt;/span&gt; iPerimeter.ToString() ;
}&lt;/pre&gt;
&lt;h3&gt;Step 10: Compile and Deploy&lt;/h3&gt;
&lt;p&gt;You are now ready to build and deploy your functoid. Once it is built, copy the &lt;i&gt;Custom.Biztalk.MathFunctoid.dll&lt;/i&gt; to &lt;i&gt;Drive:\Program Files\Microsoft BizTalk Server 2004\Developer Tools\Mapper Extensions&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Now, make the DLL available in the GAC, using the following command line operation:&lt;/p&gt;
&lt;pre&gt;C:\&amp;gt; gacutil /if Copy the Custom.Biztalk.MathFunctoid.dll&lt;/pre&gt;
&lt;h3&gt;Step 11: Adding the functoid to the ToolBox&lt;/h3&gt;
&lt;p&gt;Open a BizTalk project and go to toolbox, and then right click on the toolbox. Go to Add/Remove items, select the Functoids tab, and browse to &lt;i&gt;Custom.Biztalk.MathFunctoid.dll&lt;/i&gt; in the mapper extension folder, and check it.&lt;/p&gt;
&lt;p&gt;You should now see your functoid in the toolbox under the list of Mathematical functoids &lt;i&gt;(because we set the category as Math, remember?)&lt;/i&gt;.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img height="408" alt="sample image" src="http://www.codeproject.com/dotnet/CustomFunctoid/addingfunctoidtotoolbox.JPG" width="571" /&gt;&lt;/p&gt;
&lt;h3&gt;Step 12: Take a deep breath!&lt;/h3&gt;
&lt;p&gt;Congrats, you just finished your first custom BizTalk functoid and I am sure it wont be your last!&lt;/p&gt;
&lt;h2&gt;Points of Interest&lt;/h2&gt;
&lt;h3&gt;Testing the functoid&lt;/h3&gt;
&lt;p&gt;I have included a small map to test the functoid. You can download this project in the source available for download at the top of this article. It is titled &lt;i&gt;customFunctoid Map&lt;/i&gt;.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img height="432" alt="sample image" src="http://www.codeproject.com/dotnet/CustomFunctoid/functoidUsage.JPG" width="600" /&gt;&lt;/p&gt;
&lt;h3&gt;Gotcha's&lt;/h3&gt;
&lt;p&gt;You cannot insert a bitmap directly into the resource editor, you will have to use ResEditor to do it. The ResEditor can be found here: &lt;i&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Samples\Tutorials\resourcesandlocalization\reseditor&lt;/i&gt;.&lt;/p&gt;
&lt;h3&gt;Exceptions&lt;/h3&gt;
&lt;p&gt;You might get an exception that the functoid was not found.&lt;/p&gt;
&lt;pre&gt;Exception Caught: Functoid not found:
guid({5DE500CC-45BC-454b-A23D-24449899042C})  funcid(6123)&lt;/pre&gt;
&lt;p&gt;This happens when you GAC the DLL but forget to copy it to the mapper extension folder.&lt;/p&gt;
&lt;h2&gt;History&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Version 1.0 - January 22, 2006. published on Code project &lt;/li&gt;
    &lt;li&gt;Posted here on March 28 2006 &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=11837" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>BTSDeploy Error with property Schema</title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2006/03/08/11593.aspx" /><id>/blogs/abhilash/archive/2006/03/08/11593.aspx</id><published>2006-03-08T18:15:00Z</published><updated>2006-03-08T18:15:00Z</updated><content type="html">&lt;p&gt;We recently had a problem with a Biztalk property schema deployment .&lt;/p&gt;
&lt;p&gt;When we tried to deploy the schema , We came across this error and had to spend some time trying to debug this one. &lt;/p&gt;
&lt;p&gt;The error you get would be a variation of the one below &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Property &amp;quot;ns0:Your_Promoted_Property&amp;quot; (msgType=&amp;quot;YourSchema#RootNode&amp;quot;) not found in Configuration database.&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quick Solution&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Delete the Node which it is complaining from the property schema and recreate it again &lt;/p&gt;
&lt;p&gt;Reasoning &lt;/p&gt;
&lt;p&gt;What was odd on our case was this same DLL was deploying in vertain machine but not on some other ones. &lt;/p&gt;
&lt;p&gt;After aome amount of gogling I tried to think about the error for some time and this was my line of reasoning . The&amp;nbsp; deployment was complaining about a promoted property not available in the configuration database . This was a bit weird because the property that Biztalk was complaining about was contained in the same Assembly. &lt;/p&gt;
&lt;p&gt;But once I realized that somewhere in the deployment process the properties that were being promoted were first stored into SQL tables for eventual usage in CBR scenario . I realized that this insertion would be failing .&amp;nbsp; The only reason this could be failing is if the variable already existed. &lt;/p&gt;
&lt;p&gt;Since Biztalk being a Globalized product I figured the names would not be used as it is but rather some unique value a Identity&amp;nbsp; or GUID . So I went ahead and changed the guid value of all the properties that it was complaining , I had edited the XML for this values . (You can delete and recreate the Node if you are not comfortable ) .&lt;/p&gt;
&lt;p&gt;Then I rebuilt and it deployed like a charm ! &lt;/p&gt;
&lt;p&gt;PS: What had happened is one of our Dev's had copied the property schema from another project and changed the namespace and the field name of certain fileds. &lt;/p&gt;
&lt;p&gt;This worked on certain machines without problems because these devemachines did not have the solution&amp;nbsp; from which the property schema was copied deployed on them . Wheras we had this prior solution deployed on our servers. &lt;/p&gt;
&lt;p&gt;So I guess Copy-Paste fanatics take care. ! &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=11593" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>My Articles on CodeProject </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2006/02/24/11162.aspx" /><id>/blogs/abhilash/archive/2006/02/24/11162.aspx</id><published>2006-02-24T09:17:00Z</published><updated>2006-02-24T09:17:00Z</updated><content type="html">&lt;p&gt;Been posting some articles on Codeproject&amp;nbsp; lately . &lt;/p&gt;
&lt;p&gt;Check them out &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.codeproject.com/script/Articles/list_articles.asp?userid=1913507"&gt;http://www.codeproject.com/script/Articles/list_articles.asp?userid=1913507 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Would love to hear your comments on the articles here . &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=11162" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Biztalk Server Podcasts</title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2006/02/23/11151.aspx" /><id>/blogs/abhilash/archive/2006/02/23/11151.aspx</id><published>2006-02-22T20:18:00Z</published><updated>2006-02-22T20:18:00Z</updated><content type="html">&lt;p&gt;Listen to Biztalk Server Podcasts from Scott where he talks about Enterprise Service Bus and Windows Workflow Foundation . &lt;/p&gt;
&lt;p&gt;Scott answers lot of intersting question here .. like how did he become product manager of Biztalk 2000 code named Latinum .&lt;/p&gt;
&lt;p&gt;&amp;nbsp;While on code names these are the list so far.. &lt;/p&gt;
&lt;p&gt;Latinum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BizTalk 2000 &lt;br /&gt;
Bizet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BizTalk 2002&lt;br /&gt;
Voyager&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BizTalk 2004 &lt;br /&gt;
Pathfinder&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Biztalk 2006 &lt;br /&gt;
Avalon&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Windows WorkFlow Foundation(WF) &lt;br /&gt;
???&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Biztalk 2008 &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Now that Biztalk Server 2006 is out there and after having seen the demo of Windows Workflow Foundation (WF ) at PDC lot of us are asking what will be future of Biztalk Server 2008 ? . Scott speaks out that the design surface of workflow for WF and BTS was built by the same team and the similarities end there .Biztalk would still be needed to solve problmes of EAI, BPM ,B2B, Adaptor management . Scott also mentions that the workflow for Biztalk 2008 would most probanly share the workflow piece with WF and there would be a upgrade to current customers. This also make me believer the news I heard about the Biztalk and Indigo team at Microsoft got merged into one group . Listen to the &lt;a href="http://casting.dlservice.microsoft.com/download/7/9/D/79D7C921-978A-4684-9746-2AECDB7413AE/BizTalk_1_Final_W-Music_48k.wma"&gt;Biztalk Server Podcasts here...&lt;/a&gt; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=11151" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Reset Biztalk Passwords </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2006/01/13/10776.aspx" /><id>/blogs/abhilash/archive/2006/01/13/10776.aspx</id><published>2006-01-12T20:41:00Z</published><updated>2006-01-12T20:41:00Z</updated><content type="html">&lt;p&gt;Well we have our enterprise password Resets that happen every 45 days ;Our production servers have passwords that never expire. This causes Havoc to my local biztlak server installation. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;THIS information &lt;u&gt;Applies&lt;/u&gt;&amp;nbsp; if you have NOT backed up your master secret &lt;br /&gt;
( Thanks&amp;nbsp; Patrick for pointing out this ) . &lt;br /&gt;
i&lt;/em&gt;&lt;em&gt;f you have&amp;nbsp;&amp;nbsp; in C:\Program Files\Common Files\Enterprise Single Sign-On&lt;br /&gt;
&amp;gt;ssoconfig.exe -restoresecret&amp;nbsp;&amp;nbsp; YouBTSSSOBackupfile&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So one day when that password box reaches 2 days to expire you reset that password and suddenly you discover that your biztalk service is not running. &lt;br /&gt;
&lt;br /&gt;
First - Dont Panic ! &lt;br /&gt;
&lt;br /&gt;
ok Now you are not panicking :-) &lt;br /&gt;
so these are the places you need to reset&lt;br /&gt;
&lt;br /&gt;
Goto -&amp;gt;Start-&amp;gt;Run-&amp;gt; Services.msc &lt;br /&gt;
and update the password for the following &lt;br /&gt;
&lt;br /&gt;
BizTalk Base EDI service &lt;br /&gt;
BiztalkServer Application&lt;br /&gt;
Enterprise Single Sign-On Service &lt;br /&gt;
MSSQLSERVER &lt;br /&gt;
Rule Engine Update Service &lt;br /&gt;
SQLSERVERAGENT&lt;br /&gt;
&lt;br /&gt;
Next Open Biztalk Administrator and change passwords for &lt;br /&gt;
&lt;br /&gt;
BizTalk Host Instance Account&lt;br /&gt;
BizTalk Isolated Host Instance Account ( In case you set it up same which is not the recommendation btw ) &lt;br /&gt;
&lt;br /&gt;
Next Open IIS Manager &lt;br /&gt;
Goto -&amp;gt;Start-&amp;gt;Run-&amp;gt; inetmgr.msc -&amp;gt;Application pools-&amp;gt;Properties -&amp;gt;Identities&lt;br /&gt;
and change the password for all the onee below ( You might not have some based on your configuration ) &lt;br /&gt;
&lt;br /&gt;
HwsMessagesAppPool &lt;br /&gt;
HwsWSAppPool &lt;br /&gt;
StsAdminAppPool &lt;br /&gt;
STSWebServiceAppPool &lt;br /&gt;
TpmWSAppPool (If you are using BAS) &lt;br /&gt;
WSSAppPool (Sharepoint app Pool ) &lt;br /&gt;
BAMAppPool &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Whew !! That should get you back on track . &lt;br /&gt;
In case it did not leave me a comment or Ping me !&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=10776" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Error while calling Orchestration Exposed as Webservice </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/12/29/10696.aspx" /><id>/blogs/abhilash/archive/2005/12/29/10696.aspx</id><published>2005-12-29T06:06:00Z</published><updated>2005-12-29T06:06:00Z</updated><content type="html">&lt;p&gt;If you are trying to call the Orchestration that are exposed as webservice , You will come acros this error below . This usually happens in Dev machines where Biztalk as well as IIS is on the same machine. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#993366"&gt;The Messaging Engine failed to register the adapter for &amp;quot;SOAP&amp;quot; for the receive location &amp;quot;/VirtDir/App.asmx&amp;quot;. Please verify that the receive location is valid, and that the isolated adapter runs under an account that has access to the BizTalk databases.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#993366"&gt;An attempt to connect to &amp;quot;BizTalkMgmtDb&amp;quot; SQL Server database on server &amp;quot;Server&amp;quot; failed with error: &amp;quot;Cannot open database requested in login 'BizTalkMgmtDb'. Login fails&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#993366"&gt;The &amp;quot;SOAP&amp;quot; adapter is suspending an outbound message going to destination URL&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&amp;nbsp;1 ) This issue occurs because the App pool identity that is used by the application pool for the exposed Web service is not added as&amp;nbsp; to the BizTalk Isolated Host Users group. This is needed because the message needs to get properly authenticated to get submitted. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;2 ) Also this account needs permission to the&amp;nbsp; %systemroot%\Temp folder on the server that exposes the Web service .This is needed as the web service (.asmx) files are JIT compiled to create DLLs in the %systemroot%\Temp folder. &lt;/p&gt;
&lt;p&gt;Giving these correct access and permissions should solve the issue . &lt;img src="/FCKEditor/editor/images/smiley/msn/regular_smile.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=10696" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>BTS2006 : Splitting Messages using Pipeline from Inside the Orchestraion</title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/11/04/10153.aspx" /><id>/blogs/abhilash/archive/2005/11/04/10153.aspx</id><published>2005-11-04T12:51:00Z</published><updated>2005-11-04T12:51:00Z</updated><content type="html">&lt;p&gt;I had some Aggregator Orchestration which were running into Zombie situations ,&lt;br /&gt;
So when I got the biztalk 2006 beta version I was anxious to try out the new functionality of being able to call your receive &lt;br /&gt;
pipeline from inside your Orchestration . You can enumerate through the EnvelopeMessage passed into the recieve pipeline&lt;br /&gt;
just like you would enumerate in an ICollection or Recordset using .MoveNext() .&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;This is how my built Orchestration looked like &lt;/p&gt;
&lt;p&gt;&lt;a href="http://photos1.blogger.com/blogger/416/96/1600/RecievePipelineOrchestration.jpg"&gt;&lt;img alt="" src="http://photos1.blogger.com/blogger/416/96/400/RecievePipelineOrchestration.jpg" border="0" /&gt;&lt;/a&gt; I will briefly try to capture the steps that I took&lt;/p&gt;
&lt;p&gt;1.) Create a Document Schema SingleOrder.xsd &lt;br /&gt;
&lt;br /&gt;
2.) Create an Envelope Schema TotalOrder.xsd &lt;/p&gt;
&lt;p&gt;3.) Create a receive Pipeline SplitOrder.btp&lt;/p&gt;
&lt;p&gt;&amp;nbsp;4.) Add the XML Dissasembler and select the Document and envelope Schemas as above. &lt;/p&gt;
&lt;p&gt;5.) Create your Recieve Port and set the document type to your Envelope Schema , This Port now has XMLPassthru transmit , I am calling this message IncomingFullMessage &lt;/p&gt;
&lt;p&gt;6.) Now we enter Splitting scope ( Pipelines can only be invoked from Atomic scopes, Also it does not support Recoverable interchange processing when called this way ) &lt;/p&gt;
&lt;p&gt;7.) Add Microsoft.XLANGs.Pipeline as Reference and then ;declare a variable for the pipeline in my case OrderSplitter AS &amp;quot;Microsoft.XLANGs.Pipeline.ReceivePipelineOutputMessages&amp;quot; &lt;/p&gt;
&lt;p&gt;8) In the expression Shape Call Order Splitter , OrderSplitter = Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteReceivePipeline(typeof(SplitOrderReceivePipeline),IncomingFullMessage); &lt;/p&gt;
&lt;p&gt;9) In the loop Get_Next-Order Shape iterate through each message using OrderSplitter.MoveNext() &lt;/p&gt;
&lt;p&gt;10.) Create an Orchestration variable &amp;quot;SingleOrder&amp;quot; of type Document Schema &lt;/p&gt;
&lt;p&gt;11.) Create the Single Message you want in the message assignment Shape and set SingleOrder = new System.Xml.XmlDocument(); OrderSplitter.GetCurrent(SingleOrder); &lt;/p&gt;
&lt;p&gt;12) Now you have the single Message that you want to process. You can send it to whatever process you want , In this example I am just sending the message to a Output folder.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=10153" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Biztalk Server 2006  Review  - Installation</title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/09/04/10150.aspx" /><id>/blogs/abhilash/archive/2005/09/04/10150.aspx</id><published>2005-09-04T06:57:00Z</published><updated>2005-09-04T06:57:00Z</updated><content type="html">&lt;p&gt;I started this install on a Virtual PC and I was a bit skeptic if I would be able to finish installation that day , Configuring our development server last time required almost 3 days and another instance I remember configuring a machine with two SQL servers with Analysis server on a different machine almost took a week and a call to MS help desk for some gotcha's .So I was a bit skeptic &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;a href="http://photos1.blogger.com/img/267/3588/320/install11.jpg"&gt;&lt;img class="phostImg" alt="" src="http://photos1.blogger.com/img/267/3588/400/install1.jpg" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
One of the first things that you will notice is that there is a set of ways to download all the pre-requisites. Often times in Biztalk Server 2004 , You will have to go and hunt lot of required files like SQL XML , MSXML 4 and SP1 and office Web Components Update and ... Oh You know what I mean . Now the cool thing in BTS 2006 is that you have an one click option of asking Biztalk to download whatever it wants directly off the web or download ONE Cab file containing everything in case your machine is not on the internet or in my case like a VPC &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://photos1.blogger.com/img/267/3588/320/install2.jpg"&gt;&lt;img class="phostImg" alt="" src="http://photos1.blogger.com/img/267/3588/400/install2.jpg" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
The next thing that one notices is that the whole installation is not one big piece of ALL or NOTHING , wherein some small change or issue would roll back the whole process and you need to go now and manually delete the BizTalk databases at times and that often leads the beginner Biztalk user to give up in frustration .. Also before installation it checks for pre-requisites and tell you what is available and not . Also it asks for one user credentials only if you have a single box scenario. rather than typing the same user name a zillion times &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://photos1.blogger.com/img/267/3588/320/install3.jpg"&gt;&lt;img class="phostImg" alt="" src="http://photos1.blogger.com/img/267/3588/400/install3.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;It also shows a smoother progress indication and unlike BTS 2004 , It shows you what is not installed and lets you reconfigure that piece alone later&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://photos1.blogger.com/img/267/3588/320/install5.jpg"&gt;&lt;img class="phostImg" alt="" src="http://photos1.blogger.com/img/267/3588/400/install5.jpg" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Overall I must say I am impressed with the setup . The biztalk Server Explorer is completely revamped and now there is a whole concept of artifacts grouped by applications ( Duh !!) , our administrator's are already looking forward to Biztalk 2006&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://photos1.blogger.com/img/267/3588/320/install7.jpg"&gt;&lt;img class="phostImg" alt="" src="http://photos1.blogger.com/img/267/3588/400/install7.jpg" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=10150" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>BizTalk Zombies and more.. </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/08/19/9025.aspx" /><id>/blogs/abhilash/archive/2005/08/19/9025.aspx</id><published>2005-08-19T11:37:00Z</published><updated>2005-08-19T11:37:00Z</updated><content type="html">&lt;p&gt;You have got this error from biztalk &amp;quot;Completed with discarded messages&amp;quot; and are wondering what that means you could be potentially seeing what in BTS buzz world is called a Zombie . A Zombie is usually a valid message or a response that is left without a subscription to process at that point in time . Though this one liner definition is quite crude explanation . If you are dealing with scenarios like Sequential convoys and batching you are likely to witness this especially when you have large amount of transactions and when your system is operating near to high load conditions ( that is when I have witnessed it the most, though there are scenarios for encountering zombies even under little or No load ) . &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you really want to learn more about Zombies read this &lt;a href="http://blogs.msdn.com/biztalk_core_engine/archive/2004/06/30/169430.aspx"&gt;Blog from Biztalk Core Engine Team &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now If your solution involves a while loop surrounding a listen with one branch having a receive and the other having a delay shape followed by some expression shape that sets the loop counter and controls the loop termination .You would more than likely see this scenario as delay could be triggered and the message could be delivered after. &lt;br /&gt;
&lt;br /&gt;
Now the condition for delay and time out is we don't want to wait for a message forever . So we timeout after an interval (Tn) but this (Tn) is non-deterministic and is usually set to a small number. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For an app that we had increasing the delay from 10 Secs to 2 minutes( chosen at random) &lt;br /&gt;
did away with Zombie occurrences . I would also suggest decreasing the default retry of 5 minutes to a lesser value if you are in a aggregated scenario where you are collecting one message at a time. 2 minute looks like a large interval to wait for one message but keep in mind that this delay is not arithmetic and does not occur for each listen . Most often the message is already there to be consumed and this delay happens ONLY when there is no message to consume. In a stressed Biztalk box our scenario which is an EOD movement had given us a liberty of waiting an extra couple of minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another solution that works is after the loop is over to have another loop with the same correlation set(following) to drain these instances for a certain amount of time ( DRAINING ). You can do this before or after you send out the final message . in the latter case you can send these drained ones as a second message or log them as errors . &lt;br /&gt;
&lt;br /&gt;
Also a WMI event is generated for a Zombie occurrence , I haven't hit across the details of the same . &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9025" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Biztalk Flat File Performence </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/08/05/9033.aspx" /><id>/blogs/abhilash/archive/2005/08/05/9033.aspx</id><published>2005-08-05T12:44:00Z</published><updated>2005-08-05T12:44:00Z</updated><content type="html">&lt;p&gt;Recently I had a scenario which involves processing a large amount of flat files; each of whihc went througha Flatfile Dissasembler before the business processing on that started. Here I record some points of interest of FFDASM behaviour. When FlatFile Disassembler is fed with a large amount of files biztalk waits for all files to unpack before it starts processing. &lt;/p&gt;
&lt;p align="left"&gt;&lt;br /&gt;
&lt;br /&gt;
Our test environment had two boxes each both of which configured under the same host and having identical machine config with SQL on a seperate box was used for the test&lt;br /&gt;
For our Scenario we had little over 500 files being dropped simultaneously .The file batch size was set at 20 the default.. It was noticed that after picking up the first 20 and initiating disassembling this batch before the next set is picked up , it goes on picks up all the files.( See graph) &lt;br /&gt;
&lt;br /&gt;
Essentially Biztalk seemed to wait for all the messages to get picked up and then flat file disassembler unpacks all of the flat files from the interchange before it starts processing. This is evident from the apparent lack of activity form the time the last file was picked up and when the first set of files started coming out ( See Graph) . I had seen this in one of prior instance and I recently ran some test and got similar results which made me write this post.&lt;/p&gt;
&lt;p align="center"&gt;&lt;br /&gt;
&amp;nbsp;&lt;img src="http://photos1.blogger.com/img/267/3588/640/FFDASM.jpg" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
Biztalk Flat File Dissasembler Behaviour &amp;nbsp; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9033" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>TO "UNDEPLOY" OR "NOT TO UNDEPLOY" </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/07/11/9034.aspx" /><id>/blogs/abhilash/archive/2005/07/11/9034.aspx</id><published>2005-07-11T11:45:00Z</published><updated>2005-07-11T11:45:00Z</updated><content type="html">&lt;p&gt;If you have been working with Biztalk for a considerable amount of time like me &lt;br /&gt;
you would have gone through the pains of the Undeploy Regac - Deploy loop , Sometime when you are making changes to Schema , it is quite unavoidable but at lot of time you really don't need to , Just re-gacing your dll and restarting the Biztalk service will do the trick . I have not seen a comprehensive documentation for the same . So the list below is mostly from my own experiences &lt;br /&gt;
&lt;br /&gt;
Schemas &lt;br /&gt;
=======&lt;br /&gt;
&lt;br /&gt;
Any changes to Schemas like Namespace , Root Node Name , Promoted properties require a UNDEPLOY - DEPLOY Cycle. &lt;br /&gt;
&lt;br /&gt;
Changing a node which is not a promoted one and not a root node , you can get by with just a GAC and restart &lt;br /&gt;
&lt;br /&gt;
The reason for the same is Your Schema#rootnode is used in subscription evaluation , A changes to this without deploy undeploy will give you an subscription not found error &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maps&lt;br /&gt;
====&lt;br /&gt;
Changing mapping or Functoids in maps DO NOT require a UNDEPLOY - DEPLOY unless the Schema itself has changed ( See schema Above ) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Orchestrations &lt;br /&gt;
==============&lt;br /&gt;
Changes in Orchestration DO NOT require a UNDEPLOY - DEPLOY Cycle unless Send/receive Port shapes are changed&lt;br /&gt;
&lt;br /&gt;
This is mostly because Schemas would change or you add a new port based on a new schema which needs to get updated in the subscription viewer and this requires undeploy - deploy &lt;br /&gt;
&lt;br /&gt;
Pipelines &lt;br /&gt;
=========&lt;br /&gt;
Changes in Pipeline DO Require a UNDEPLOY - DEPLOY &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assembly &lt;br /&gt;
========&lt;br /&gt;
&lt;br /&gt;
External Assembly change DO NOT require a UNDEPLOY - DEPLOY Cycle unless you change the version number &lt;br /&gt;
&lt;br /&gt;
In VB assembly info if the assembly version is set to 1.1.* it will increment the assembly number for every small change. Though it is good from a certain point of view , it can quickly become a pain if you just want to make a little minor change . &lt;br /&gt;
So I suggest you control the version number manually , So you can just re-gac the assembly &lt;br /&gt;
&lt;br /&gt;
Please note Gac-ing the change and restart of the BTSservice is needed for all steps &lt;br /&gt;
&lt;br /&gt;
Last but not the least , you should learn ,try and use BTSNANT tool , It is well worth the effort you spent &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9034" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>SEHException While Enlisting Orchestration </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/07/07/9028.aspx" /><id>/blogs/abhilash/archive/2005/07/07/9028.aspx</id><published>2005-07-07T11:40:00Z</published><updated>2005-07-07T11:40:00Z</updated><content type="html">&lt;p&gt;I am posting one of the errors we encountered over which considerable time was spent debugging.&lt;br /&gt;
&lt;br /&gt;
You will get the below Error in Event Log&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;br /&gt;
Event Type: Error&lt;br /&gt;
Event Source: XLANG/s&lt;br /&gt;
Event Category: None&lt;br /&gt;
Event ID: 0&lt;br /&gt;
Date: 5/5/2005&lt;br /&gt;
Time: 3:22:32 PM&lt;br /&gt;
User: N/A&lt;br /&gt;
Computer: Machine12&lt;br /&gt;
&lt;br /&gt;
Description:&lt;br /&gt;
An SEHException exception occurred while the XLANG/s runtime enlisted a service.&lt;br /&gt;
Error message:External component has thrown an exception.&lt;br /&gt;
Call stack: at Microsoft.BizTalk.MetaDataOM. ICLRType.GetFields(UInt32 dwBindingFlags) at Microsoft.BizTalk.XLANGs.BTXEngine. BTXServiceStaticState._createStringLookup(String svcFullTypeName, &lt;br /&gt;
IAssemblyManager asmMgr) at Microsoft.BizTalk. XLANGs.BTXEngine.BTXServiceStaticState. PersistState (String mgmtDBServer, String mgmtDBName, String MsgBoxGroupName, String ApplicationName, String serviceAssembly, String serviceTypeName, Guid[] PortIDs, Guid[] LrpIDs, ITransaction transaction)&lt;br /&gt;
at Microsoft.BizTalk.XLANGs. BTXEngine. BTXService.GoLive (String configDBServer, String configDBName, String msgBoxGroupName, String applicationName, String servicePath, String serviceTypeName, Guid[] portIDs, Guid[] lrpIDs, ITransaction transaction)&lt;br /&gt;
&lt;br /&gt;
Exception type: BTXEnlistmentException&lt;br /&gt;
Source:&lt;br /&gt;
Target Site:&lt;br /&gt;
Help Link:&lt;br /&gt;
Additional error information:&lt;br /&gt;
&lt;br /&gt;
External component has thrown an exception.&lt;br /&gt;
&lt;br /&gt;
Exception type: SEHException&lt;br /&gt;
Source: Microsoft.XLANGs.BizTalk.Engine&lt;br /&gt;
Target Site: System.Collections.IEnumerator GetFields(UInt32)&lt;br /&gt;
Help Link:&lt;br /&gt;
Additional error information:&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
This normally occurs when you don't have a dependent file of the assembly not in GAC . That is an orchestration which references other Dll's must have the dependencies already GAC'd&lt;br /&gt;
&lt;br /&gt;
Another variation of this enlistment error is OutOfMemory exception which is due to some limitation of WMI , which can be increased with a custom Script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But in our case this was not the case I checked and rechecked the dependencies of our project they were all there .&lt;br /&gt;
&lt;br /&gt;
What we found out was that our Production server did not have Biztalk SP1 applied whereas the dev machine had SP1.&lt;br /&gt;
&lt;br /&gt;
So apparently the issue is still I guess of DLL's Missing in GAC but not of the application but that of Biztalk Later version Assemblies !! &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9028" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Biztalk Explorer Extension </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/06/28/9021.aspx" /><id>/blogs/abhilash/archive/2005/06/28/9021.aspx</id><published>2005-06-28T11:31:00Z</published><updated>2005-06-28T11:31:00Z</updated><content type="html">&lt;p&gt;Wouldnt it be nice to click a DLL and see it's internal schemas and objects contained in a Biztalk DLL , IF you have used ildasm for .net asemblies you know what I am talking about . There is a feature in Biztalk for that , YOu ned to register that dll to get the view in your explorer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The extension is the BtsAsmExt.dll and is located in the \Program Files\Microsoft BizTalk Server 2004\Developer Tools subdirectory. &lt;br /&gt;
To enable this functionality&lt;br /&gt;
regsvr32 &amp;quot;C:\Program Files\Microsoft BizTalk Server 2004\Developer Tools\BtsAsmExt.dll&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will see the BizTalk Server Assemblies icon in Windows Explorer alongside the drive letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you click on the BizTalk Server Assemblies you will a list of all of the deployed assemblies. You can then click on each of the assemblies and you will see the BizTalk artifacts that are used in that specific assembly. These includes Orchestrations, Schemas, Maps and Pipelines. In addition, if you double click on an individual artifact, the Type Content Viewer windows pops up and will show you an XML representation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This tool also includes additional functionality. It adds a BizTalk Server Search pane (found under the View -&amp;gt;Explorer Bar-&amp;gt;BizTalk Server Search) which lets you search across the deployed assemblies for any of the BizTalk types. So, I could do a search for any schemas that are referenced by pipelines across all assemblies or Correlation Types referenced by Orchestrations found in assembly X. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9021" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Accessing Standard Context properties in Biztalk pipelines like FileName</title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/06/24/9017.aspx" /><id>/blogs/abhilash/archive/2005/06/24/9017.aspx</id><published>2005-06-24T11:01:00Z</published><updated>2005-06-24T11:01:00Z</updated><content type="html">&lt;p&gt;If you wnated to access context properties in pipelines and have spent needless time figuring out the correct schema for each property here is a comprehensive list &lt;/p&gt;
&lt;p&gt;This content is taken as is from &amp;lt;a href=&amp;quot;&lt;a href="http://blogs.msdn.com/skaufman/"&gt;http://blogs.msdn.com/skaufman/&lt;/a&gt;&amp;quot;&amp;gt; Stephen Kaufman's WebLog&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;There are a number of 'built in' promoted properties that provide important information.&amp;nbsp; There are different items for the receive and send pipelines.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The 14 receive pipeline items are (including the associated namespace):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;1.&amp;nbsp; ReceivedFileName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/file-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/file-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;2.&amp;nbsp; InboundTransportLocation (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;3.&amp;nbsp; InterchangeID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;4.&amp;nbsp; ReceivePortID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;5.&amp;nbsp; ReceivePortName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;6.&amp;nbsp; WasSolicitResponse (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;7.&amp;nbsp; AuthenticationRequiredOnReceivePort (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;8.&amp;nbsp; InboundTransportType (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;9.&amp;nbsp; LRPMsgBodyTracking (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;10. MessageExchangePattern (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;11. PortName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;12. ReceivePipelineID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;13. MessageType (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;14. SchemaStrongName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;While the 31 send pipeline items are&lt;/p&gt;
&lt;p&gt;1.&amp;nbsp; CopyMode (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/file-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/file-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;2.&amp;nbsp; LTPMsgBodyTracking (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; ReceivedFileName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/file-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/file-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;4.&amp;nbsp; SPID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; ActualRetryCount (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;6.&amp;nbsp; FileName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/file-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/file-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp; PartyName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;8.&amp;nbsp; ReceivePortName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;9.&amp;nbsp; WasSolicitResponse (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;10. AllowCacheOnWrite (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/file-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/file-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;11. RetryInterval (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;12. OutboundTransportCLSID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;13. SPName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;14. InboundTransportLocation (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;15. InterchangeID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;16. ReceivePortID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;17. SPTransportID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;18. TransmitPipelineID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;19. AuthenticationRequiredOnReceivePort (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;20. InboundTransportType (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;21. LRPMsgBodyTracking (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;22. MessageExchangePattern (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;23. OutboundTransportLocation (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;24. PortName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/messagetracking-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;25. ReceivePipelineID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;26. SourcePartyID (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;27. MessageType (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;28. OutboundTransportType (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;29. PartNames (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/messageagent-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/messageagent-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;30. RetryCount (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;31. SchemaStrongName (&lt;a href="http://schemas.microsoft.com/BizTalk/2003/system-properties"&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To get access to these properties you need to get access to the context object.&amp;nbsp; The following method shell shows how we can do that.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IBaseMessageContext context = pInMsg.Context;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Now that we have a method to gain access to the context, what if we want to get access to the internal promoted properties?&amp;nbsp; We can iterate through all of the default promoted properties by using the context.ReadAt method (which produces the list of the items above).&amp;nbsp; This method takes an index and returns, through 2 out parameters, the name and namespace of the properties.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;We can also use the context.Read method to access the value of each of these promoted properties.&amp;nbsp; The Read method returns an object type containing the value of the promoted property when passing in the name and namespace of the property.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
So, to retrieve the source file name we would use this following line of code:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;string srcFileName = context.Read(&amp;quot;ReceivedFileName&amp;quot;, &amp;quot;&lt;a href="http://schemas.microsoft.com/BizTalk/2003/file-properties&amp;quot;).ToString"&gt;http://schemas.microsoft.com/BizTalk/2003/file-properties&amp;quot;).ToString&lt;/a&gt;();&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9017" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry><entry><title>Biztalk and File Masks Bug /Feature ? </title><link rel="alternate" type="text/html" href="/blogs/abhilash/archive/2005/06/22/9031.aspx" /><id>/blogs/abhilash/archive/2005/06/22/9031.aspx</id><published>2005-06-22T11:42:00Z</published><updated>2005-06-22T11:42:00Z</updated><content type="html">&lt;p&gt;Recently I was debugging a Biztalk solution with a friend of mine Rajesh ,and we noticed a curious Masking issue with BizTalk &lt;br /&gt;
&lt;br /&gt;
Suppose you give a mask &lt;br /&gt;
&lt;br /&gt;
*.XML &lt;br /&gt;
&lt;br /&gt;
Which of these files are picked up ?&lt;br /&gt;
&lt;br /&gt;
A) Orders.xml&lt;br /&gt;
B) Orders.XMLTEST&lt;br /&gt;
C) Orders.XML.BAK&lt;br /&gt;
D) Orders.TXT&lt;br /&gt;
E) ORDERS.XMLINFO&lt;br /&gt;
F) ORDERS.XML_BACKUP&lt;br /&gt;
&lt;br /&gt;
I am sure your answer is only A , but in reality Biztalk picks up all files except C and D for a mask *.xml&lt;br /&gt;
&lt;br /&gt;
So instead of looking for a file which starts with * and ending with .xml,It seems Biztalk picks up any file which has wild character starts and has .xml in the name not necessarily ending &lt;br /&gt;
&lt;br /&gt;
But the contradiction to that is if there is one more DOT [.] Case C which is not picked up &lt;br /&gt;
&lt;br /&gt;
So the way the mask gets applied is wild character then matches the last Dot and then matches charecters followwing the dot&lt;br /&gt;
&lt;br /&gt;
Is this an intended behaviour or Bug ? &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=9031" width="1" height="1"&gt;</content><author><name>Abhilash</name><uri>http://bloggingabout.net/members/Abhilash/default.aspx</uri></author></entry></feed>