Tuesday, July 2, 2013

Default Pipelines

When you create a new application, the default pipelines are created and deployed by default and appear in the Microsoft.BizTalk.DefaultPipelines assembly in the \References folder for every BizTalk project. The default pipelines cannot be modified in Pipeline Designer. These pipelines can be selected when configuring a send port or receive location in BizTalk Explorer.

Note:  The XML receive and XML send pipelines do not support XML documents larger than 4 gigabytes.

BizTalk provides 2 Receive pipelines (PassThruReceive, XmlReceive) and 2 Send Pipelines (PassThruSend, XmlSend), we can go and build more custom pipelines if required.


The default PassThruReceive and PassThruSend pipelines doesn't do any processing at all with the message and it will n't have any components. Whereas the XmlReceive pipeline will have a XmlDisassembler pipeline component on the disassembling stage and the XmlSend pipeline will have a XmlAssembler on the Assemble stage as shown in the above figure.

Why do we need a XmlReceive pipeline:
Whenever an Xml message is received via the XmlReceive pipeline the XmlDisassembler will do the following tasks:
1.Promote the "MessageType" context property by taking the combination of TargetNamespace and Rootelement in the format, Targetnamespace#RootElement.
2. Remove Envelopes and disassemble the interchanges
3. Promote the content properties from interchange and individual document into message context based on the configured distinguished fields and promoted properties.

There are 3 important things you need to keep in mind.
1. Maps on the receive side will be applied after the receive pipeline. In order to pick the correct schemas for processing, Maps need the "MessageType" property, which is promoted by the XmlDisassembler. So, if you are using PassThruReceive "MessageType" property won't be present, which in turn will result in Map not being applied.

2. Binding of logical port in the orchestration to a message (inside the orchestration designer), and deploying the orchestration will create the subscription for the particular message type. So, if you are using PassThruReceive "MessageType" property won't be present, which in turn will result in not starting the particular Orchestration instance.

3. If you have configured content based routing based on the properties in the message (Filters in SendPorts, Example: BTS.MessageType = http://tempuri#Person), routing won't happen until the correct properties are present in the message context.


Why do we need a XmlSend pipeline?
XmlSend pipeline does the reverse of what a XmlReceive pipeline did. It got a XmlAssembler component in the Assemble stage  which does the following tasks:
1. XML Assembler Builds envelopes as needed and appends XML messages within the envelope.
2. Populates content properties on the message instance and envelopes.

ref: http://www.digitaldeposit.net/saravana/post/2007/01/31/Difference-between-(PassThruReceive-PassThruSend)-and-(XmlReceive-XmlSend)-Biztalk-Pipelines-(For-Beginners).aspx

No comments:

Post a Comment