Skip to main content
Email Password   helpLost your password?

Introduction

Consider a situation where a BizTalk message itself will have the routing information for the message. In such cases, one needs to create a Dynamic Port. In a Dynamic Port, the destination location is specified during runtime. This feature of Ports comes in very handy when one has to make routing decisions at runtime based on the content of the message.

Example - Message Segregation

A custom message "message.xsd" has the following properties:

Let us set some rules based on the "ID" property of the message.

Creating the BizTalk Project - "DynamicFilePorts"

Create a new BizTalk Server Project in Visual Studio .NET.

Step 1: In the Visual Studio .NET menu, select File -> New -> Project, and type the name "DynamicFilePorts".

NewProjectDialog

Building the Schemas

Step 2: Right-click on the project in the Solution Explorer, and select the "Add New Item" option. Then, select the item "Schema" and name it "Message". When the schema shows up, rename the "Root" element to "Message". After that, create the child elements: "ID", "Data", "Destination" and "Initiator".

Message Schema Elements

Element Name Element Type
ID xs:int
Data xs:string
Destination xs:string
Initiator xs:string

Please refer to the image below and confirm your schema file...

MessageSchema

Building the Orchestration (also known as a "Business Process")

This Orchestration would have just three shapes, a Receive shape, an Expression shape, and a Send shape.

Step 3: Right-click on the project in the Solution Explorer, and select the "Add New Item" option. Then, select the item "BizTalk Orchestration" and name it "DynamicPortsDemo".

DP_Orchestration

Step 4: Place the three shapes on the "Orchestration Surface".

  1. Receive shape
  2. Expression shape
  3. Send shape

Step 5: Create a message.

  1. In the Orchestration View, right-click on the Messages folder, and select "New Message". Rename it as "IncomingMessage", and in the Properties window, set the Message Type as "DynamicFilePorts.Message".

Step 6: Setting Properties for all the shapes.

  1. Select the Receive shape, and in the Properties window, set the Message Type as "IncomingMessage", and set the property "Activate" as True.
  2. Select the Send shape, and in the Properties window, set the Message Type as "IncomingMessage".
  3. Select the Expression shape, double-click, and type the code shown below...

BizTalkExpressionEditor

// Instantly process the message.

if (IncomingMessage.ID >= 200 && IncomingMessage.ID <= 299)
{
  OutputDataPort(Microsoft.XLANGs.BaseTypes.Address) = 
      "FILE://C:/BiztalkProjects/DynamicFilePorts/" + 
      IncomingMessage.Destination + 
      "/HighPriorityMessage_%MessageID%.xml";
}
// Low Priority message processing.

else if (IncomingMessage.ID >= 300 && 
         IncomingMessage.ID <= 399)
{
  OutputDataPort(Microsoft.XLANGs.BaseTypes.Address) = 
      "FILE://C:/BiztalkProjects/DynamicFilePorts/" + 
      IncomingMessage.Destination + 
      "/LowPriorityMessage_%MessageID%.xml";
}
// Ignore this message.

else
{
  OutputDataPort(Microsoft.XLANGs.BaseTypes.Address) = 
     "FILE://C:/BiztalkProjects/DynamicFilePorts/" + 
     IncomingMessage.Destination + 
     "/IgnoreMessage_%MessageID%.xml";
}

Step 7: Create two Ports (a Receive port and a Send port)

  1. Receive port - Right-click on the Port Surface, and select "New Configured Port", and set the Name as "InputDataPort", leave all the default properties as it is in the Wizard.
  2. Send Port - Right-click on the Port Surface, and select "New Configured Port", and set Name as "OutputDataPort", set the remaining properties as shown in the image below...

PortConfiguration

Step 8: Strong name and deployment!!

  1. Create a key file using "sn -k Dynamic.snk" in the Visual Studio .NET command prompt.
  2. In the Solution Explorer, right-click on the "DynamicFilePorts" Project Properties, and select "Assembly" and specify the key file name.

    StrongName

  3. In the Solution Explorer, right-click on the "DynamicFilePorts" Project Properties and select "Deploy".
  4. In the BizTalk Explorer, right-click on the listed Orchestration under the "Orchestration" folder, and select "Bind...". Create a Receive Port and a Receive Location.

    BindingProperties

    In the BizTalk Explorer, right-click on the listed Orchestration under the "Orchestration" folder, and select "Start". The Orchestration icon must turn blue.

Step 9: Refresh BizTalk Explorer and create Receive Location.

  1. Please refer to the MSDN documentation on how to create a Send Port and Receive Locations.

Step 10: Test the Solution

  1. Create the folders "InputFiles", "InstantProcessing", "LowPriority", and "Ignore" under any directory. Place the input file in the Receive Location. Check the response in any of the folders based on the input message.
  2. Note that the input file is routed to the destination folder according to the "ID" of the message.

Quick Takeaways

  1. Always set the Activate property to "True" for the first Receive Shape in the orchestration.
  2. Note the use of if-else conditions used directly in the "Expression" shape, instead of using a "Decide" shape.
  3. Content based routing can also be done using filters in Send Ports.
  4. A BizTalk service needs to be re-started every time a deployment is done.
You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralNetwork URL path in dynamic port Pin
harishusharma
2:32 29 Jun '09  
AnswerRe: Network URL path in dynamic port Pin
harishusharma
5:32 29 Jun '09  
AnswerVarious Dynamic port configurations Pin
Naveen Karamchetti
11:09 24 Mar '09  
QuestionHow to create Dynamic send port for MS CRM 3.0/4.0 in BizTalk 2006 Pin
kuldip01
1:24 22 Dec '08  
AnswerRe: How to create Dynamic send port for MS CRM 3.0/4.0 in BizTalk 2006 Pin
Naveen Karamchetti
13:27 24 Mar '09  
GeneralHow to call web service by dynamic port in biztalk 2006 Pin
RyanElee
17:59 27 Aug '07  
QuestionSetting the Address property Pin
GunnerOlesen
9:40 11 Feb '07  
AnswerRe: Setting the Address property Pin
GunnerOlesen
10:59 11 Feb '07  
GeneralWhat about other transport types? Pin
WillemM
1:10 20 Oct '06  
GeneralRe: What about other transport types? Pin
WillemM
2:07 20 Oct '06  
GeneralHard coded target path not usefull Pin
benjamin wegner
21:27 7 Mar '06  
GeneralRe: Hard coded target path not usefull Pin
TeddyBeer
23:30 7 Mar '06  
GeneralRe: Hard coded target path not usefull Pin
_ABHILASH_MS_
1:21 22 Mar '06  


Last Updated 1 Mar 2006 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009