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:
- BTS.ReceivePortName
- BTS.MessageType.
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.