How to achieve parallel processing in BizTalk Orchestration

Problem

The requirement is very straight , I need to start/execute two sub processes or BizTalk Orchestrations in parallel. Then wait for the response from each orchestration, and then proceed to end. If there is a sequence diagram it would be something

 image

Solution

The first thing which came into my mind is using parallel shape in BizTalk , but they do not start or execute two processes in parallel , Its a common mistake, there is a blog post The parallel shape DOES NOT give you concurrent parallel processing – a common mistake.

Also there is a very good blog post How Parallel Shape works , this is a very good read and explained in much detail about execution of parallel shape.

The solution was to use parallel shape to start two Orchestrations at same time and use ports to pass the response back from the child orchestrations back to the main orchestration.

Using parallel shape with self correlating ports and start orchestration

In Summary

In summary the solution looks like below

  • Main Orchestration Uses a parallel shape to starts two sub orchestrations
  • Main orchestration has two ports for each sub orchestrations to pass back the response. The Post gets passed as parameter in start orchestration shape

 image

  • the port has following setting

image

  • In summary the main orchestration looks like below

image

  • I have used some trace entries in both sub orchestrations so when they starts following comes in the trace

image

both the sub process gets started almost same timestamp .

Hope this helps to someone.

There is more to read

  1. How to Use Self-Correlating Direct Bound Ports

  2. Enterprise Integration Patterns Part-1 – Scatter and Gather using Self Correlating Port

BizTalk 2013 Installation & Configuration Steps

Quick Steps

Software Required

Below are software required to build a stand alone BizTalk 2013 beta developer/runtime server machine

  1. SQL 2008 SP1-http://www.microsoft.com/en-us/download/details.aspx?id=20302
  2. BizTalk 2013 Beta – http://www.microsoft.com/en-gb/download/details.aspx?id=35553
  3. VS 2012 Trial – Professional Edition –http://www.microsoft.com/visualstudio/eng/downloads
  4. SQL 20082 R2 Trial –http://www.microsoft.com/en-gb/download/details.aspx?id=6362
  5. SQL 2008  R2 SP1 –http://www.microsoft.com/en-us/download/details.aspx?id=26727
  6. Windows 2012 Trial –http://www.microsoft.com/en-us/server-cloud/windows-server/trial.aspx

    Installation Steps

Before installing BizTalk it is required to install following software’s on the machine

    • IIS
    • SQL Server 2008 R2
    • SQL Server 2008 R2 SP1
    • Visual Studio 2012 professional

    After downloading the software click  on the exe and provide a folder location to extract the installation files, Once the files are unzipped, go to the folder and run setup.exe and follow the steps/instructions on screen

image

Click Next

image Click Next

image

Click Next

image

Select the appropriate options and Click Next

image After Next

image

Once the installation finishes following should come

image

Launch the configuration of BizTalk

Configuration Steps

Select Custom Configuration. Provide SQL Server Instance name and Administrator Account details  and follow the steps

Setup SSO

image

Setup BizTalk Group

image

Setup BAM Runtime

 

Setup Business Rule Engine

image

Setup BAM Tools

image

Review Final Configurations and Press Next

imageThe configuration process will try to create the databases at this step and try to configure the BizTalk runtime and service accounts.

image

    There is lot more…

    BizTalk 2013 Beta- By Sarvana Kumar – http://blogs.biztalk360.com/biztalk-server-2013-beta/

BizTalk 2013 Beta Help Page –http://msdn.microsoft.com/en-us/library/jj248691(v=bts.80).aspx

Introducing-Naushad Alam by Steef-Jan

Steef-Jan is a very well known person in BizTalk Community. He is BizTalk MVP and author of BizTalk 2010:Cookbook. He has been doing a series of post on “Introducing BizTalk Community Members” since couple of months in his blog.

He has posted an article about our chat on his blog “BizTalk Community series: Introducing Naushad Alam“. I am really happy and its an honor for me.

Thanks a lot Steef-Jan

BizTalk Server: Few basic changes for performance optimization

There are tons of recommendations and guidelines to tune the BizTalk Server to achieve the required performance, however there are few basic and very common things which we always miss while setting up a new environment

I have published a technet wiki article about “BizTalk Server: Tuning and Optimization” however below are few which is very basic and should always be kept in mind IMO.

  • Host Distribution Scheme : There should be a host creation schema for the BizTalk environment, before creating anew host , It is always necessary to decide the right Host Instance Node within a BizTalk group. following should be some basic points while creating a host instance and a new host
       1- Do we really need a new Host?
       2- What about using an existing Host and create a new Host Instance rather.
       3- What is the current load on target BizTalk node , where the new host instance is going to be created
       4- Always maintain a list of Host and they Host instance deployed by application. It will be easy to get the idea
  • Group Level Tracking – Group level tracking should be turned off.
  • BizTalk Database health – It is always necessary to keep an eye of the BizTalk group database server and its Jobs. Make sure the jobs are always running and there are no error in the SQL Agent logs.
  • Dedicated Tracking Host – There should be a dedicated Tracking host for BizTalk group.
  • Log and Data Files- data and log files of the BizTalk SQL server should always be on a separate drive.

Following are my main resources when i am dealing with Performance issues:

  1. General BizTalk Server Optimizations
  2. BizTalk Server: Performance Tuning & Optimization

Thanks for reading!

BizTalk Map using custom XSLT

Problem

There is a requirement to generate output XML based on the attributes of input XML:

Following is my Input xml schema

InputSchema

And our output schema looks like below

outputschema

I have to map the “Property” and its attribute “Name” based on the values and name of the input schema “Branch” record. for each “Branch” in the input there should be one record of the “Location” in the output schema.

For example if below is our input XML :

inputxml

Then my output XML should be like below

outputxml

If you see in the output XML the property and its values are populated on the basis of incoming records in “Branch”.

Solution

I would do following to achieve this requirement, My favorite custom XSLT in BizTalk Maps:

It is very easy to generate a Custom XSLT, BizTalk Map generates the basic code for the schema namespace etc and then we can always modify it.

Steps:

  • Add a new MAP in the BizTalk project
  • Choose the input schema and output schema
  • after this the MAP should look like below:

Map1

  • start mapping the elements and records from input to output. So simple
  • We have to map the value of “Availability” to the value of “Property” and the “Name” attribute should be populated with “Availability” , So I would simply connect “Availability” to “Property” and use a concatenation functoid to assign the attribute “Name” to “Availability” . My map Will look something like below:

map2

  • Now I will generate my basic XSLT code which i will further modify. I will validate the MAP and after the validation I will get the basic XSLT which i will modify.
  • Right Click on the map in the solution explorer and Click “Validate” , Check the Visual Studio output window, there will be a message something like below

map3

  • Open the XSL file highlighted and save that in the BizTalk solution . Now we can modify this XSL file and use in our MAP.
  • to use the XSL file in our MAP we would need to delete all the links which we have done in the above steps and use the “Custom XSLT Path” property of the BizTalk MAP,
  • Delete all the links in the map
  • Open the MAP property and select the path of the XSL file which we have saved earlier.
  • After that my map looks like below:

map4

  • And we can now test the map using our Input.
  • The final XSLT looks like below, which does all the mapping.

<xsl:output omit-xml-declaration=”yes” method=”xml” version=”1.0″ />
<xsl:template match=”/”>
<xsl:apply-templates select=”/s0:QueryInput” />
</xsl:template>
<xsl:template match=”/s0:QueryInput”>
<ns0:QueryResponse>
<xsl:for-each select=”s0:Branch”>
<xsl:variable name=”var:v1″ select=”userCSharp:StringConcat(&quot;OnOrder&quot;)” />
<xsl:variable name=”var:v2″ select=”userCSharp:StringConcat(&quot;ETA&quot;)” />
<xsl:variable name=”var:v3″ select=”userCSharp:StringConcat(&quot;Availability&quot;)” />
<ns0:Location>
<ns0:Name>
<xsl:value-of select=”@Name” />
</ns0:Name>
<ns0:Quantity>
<xsl:value-of select=”s0:Availability/text()” />
</ns0:Quantity>
<ns0:Property>
<xsl:attribute name=”Name”>
<xsl:value-of select=”$var:v3″ />
</xsl:attribute>
<xsl:value-of select=”s0:Availability/text()” />
</ns0:Property>
<ns0:Property>
<xsl:attribute name=”Name”>
<xsl:value-of select=”$var:v1″ />
</xsl:attribute>
<xsl:value-of select=”s0:OnOrder/text()” />
</ns0:Property>
<ns0:Property>
<xsl:attribute name=”Name”>
<xsl:value-of select=”$var:v3″ />
</xsl:attribute>
<xsl:value-of select=”s0:ETA/text()” />
</ns0:Property>
<xsl:value-of select=”./text()” />
</ns0:Location>
</xsl:for-each>
</ns0:QueryResponse>
</xsl:template>
<msxsl:script language=”C#” implements-prefix=”userCSharp”><![CDATA[
public string StringConcat(string param0)
{
return param0;
}

]]></msxsl:script>
</xsl:stylesheet>

Hope it helps!

Thanks for reading!

New Technet wiki “BizTalk Server:Performance Tuning & Optimization”

In the series of Technet WIki articles , I have published my another article today “BizTalk Server: Performance Tuning & Optimization” It is all about BizTalk Server performance optimization and tuning. The article features following things which might be helpful while working with performance tuning and optimization with BizTalk Server product.

  • Identifying Performance bottlenecks
  • Guide of resolving performance issues
  • MSDN articles and Guide about performance tuning
  • Various articles about optimizing BizTalk server code and solutions
  • Links to various Blog Posts about tuning and optimization

Feel free to read and contribute!!

Thanks for reading!

DebugView Not working on Windows 7 64 bit

Mostly I use DebugView while developing my BizTalk projects for quick trace and logging purpose. However recently I had a strange experience with DebugView.

I started my BizTalk application of one of our Windows 7 machine and DebugView was not showing any output while execution. I dig a lot ,however nothing was working for me and it was becoming very touch for me to follow the trace of the application.

Then after trying different settings on DebugView, it finally started to show the output. The settings which i changed on DebugView is:

  • Started running DebugView with administrator rights on machine
  • Enabled “Capture Global Win32” from the menu.

Please see this blog post, about how to use DebugView.

Thanks for reading!

BizTalk Rule Engine Policies Not Working

I recently created one policy and deployed on my another development Box, But it was strange, because it was not modifying my input XML.

I checked the logic of my rule and imported few times, Also restarted my Rule Engine Services, however it did not work for me. The only change which i was doing is, deploying on a different operating system. My other development Box was running Windows 7, 64 bit.

I searched a lot about the issue but did not find much information.

My Rule us using XmlHelper class to modify the input xml using some decisions based on the supplied values in xml file.

Finally after searching more about this class, I figured out the problem and fixed it. The steps are below:

  • I had to make some changes in my registry:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\BusinessRules\3.0\StaticSupport

  • I created the key and it started working fine.

About the Registry Key:

I had to set the value 2 of the above registry key, which tells BizTalk Rule engine to support usage of static objects , details are:

  • 2 – An instance of the object is NOT required, but the static method will be called at rule translation time (only if the parameters are constants). This is primarily meant as a performance optimization. However, note that static members used as actions will NOT be executed at translation time, but static methods used as parameters may be.

The Key was not there in my registry So i have created and set the value 2, It started working.

Finally I found more details about this problem in a blog post here by Richard. Please see the blog post for more details.

Minimum BizTalk Hotfixes on Production Servers

If you have Microsoft BizTalk Server 2006 R1 on you production farm, I would recommend you to deploy following hot fixes.

KB 943165

KB 944426

KB 944838

KB 944158

KB 970070

    Always Check MS documentation before doing these on production.
    Thanks