Understanding Design-Time Properties for Custom Pipeline Components in BizTalk Server
Based on article by Saravana Kumar, MCAD (Charter member), MCP (BizTalk 2004)
Published: December 2006
2. Source
• Understanding Design-Time Properties
for Custom Pipeline Components in
BizTalk Server
• Author: Saravana Kumar, MCAD
(Charter member), MCP (BizTalk 2004)
• Published: December 2006
• http://www.microsoft.com/downloads/details.aspx?FamilyID=8c2572a2-fb61-4016-a7a7-
1c37518b39ff&displaylang=en
3. What Is a Pipeline?
• All messages in/out of BizTalk must go
through a pipeline
• BizTalk includes 4 default pipelines:
– Pass Through Receive / Transmit
– XML Receive / Transmit
• Each pipeline has several stages
4. Receive Pipeline Stages
• Decode: Used to decrypt/decode an incoming message. Examples:
decrypt a secure message into plaintext; decode a MIME message
into XML.
• Disassemble: Used to convert a flat-file message to XML, if
necessary. In addition, if the incoming message consists of a number
of discrete messages bundled together within an
envelope, disassemble components can be used to break the
message into multiple single messages.
• Validate: Used to validate an incoming message against the schema.
• ResolveParty: The component will attempt to determine an identity for
the sender
5. Send Pipeline Stages
• Pre-Assemble: Used to manipulate a message prior
to serialization.
• Assemble: Takes the XML format the messaging
engine turns out and converts it to a flat-file format if
necessary, or adds an envelope to an outgoing
message. This is a counter action to the
Disassemble stage on the receive side.
• Encode: Used to encrypt/encode the message. This
is a counter action to the Decode stage on the
receive side.
6. What Is a Pipeline Component?
• Pipeline Components do the work
inside the stages
• Some stages can support multiple
components, serially processed
7.
8. Design Time Properties
• Configuration settings for .NET
components
• Can change at design time (VS) and/or
at run time (BTS Admin Console)
10. Custom Design Time Properties
• Defining design-time properties using basic .NET
data types
• Creating a drop-down list for a design-time property
• Complex types and serialization techniques
– Custom types and TypeConverter
– Collections and XML serialization
• Using the SchemaList class
11. IPersistPropertyBag Interface
• Key interface for design time properties
• Four methods:
– GetClassID : allows use with unmanaged
code
– InitNew : initialise any necessary
structures, caches, data, objects, etc
– Load : initialise (read) properties from bag
– Save : save properties into the bag
12. Creating a Custom Pipeline Component
• START FROM:
– Copy from SDK sample
– Use BTS Pipeline Component Wizard
– Use sample from Saravana Kumar
(PipelineCompTemplate.cs)
• STEPS:
1. Change name of class in two places:
• Class definition
• Resource Manager definition (string)
2. Generate a new unique class ID
13. Steps for Basic .NET Data Types
1. Define private field variables
2. Define public design time properties
3. Implement the Load method of the
IPersistPropertyBag interface.
4. Implement the Save method of the
IPersistPropertyBag interface
5. Implement the GetClassID and InitNew methods of
the IPersistPropertyBag interface
6. Implement Execute method
14. Using the Custom Component
1. Build the project
2. Copy DLL into:
C:Program FilesMicrosoft BizTalk Server 2006Pipeline Components
3. Add to toolbox
4. Drag onto a new BizTalk pipeline
15. Post-Build Event Code
IF $(ConfigurationName) EQU Release GOTO done
xcopy "$(ProjectDir)$(Outdir)$(TargetFileName)"
"C:Program FilesMicrosoft BizTalk Server
2006Pipeline Components" /R /Y /F
IF %ERRORLEVEL% EQU 0 GOTO done
net stop "BizTalk Service BizTalk Group :
BizTalkServerApplication"
iisreset
xcopy "$(ProjectDir)$(Outdir)$(TargetFileName)"
"C:Program FilesMicrosoft BizTalk Server
2006Pipeline Components" /R /Y /F
net start "BizTalk Service BizTalk Group :
BizTalkServerApplication"
:done
19. Tips
• Keep pipeline and pipeline component
projects in separate solutions
• Ensure you generate a unique class ID
• Change namespace in two places
• Ensure properties are spelled correctly
when represented as a string in
PropertyBag methods
20. BTS Pipeline Component Wizard
• Built by Martijn Hoogendoorn (MVP)
• http://btsplcw.codeplex.com/
• Automates much of the process of
creating a component template
• Need to build the solution & run the
MSI
• Becomes a new BizTalk project type