Blogging BizTalk

Lets Discuss BizTalk

Tag Archives: Routing

Content Based Routing using a direct bound orchestration


We can achieve the content based routing with orchestration, however like in my previous posts where the input and output message was the same this scenario may get a little tricky.

In this example we will receive an inbound message >> A Receive Port Subscribes to it >> Sends that message to an orchestration >> The orchestration routes it to a send port.

I have used the direct bound port orchestration in my example.

1>Create a receive port

2>Add a new orchestration to your visual studio solution.

In the solution create two schemas for input and output message out of orchestration (This may be little tricky here since we are supposed to route the same message to the outbound location hence the question is, why we are using two separate schemas? >> Explanation : If you have the same message type for both Receive and Send from the orchestration you will end up in infinite loop of same orchestration being triggered multiple times. The reason: orchestration will publish the output in message box, this message should be routed to the send port but instead it will be again subscribed by the orchestration because the message type will be matching the subscription of the orchestration. Hence to avoid this we need to create one more schema having the same structure but will keep a different namespace, hence insuring the output message type is not same  as the input message type.)

This is how our orchestration will look:

Image

Incoming Schema:

Image

OutGoing Schema:

Image

5>Add two maps, one to be used for construction the output message and other to be used in send port for converting the output message from orchestration to map the original input message sent by source system, remember we are supposed to get the same input message at the output.

6>Deploy your orchestration schemas and maps.

7>Create a send port to which the orchestration logical send port would be bound.In this port use the second map which transforms the output message of the orchestration to input type.

Image

8> Bind the orchestration’s logical port to the physical send port, since the logical receive port is directly bound to message box we wouldn’t need an explicit binding for it after deploying the orchestration. However if you wish you can as well use a specify later type of binding for the orchestration logical receive port.

8>Start the orchestration Receive and Send Port and refresh HIS.

Try placing your input file in receive location and you shall be able to see one instance of the orchestration getting triggered successfuly and that on completion will place the output message in your send location.

Need code, please leave me a comment with your email id and I will revert back ASAP.

Advertisements

Simple Message Based Routing BizTalk


When a message is passed throught the BT server without being processed or transformed within it falls under the category of message based routing. I am trying to cover a very basic example to understand message based routing here.

1> Create a new BizTalk project and add a new schema complying to the incoming xml.  Set the property ElementFormDefault to qualified.

2>Create a strong name key using following command in VS command prompt window sn -k DemoSNKey.snk  (in place of DemoSNKey you can use your own name) and in the project properties sign the assembly

Deploy the project : The purpose of deploying the schema here is to insure BizTalk recognizes the messagetype.

——————————————————-NOTE——————————

if you have not deployed the schema and you are using XMLRcv and XMLTranmit pipeline component in your ports you will get an error which may appear like this:

There was a failure executing the receive pipeline: “Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35” Source: “XML disassembler” Receive Port: “ReceiveOrder” URI: “D:\**********************” Reason: Finding the document specification by message type “http://*******************************” failed. Verify the schema deployed properly.

However if you have used PassThruReceive and PassThruTransmit  pipeline component you need not deploy the schema

——————————————————————————————–

3>Go to BizTalk Admin Console into the application container where you have deployed your project. Create a ReceivePort of type file. After this create a send port of type file. The reason we are using a file type port is for testing convenience.

You can set either of these two filter properties on the send port to achieve message based routing here:

  1. BTS.ReceivePortName
  2. BTS.MessageType.

Schema

If you use BTS.ReceivePortName all the messages coming into BT server on this port will be subscribed by the Send port.

If you use  BTS.MessageType then only the messages with a matching message type (namespace # root node)will be subscribed by the send port.

4>Enable the receive location and start the send port now followed by restarting the Handler under Host instances.

Drop your file to receive  location and you shall be able to see a new one created on the send location. This solution should work now to achieve message based routing.

This is a very basic example  and doesn’t have much scope for questions. However if you have any questions please feel free to leave a comment, I will get back as and when possible.

Simple Content Based Routing Using Send Receive Ports in BizTalk


When the routing decision within the BT server are made based on the content of the message it falls under the category of the message based routing

Example:

In this example I am taking a sample incoming order message and based on the “State” node value we may need to route to respective locations, for example SendLocationStateTN and SendLocationStateME. Below is the picture of how our invoice schema will look.

Image

Create a schema for incoming order in you BizTalk project.

2>We need to route the message based on the value of ‘State’ node hence we need to ensure this property is written to the context of message. This can be achieved by promoting the ‘State’ node. It can be achieved by right clicking on the desired node to be promoted and pick promote>>quick promotion, you will see following alert from VS

“Visual Studio will create a property schema that contains all your quick promotions. Do you want to add the property schema to your project?”
Go ahead and say yes to it.

3>Now the state value will be available in the filter properties for us to use. Lets create a receive port of file type and define a receive localion in you machine.

4>Create 2 send location to cater to TN and ME state values per the inital requirement.

Apply following filters there in both ports respectively.

BTS.ReceivePortName == ReceiveOrder  And
SimpleRoutingDemo.PropertySchema.State == TN   Note:SimpleRoutingDemo is the name of my BizTalk project in visual studio.

and

BTS.ReceivePortName == ReceiveOrder  And
SimpleRoutingDemo.PropertySchema.State == ME  

5>It is ready for content based routing . Any xml with state as ME shall go to SendLocationStateME and with  state as TN will go SendLocationStateTN.

This is a very simple example of content based routing using ports only. Please note we can achieve it in multiple ways for example by using orchestrations or ESB. Please let me know if you have any questions

D Goins Insperience

Technological outformation for this day and age

[INACTIVE BLOG] Connected Thoughts - Thiago Almeida

Connected systems and the occasional picture

Uri Katsir's Blog

BizTalk , BizTalk RFID and .NET

prashantbiztalkblogs

My BizTalk Experiences

BizTalk Server Tutorial

BizTalk Server Concepts and Common Errors

Extremely Talented Monkeys

A Technical Blog by Ed Jones: Azure, .NET, BizTalk, WCF, and SQL Server

On All Things Web

Discussing web development without limits

Vikas Bhardwaj's Blog

Articles about BizTalk Server and .NET C#

Cloud develop

a blog about (cloud) development... because I'm a nerd

Hooking Stuffs Together

My learning logs from day to day work experience about Integration platform using Microsoft technologies.

Connected Pawns

Mainly BizTalk & Little Chess

jhelatissimo

a blogger in the process.

MS Innovations Blog

Tips, Tricks, and Workarounds for BizTalk and other Microsoft technologies

srirambiztalks

Katradhu Kaialavu,Kalladhadhu Ulagalavu!

Vijay Microsoft Technical

BizTalk, WCF, ESB ToolKit, Windows Azure

Mind Over Messaging

Musings on BizTalk, Azure, and Enterprise Integration