Click here to Skip to main content
6,596,602 members and growing! (19,347 online)
Email Password   helpLost your password?
Enterprise Systems » Microsoft BizTalk Server » General     Intermediate

How to create a self-routing message using Dynamic Ports in BizTalk Server 2004

By Naveen Karamchetti

This article describes how to create a self-routing message using Dynamic Ports in BizTalk Server 2004.
C#, XML, Windows, .NET, Visual Studio, Dev
Posted:1 Mar 2006
Views:39,823
Bookmarked:21 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
13 votes for this article.
Popularity: 3.92 Rating: 3.52 out of 5
3 votes, 23.1%
1

2

3
6 votes, 46.2%
4
4 votes, 30.8%
5

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:

  • ID - Holds an integer value used to categorize a message.
  • Data - The contents of the message.
  • Destination - Holds the routing information for the message.
  • Initiator - Specifies the initiator of the message.

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

  • All messages with ID between 200 to 299, need to be processed as High Priority messages.
  • All messages with ID between 300 to 399, need to be processed as Low Priority messages.
  • All messages with ID greater than 400 can be ignored.

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.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Naveen Karamchetti


Member
Naveen Karamchetti has done his Masters (M.S.) in Software Engineering from B.I.T.S, Pilani and is based out of Fremont, CA.
The author has more than 8.5 yrs of experience in the IT industry, has started his career
starting from the good old days of using a Unix, Tcl/tk. The author has been associated with
several companies based out of Silicon Valley, California.

The author has won several programming awards within the organizations worked and is well-recognized. The author has also worked for Microsoft based at Redmond.

Hobbies include training, mentoring and research. Spends his free time travelling in the BART (Bay Area Rapid Transit) in Fremont, CA.
Occupation: Software Developer (Senior)
Location: United States United States

Other popular Microsoft BizTalk Server articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 13 of 13 (Total in Forum: 13) (Refresh)FirstPrevNext
GeneralNetwork URL path in dynamic port Pinmemberharishusharma2:32 29 Jun '09  
AnswerRe: Network URL path in dynamic port Pinmemberharishusharma5:32 29 Jun '09  
AnswerVarious Dynamic port configurations PinmemberNaveen Karamchetti11:09 24 Mar '09  
QuestionHow to create Dynamic send port for MS CRM 3.0/4.0 in BizTalk 2006 Pinmemberkuldip011:24 22 Dec '08  
AnswerRe: How to create Dynamic send port for MS CRM 3.0/4.0 in BizTalk 2006 PinmemberNaveen Karamchetti13:27 24 Mar '09  
GeneralHow to call web service by dynamic port in biztalk 2006 PinmemberRyanElee17:59 27 Aug '07  
QuestionSetting the Address property PinmemberGunnerOlesen9:40 11 Feb '07  
AnswerRe: Setting the Address property PinmemberGunnerOlesen10:59 11 Feb '07  
GeneralWhat about other transport types? PinmemberWillemM1:10 20 Oct '06  
GeneralRe: What about other transport types? PinmemberWillemM2:07 20 Oct '06  
GeneralHard coded target path not usefull Pinmemberbenjamin wegner21:27 7 Mar '06  
GeneralRe: Hard coded target path not usefull PinmemberTeddyBeer23:30 7 Mar '06  
GeneralRe: Hard coded target path not usefull Pinmember_ABHILASH_MS_1:21 22 Mar '06  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 1 Mar 2006
Editor: Chris Maunder
Copyright 2006 by Naveen Karamchetti
Everything else Copyright © CodeProject, 1999-2009
Web19 | Advertise on the Code Project