Archive for September, 2010

BizTalk configuration issue:Same CID value for MSDTC on both the BizTalk and SQL Server machine.

September 15, 2010 Leave a comment

There could be a lot of reason for not able to successfully configure BizTalk on your machine. But in most of the cases these issues are related to MSDTC.

To troubleshoot problems with MSDTC,
you can refer to MSDN Troubleshooting Problems with MSDTC .

Once I had faced strange problem while configuring BizTalk server on multi server installation. I did all the tricks mentioned on MSDN but not able to solve the problem. Finally uninstalling MSDTC and then reinstalling MSDTC in one machine solved my problem.

Actually problem was there with the same CID value for MSDTC on both the BizTalk and SQL Server. And the reason for same CID value was there because both the machines were cloned from the same one. Reinstalling of MSDTC generates a new CID value.

Steps to solve the problem:

Do this on any of the two machines(either on BizTalk machine or on SQL Server machine)
      1. Stop the Distributed Transaction Coordinator service.
      2. Go to command line and run:
              MSDTC –uninstall
              MSDTC -install
      3. Start the Distributed Transaction Coordinator service.

I hope this trick would save a lot of time for others.

BizTalk ESB Toolkit 2.0 samples (Content based routing)

September 10, 2010 21 comments

In this post, I am going to demonstrate how to achieve content based routing using BizTalk ESB Toolkit 2.0 and Business rules policy.
In the sample Business rule policy(RouteBasedOnDepartment) is used to set the endpoint information of the incoming employee messages based on the value of the department field in the incoming message.
The Itinerary(RouteBasedOnDept.Itinerary) contains ON-Ramp, OFF-RAMP and Routing service with BRE resolver to dynamically route the message.

Steps to create and test the application:

1. Open BizTalk Administrator console and create an application named “ESBSamples”. add a reference of the application “Microsoft.Practices.ESB” to the ESBSamples project.

Note:Microsoft.Practices.ESB is the default application for ESB related artifacts which get automatically created during the configuration of ESB Toolkit 2.0

2.Right click on Send ports under the application ESBSamples and Create a new dynamic one way send port named “DynamicSendToOutput”. Create the following filters as shown below:

3.Create a Receive port ESBSample.OnRamp.Itinerary and a Receive location named ESBSample.OnRamp.Itinerary.FILE and configure this as:

URI: C:\Abhijit\Abhijit.ESBSamples\Input\ *.xml
Receive Pipeline: ItinerarySelectReceive having ItineraryFactKey = Resolver.Itinerary
ResolverConnectionString = ITINERARY:\\name=RouteBasedOnDept;version=1.0

Here RouteBasedOnDept is the name of the Itinerary which we will be creating from step- (21)

4. Now open visual studio 2008, create a blank solution named “Abhijit.ESBSamples”.

5. Add a BizTalk project named “Abhijit.ESBSamples.Demo1.Schemas” and a C# class library named “Abhijit.ESBSamples.Demo1.Itinerary”.

6. Right click on the schema project and add a schema named Employee.xsd having following fields as shown below in the image:


7. After signing the project deploy it to application named “ESBSamples” the one we have created in step-1.

8. Now open Business Rule Composer and create a policy named “RouteBasedOnDept

9. In the RouteBasedOnDept policy, right-click and Add New Rule. Name the rule to “ForAdmin”.

10. In Facts Explorer, click the XML Schemas tab, right-click Schemas, and then click Browse.
to Employee.xsd under the folder C:\Abhijit\Abhijit.ESBSamples\Abhijit.ESBSamples.Demo1.Schemas\ and open it.

11. In fact explorer click on Employee.xsd and change the Document Type property to

12. In the Rule window, right-click Conditions, point to Predicates, and then click Equal.

13. From Facts Explorer, drag the Department element to the argument1 node under Conditions.

14. Click the argument2 node, and then type Admin.

15. From Facts Explorer, drag the Set End Point Outbound Transport Location definition under the vocabulary ESB.EndPointInfo to Actions.

16. Click and then type C:\Abhijit\Abhijit.ESBSamples\Output\Admin \%MessageID%.xml.

17. From Facts Explorer, drag the Set End Point Outbound Transport Type definition to Actions.

18. From Facts Explorer, drag the Adaptor Providers definition under ESB.TransportTypes, vocabulary to <empty string>.

19. In the Actions pane, expand the Adaptor Providers drop-down list, and then click FILE.


     Similarly add two more rules name “ForHR” and “ForOthers” having following Conditions and Actions respectively.
      Rule: ForHR
      Abhijit.ESBSamples.Demo1.Schemas.Employee:/Employee/Department is equal to HR
      Set End Point Outbound Transport Location to C:\Abhijit\Abhijit.ESBSamples\Output\HR\%MessageID%.xml

      Set End Point Outbound Transport Type to FILE

     Abhijit.ESBSamples.Demo1.Schemas.Employee:/Employee/Department is not equal to HR

    Abhijit.ESBSamples.Demo1.Schemas.Employee:/Employee/Department is not equal to Admin

   Set End Point Outbound Transport Location to C:\Abhijit\Abhijit.ESBSamples\Output\Others\% MessageID%.xml

   Set End Point Outbound Transport Type to FILE

20. Publish and Deploy the policy to RuleEngine database.

21. Now switch to Visual studio solution and right click on Abhijit.ESBSamples.Demo1.Itinerary project and add an Itinerary named “RouteBasedOnDept.Itinerary

22. Design the Itinerary as below:


Here first shape is the On-Ramp and for the properties of this refer the below image.


Last shape is the Off-Ramp and for the properties of this shape refer the below image.


Middle shape is the Itinerary service shape and for the properties of this shape refer the below image.


and for the properties of the BRE Resolver used in the Itinerary service, refer the below image.


23. Now Right-Click on the Itinerary designer and click on validate. You might get an error with description: A X509 Certificate is required in the model property ‘EncryptionCertificate’ to encrypt any sensitive property in the designer.


To get rid of this error you need to disable the X.509 certificate validation from the registry:
In the Registry Editor, navigate to the subkey HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BizTalk ESB Toolkit\2.0\Designer, and then set the RequireX509Certificate property value to false.

24. Set the model exporter of the Itinerary as Database Itinerary Exporter and Itinerary status as Deployed.


25. Right-Click on Itinerary designer and click on Export model to store the Itinerary into EsbItineraryDb database.

Test the solution:

From the BizTalk administrator console under the application “ESBSamples” enable the Receive location and start the send port.
Now drop all the three files from the folder “C:\Abhijit\Abhijit.ESBSamples\Sample\ “ into “C:\Abhijit\Abhijit.ESBSamples\Input\ “ folder. If everything configured properly then you will see one file each in the locations “C:\Abhijit\Abhijit.ESBSamples\Output\HR\” ,
“C:\Abhijit\Abhijit.ESBSamples\Output\Admin\” and “C:\Abhijit\Abhijit.ESBSamples\Output\Others\” based on the value of the Department field of the input messages.

Download the SourceCode:

To download the code please  Click here

Note:Change the extension of the file from .doc to .zip and extract it into your C: drive.

Pitfalls encountered and there workarounds during the developement of BizTalk Projects

September 10, 2010 Leave a comment

While working on a BizTalk projects, we have encountered a lot of issues. Here is some of the commonly encountered pitfalls and their workarounds. I hope this would help others.

 1.Installation Failure of BizTalk 2004 in Win XP with SP2

· Failed to enable the single sign-on(SSO) service

· Failed to generate the master secret code


· Use the Group policy object editor to enforce the use of authenticated client calls to the RPC End point Mapper and to disable the RestrictRemoteClients setting that is enforced by the RPC protocol.

1. Click Start, click Run, type gpedit.msc, and then click OK.

2. In the Group Policy Object Editor, expand Computer Configuration, expand Administrative Templates, expand System, click Remote Procedure Call, and then click RPC Endpoint Mapper Client Authentication.

3. Change the value for RPC Endpoint Mapper Client Authentication to Enabled.

4. Click Restrictions for Unauthenticated RPC Clients.

5. Change the value for Restrictions for Unauthenticated RPC Clients to Disabled.

· Use Registry Editor to enforce the use of authenticated client calls to the RPC Endpoint Mapper and to disable the RestrictRemoteClients setting that is enforced by the RPC protocol.

1. Click Start, click Run, type regedit, and then click OK.

2. Locate and then click the following registry key : HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT

3. Look for a subkey that is named RPC. If this key exists, click the RPC subkey, and then go to step 6. If this key does not exist, go to step 4.

4. On the Edit menu, point to New, and then click Key.

5. While the new key is selected, type RPC, and then press ENTER.

6. On the Edit menu, point to New, and then click DWORD Value.

7. Type EnableAuthEpResolution, and then press ENTER.

8. On the Edit menu, click Modify.

9. In the Value data box, type the number 1. Click OK.

10. On the Edit menu, point to New, and then click DWORD Value.

11. Type RestrictRemoteClients, and then press ENTER.

12. On the Edit menu, click Modify.

13. In the Value data box, type 0, and then click OK.

14. Quit Registry Editor.

2. Issues with SQL Adapter Distributed Transactions and their Isolation levels


· Transaction Manager has disabled its support for remote network transactions.


· First of all verify that “Distribute Transaction Coordinator” Service is
running on both database server computer and client computers.

1. Go to “Administrative Tools > Services”

2. Turn on the “Distribute Transaction Coordinator” Service if it is not running.

· If it is running then following settings need to do on the computer running database server.

1. Go to “Administrative Tools > Component Services”.

2. On the left navigation tree, go to “<Component Services><Computers > My Computer” (you may need to double click and wait as some nodes need time to expand).

3. Right click on “My Computer”, select “Properties”.

4. Select “MSDTC” tab.

5. Click “Security Configuration”.

6. Make sure you check “Network DTC Access”, “Allow Remote Client”, “Allow Inbound/Outbound”, and “Enable TIP”.

7. The service will restart.

8. But you may need to reboot your server if it still doesn’t work.

On your client computer use the same above procedure to open the”Security Configuration” setting, make sure you check “Network DTCAccess”, “Allow Inbound/Outbound” option, restart service and computer if necessary.

3. Issues with Disassembly of Messages using Envelope Schemas


· We can use custom pipelines with XML Disassembler to cut an envelope message coming from a SQL receive location to obtain its constituent document messages. If proper options are not specified in the pipeline and the Receive Location through which the envelope message will be coming, the disassembly fails and no document messages are returned, resulting to message loss.


· It is the responsibility of the Receive Location to add the envelope node to the incoming XML, along with the Namespace URI, which is the means by which the messaging engine identifies the type of the message. So, proper envelope node name (Document Root Name) and Namespace URI must be specified when creating the SQL receive location.

· The Namespace URI specified in the Receive Location must also be specified as the Document Namespace of both the Envelope Schema and the Document Schema.

· While designing the custom pipeline, the Document Schema and the Envelope Schema of the XML Disassembler stage component must be specified. The custom pipeline must be explicitly specified as the Receive handler of the SQL Receive Location.

4.Message Construction issues inside Orchestrations.


· Message is not constructed inside construct shape of the Orchestration.


· Before using a BizTalk XML Message inside an orchestration, it must first be constructed. In fact this is just populating the message with XML. If there is an attempt to use this message before it is constructed, the above error will come. Some messages come pre-constructed, such as messages that originate from a send port

·  There is several ways to construct a message inside an orchestration

1.Create new message from an existing message using BizTalk map

2.Assign one message to other( i.e creating a copy of an existing message)

 3.Creating a message with the help of a System.XML.XMLDocument variable.

      We have to first declare an orchestration variable of type XmlDocument. Then in a message assignment shape, need to do something like this:

                                      myxmlDoc = new XmlDocument();


                                      myMsgBeingConstructed = myxmlDoc