Pro BizTalk 20093A978-1-4302... · 2017. 8. 27. · Pro BizTalk 2009 George Dunphy, Sergei...
Transcript of Pro BizTalk 20093A978-1-4302... · 2017. 8. 27. · Pro BizTalk 2009 George Dunphy, Sergei...
Pro BizTalk 2009
George Dunphy, Sergei Moukhnitski, Stephen Kaufman, Peter Kelcey, Harold Campos, David Peterson
Pro BizTalk 2009
Copyright © 2009 by George Dunphy, Sergei Moukhnitski, Stephen Kaufman, Peter Kelcey, Harold Campos, David Peterson
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-4302-1981-1
ISBN-13 (electronic): 978-1-4302-1982-8
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
Lead Editor: Jonathan GennickTechnical Reviewer: Richard SeroterEditorial Board: Clay Andres, Steve Anglin, Mark Beckner, Ewan Buckingham, Tony Campbell, Gary Cor-
nell, Jonathan Gennick, Jonathan Hassell, Michelle Lowman, Matthew Moodie, Jeffrey Pepper, Frank Pohlmann, Douglas Pundick, Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh
Project Managers: Sofia Marchant, Kylie JohnstonCopy Editor: Kim WimpsettAssociate Production Director: Kari Brooks-CoponyProduction Editor: Kelly GuntherCompositor: Linda Weidemann, Wolf Creek Publishing ServicesProofreader: Nancy SixsmithIndexer: John CollinArtist: April MilneCover Designer: Anna IshchenkoManufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail , or visit .
For information on translations, please contact Apress directly at 233 Spring Street, New York, NY 10013. E-mail , or visit .
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk Sales–eBook Licensing web page at .
The information in this book is distributed on an “as is” basis, without warranty. Although every pre-caution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work.
The source code for this book is available to readers at .
To my daughter, Gillian—thank you for brightening each day with your smile and laughter. To my son, Bennett—congratulations on your new job
as a Big Brother and for making us feel so young. And for my wife, Keressa— my eternal gratitude for your love and support after all these years.
—George Dunphy
To my family: Elena, Boris, Alex, and Julia.—Sergei Moukhnitski
This book is dedicated to my family.—Stephen Kaufman
To my wife, Susy: For the love and support you have given me as well as for your patience putting up with all of my long nights stuck behind a computer screen.
To my daughter, Isabella: You arrived three weeks later than we expected, which gave me time to finish my work on this book. May your
timing continue to be that perfect through the rest of your life.To my mom: For all those school assignments and reports where you
served as editor and proofreader for a very stubborn author.—Peter Kelcey
To my parents, Amelia Urquiza and Benjamin Campos, and to my siblings, Daniel Campos and Annia Campos, for their love and eternal support.
To my lovely wife and daughter, Claudia Luz and Valeria Valentina, for being the light that shines my life and that makes my heart dance the most beautiful music.
—Harold Campos
v
Contents at a Glance
About the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
PART 1 Readme.1stCHAPTER 1 BizTalk in the Enterprise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
CHAPTER 2 Starting a New BizTalk Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
PART 2 BizTalk RevealedCHAPTER 3 Thinking Inside the Box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
CHAPTER 4 Pipelining and Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
CHAPTER 5 Pipeline Component Best Practices and Examples . . . . . . . . . . . . . . 153
CHAPTER 6 BizTalk Design Patterns and Practices. . . . . . . . . . . . . . . . . . . . . . . . . . 211
CHAPTER 7 What the Maestro Needs to Know: Advanced Orchestration Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
CHAPTER 8 Playing By the Rules? Use the Business Rule Engine . . . . . . . . . . . . 305
PART 3 You Mean You Aren’t a Developer?CHAPTER 9 BizTalk Server 2009 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
CHAPTER 10 Deploying and Managing BizTalk Applications . . . . . . . . . . . . . . . . . . 393
CHAPTER 11 To Tune or Not to Tune? Nobody Should Ask That Question . . . . . . 453
CHAPTER 12 WCF Adapters: Standardizing Your Integration Endpoints . . . . . . . . 507
CHAPTER 13 WCF LOB Adapter SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
CHAPTER 14 Host Integration Server 2009 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
CHAPTER 15 The Enterprise Service Bus Toolkit 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . 645
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
vii
Contents
About the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
PART 1 Readme.1st
CHAPTER 1 BizTalk in the Enterprise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
What Is in the Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Common Enterprise Usage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
BizTalk Is Not Dead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
BizTalk Is Not SOA, and SOA Is Not BizTalk . . . . . . . . . . . . . . . . . . . . . . . . . 10
The Rise and Fall and Rise of SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
BizTalk and the Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
New BizTalk Solution Checklist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
What Are the Team’s Current Core Skills? What Skills Will the Team Need to Attain? . . . . . . . . . . . . . . . . . . . 12
What Type of Upstream and Downstream Systems Are You Connecting With?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
What Are the Project Timelines? Will the Team Be Using BizTalk Exclusively to Decrease Development Time? . . . . . . . . . 15
Is There Enough in the Budget to Implement BizTalk? . . . . . . . . . . . 16
How Many Servers Are Required to Implement a BizTalk Solution? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
How Much Custom Code Are You and Your Team Willing to Create? Would You Rather Use Completely Out-of-the-Box Functionality? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Is BizTalk Suited for the Application in Question? . . . . . . . . . . . . . . . 23
Will Every Transaction in the System Need Monitoring? Will the Tracked Data Need Saving for Archiving Purposes? . . . 25
CONTENTSviii
CHAPTER 2 Starting a New BizTalk Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Starting Preliminary Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Creating Your Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Isolated Development Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Using Virtual Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Organizing Source Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Structuring and Integrating with Visual Studio . . . . . . . . . . . . . . . . . . . . . . . 38
Single Visual Studio Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Multiple Visual Studio Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Developer-Independent Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Application Lifecycle Management with BizTalk Server . . . . . . . . . . . . . . . 43
Enhancements in the Visual Studio Environment . . . . . . . . . . . . . . . . 44
Improvements in the BizTalk Project System . . . . . . . . . . . . . . . . . . . 45
TFS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Enhanced Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Organizing Artifacts in BizTalk Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
BizTalk Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
BizTalk’s Administration Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Creating a Build-and-Integration Environment . . . . . . . . . . . . . . . . . . . . . . . 49
Five-Step Build Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Using Test-Driven Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Creating a BizTalk Installation Package . . . . . . . . . . . . . . . . . . . . . . . . 57
BizTalk Assembly Naming and Versioning . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Side-by-Side Deployments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Side-by-Side Deployment Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . 61
BizTalk Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
BizTalk Artifact Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
BizTalk Messaging Artifacts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
PART 2 BizTalk Revealed
CHAPTER 3 Thinking Inside the Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Understanding the Message Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
The Messagebox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Messaging Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
CONTENTS ix
Using XML Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Understanding Property Promotions . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Using Port Filters and Content-Based Routing . . . . . . . . . . . . . . . . . . 89
Using System Property Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Tracking and Message Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Handling Failed Messages and Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
The BizTalk Management Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
CHAPTER 4 Pipelining and Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Getting Started with Pipeline Development. . . . . . . . . . . . . . . . . . . . . . . . . 117
Pipeline Stages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Understanding Pipeline Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Understanding Interchanges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Overview of Recoverable Interchange Handling . . . . . . . . . . . . . . . . 121
Configuring Recoverable Interchanges. . . . . . . . . . . . . . . . . . . . . . . . 123
Using the Default Pipelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Routing Binary Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Using BizTalk Framework 2.0 Reliable Messaging . . . . . . . . . . . . . . . . . . 128
BizTalk Framework Assembler and Disassembler Pipeline Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Working with BizTalk Framework Properties WithinOrchestrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Acknowledgment Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Custom Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Component Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Component Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Key BizTalk API Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Writing Your First Pipeline Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Creating More Complex Pipeline Components . . . . . . . . . . . . . . . . . . . . . . 138
Dynamically Promoting Properties and Manipulating the Message Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Schema Selection in VS .NET Designer . . . . . . . . . . . . . . . . . . . . . . . 142
Validating and Storing Properties in the Designer . . . . . . . . . . . . . . 145
Custom Disassemblers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
CONTENTSx
CHAPTER 5 Pipeline Component Best Practices and Examples . . . . . . 153
Creating Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Using BizTalk Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
VirtualStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
SeekableReadOnlyStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
XPathReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Pipeline Component Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Dealing with Extremely Large Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Caveats and Gotchas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Large Message Decoding Component (Receive Side) . . . . . . . . . . . 164
Large Message Encoding Component (Send Side). . . . . . . . . . . . . . 173
Dealing with Compressed Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Sending Simple Zipped Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Sending Multiple Zipped Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Receiving Zipped Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Using PGP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
PGP Encode Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
PGP Decode Component. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
The Databased Disassembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
CHAPTER 6 BizTalk Design Patterns and Practices . . . . . . . . . . . . . . . . . . . 211
Implementing Dynamic Parallel Orchestrations . . . . . . . . . . . . . . . . . . . . . 211
When to Use Them. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Broker Implementation Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Handling Ordered Delivery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Building a Resequencer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Resequencer Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
BizTalk Components Needed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Building the Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Building a Resequencing Aggregator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Solution 1: Status Quo—Messages Received as Independent Interchanges. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Solution 2: Not So Status Quo—Messages Received as a Batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
CONTENTS xi
Editing and Resubmitting Suspended Messages . . . . . . . . . . . . . . . . . . . . 227
Strategy for Edit and Resubmit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Pulling Data from the Suspended Queue . . . . . . . . . . . . . . . . . . . . . . 227
Canonical Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Clients for Editing the Message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Additional Workflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Moving Correct Data Back into BizTalk . . . . . . . . . . . . . . . . . . . . . . . 228
Sample Flows for Edit and Resubmit . . . . . . . . . . . . . . . . . . . . . . . . . 229
Pseudo-Walkthrough to Perform Edits and Resubmits . . . . . . . . . . 230
Managing Exceptions in Orchestrations. . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
The Exception Management Challenge . . . . . . . . . . . . . . . . . . . . . . . 241
BizTalk Server 2009 Failed Message Routing As a Blueprint. . . . . 243
Failed Orchestration Routing API for BizTalk 2009 . . . . . . . . . . . . . 246
Running the EAIProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Processing and Retrieving Messages and Exceptions from the Fault Message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Beyond the Next Horizon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Implementing a Scatter/Gather Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
CHAPTER 7 What the Maestro Needs to Know: Advanced Orchestration Concepts . . . . . . . . . . . . . . . . . . . . . . . . 269
What an Orchestration Is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
What the Orchestration Engine Provides . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Do You Really Need an Orchestration? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Know Your Instruments (Shapes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
What Transactions Mean and Cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Atomic Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Long-Running Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Threading and Persistence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Dehydration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
The Dehydration Algorithm and Thresholds . . . . . . . . . . . . . . . . . . . 284
The Cost of Parallel Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Correlation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
What Is Correlation? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Convoys: Serial vs. Parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Dynamic Message Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Low-Volume Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
High-Volume Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
CONTENTSxii
Pitfalls of Orchestration Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Batch Processing and Legacy Systems . . . . . . . . . . . . . . . . . . . . . . . 295
Interactive Orchestrations (the Request/Response Approach) . . . . 295
Calling an Assembly or Sending a Message to a Web Service . . . 296
Error Handling and Suspended Instances . . . . . . . . . . . . . . . . . . . . . 296
Orchestration Engine Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 297
CHAPTER 8 Playing By the Rules? Use the Business Rule Engine . . . 305
What Is a Business Rule Engine? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
What Are Business Rules? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
When to Use the BRE? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
What Are the Artifacts That Constitute a Business Rule? . . . . . . . . . . . . . 309
Facts and Vocabularies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Rules and Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
The Business Rule Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Creating Vocabularies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Creating Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
How Does the BRE Work? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Testing Business Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Going to Production. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Executing Business Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Calling the Engine from Within an Orchestration . . . . . . . . . . . . . . . 335
Referencing a .NET Class from a Policy That Is Being Called from an Orchestration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Returning a Value from the BRE to the Calling Orchestration. . . . . 337
Calling the Engine from a .NET Application . . . . . . . . . . . . . . . . . . . . 338
Policy Chaining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
PART 3 You Mean You Aren’t a Developer?
CHAPTER 9 BizTalk Server 2009 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Configuration and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Administration Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Application Concept. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
BizTalk Server Administration Console. . . . . . . . . . . . . . . . . . . . . . . . 348
CONTENTS xiii
Scalability and High Availability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Windows Server 2008 64-bit Support . . . . . . . . . . . . . . . . . . . . . . . . 352
Hyper-V Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Scalability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
High Availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Maintaining the BizTalk Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
SQL Agent Job Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Backup Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Restore Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Disaster Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
How Does BizTalk Log Shipping Work? . . . . . . . . . . . . . . . . . . . . . . . 381
Configuring the Destination System for Log Shipping . . . . . . . . . . . 384
BizTalk Group Disaster Recovery Procedures . . . . . . . . . . . . . . . . . . 388
BizTalk Runtime Server Disaster Recovery Procedures . . . . . . . . . 389
Restore Procedures for BAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Other Disaster Recovery Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Related Non-BizTalk Application Disaster Recovery Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
CHAPTER 10 Deploying and Managing BizTalk Applications . . . . . . . . . . 393
BizTalk Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Important Deployment Artifacts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Binding Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Processing Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Deploying a BizTalk Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Steps in Deploying a BizTalk Application. . . . . . . . . . . . . . . . . . . . . . 400
MSI Export/Import/Install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Typical Deployment Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Administrative Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
BizTalk Administration Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
BTSTask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
WMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
ExplorerOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
MSBuild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
CONTENTSxiv
CHAPTER 11 To Tune or Not to Tune? Nobody Should Ask That Question. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
What to Do First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Gather Metrics on Expected Loads . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Prepare the Proper Environment and Gather Performance Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Three Phases of Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Ready-to-Bake BizTalk Performance Plan . . . . . . . . . . . . . . . . . . . . . . . . . 457
Phase 1: Plan Your Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Phase 2: Create, Execute, and Analyze . . . . . . . . . . . . . . . . . . . . . . . 462
Phase 3: Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
What to Keep in Mind When Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . 474
What to Keep in Mind About Your Code . . . . . . . . . . . . . . . . . . . . . . . 478
How to Tune Each Subsystem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
ASP.NET, SOAP, and HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
CLR Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
File Tuning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Throttling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
CHAPTER 12 WCF Adapters: Standardizing Your Integration Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
WCF and BizTalk 2009 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Exploring the Built-in WCF Adapter Transport Support . . . . . . . . . . 508
Using the WCF Service Publishing Wizard . . . . . . . . . . . . . . . . . . . . . 510
Publishing Your WCF Service from the Command Line. . . . . . . . . . 513
Consuming WCF Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Specifying Dynamic Port Properties . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Securing Your Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Transport, Message, or Mixed?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Using makecert to Implement Message-Level Encryption . . . . . . . 518
Using Metadata Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Publishing MEX Metadata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Customizing the SOAP Address Location. . . . . . . . . . . . . . . . . . . . . . 521
Customizing MEX with a WCF Behavior . . . . . . . . . . . . . . . . . . . . . . . 522
CONTENTS xv
Using the WCF-WSHttp Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Binding Configuration Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Security Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Message Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
WS-AtomicTransaction Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
End-to-End Example: Exposing a WCF Service . . . . . . . . . . . . . . . . . . . . . 530
Creating an Addition Orchestration . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Exposing the Orchestration via the WCF-CustomIsolated Adapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Securing Requests with Message-Level Certificate Encryption. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Creating the WCF Test Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
BizTalk Endpoint Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
The Problem with WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Where Does the MSE Help? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
Endpoint Virtualization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Operation Versioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
CHAPTER 13 WCF LOB Adapter SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Understanding the WCF LOB Adapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
WCF Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
WCF Transports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
WCF LOB Adapters vs. WCF Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Dynamic Metadata Discovery and Resolution. . . . . . . . . . . . . . . . . . 549
WCF LOB Adapter Vivisected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
The Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
The Metadata Handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
The Message Exchange Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Walk-Through. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Step 1: Generating Adapter Skeleton Code . . . . . . . . . . . . . . . . . . . . 553
Step 2: UI Logical Grouping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
Step 3: Implementing the Connection . . . . . . . . . . . . . . . . . . . . . . . . 564
Step 4: Implementing the Metadata Handlers. . . . . . . . . . . . . . . . . . 571
Step 5: Implementing the Message Exchange Handlers. . . . . . . . . 580
Step 6: Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Step 7: Consuming from an .NET Application . . . . . . . . . . . . . . . . . . 588
Step 8: Consuming from BizTalk Application . . . . . . . . . . . . . . . . . . 590
Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
CONTENTSxvi
CHAPTER 14 Host Integration Server 2009 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
Planning Your Host Integration Server Topology . . . . . . . . . . . . . . . . . . . . 597
Setup Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Host Integration Server Topologies . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Mainframe Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Using TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Using SNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Configuring the IP-DLC Link Service. . . . . . . . . . . . . . . . . . . . . . . . . . 603
SNA Load Balancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Transaction Integrator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Enabling Transaction Integrator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Deploying Transaction Integrator Servers . . . . . . . . . . . . . . . . . . . . . 613
Programming Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Importing the Copybook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Session Integrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
BizTalk Adapter for Host Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
Two-Phase Commit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Performance Testing and Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Performance Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Performance Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Troubleshooting and Diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Troubleshooting Plan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Host Integration Server Tracing and Log Analysis . . . . . . . . . . . . . . 640
CHAPTER 15 The Enterprise Service Bus Toolkit 2.0 . . . . . . . . . . . . . . . . . . . 645
BizTalk and the ESB Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Functional Capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Aligning the ESB with Your Core SOA Goals . . . . . . . . . . . . . . . . . . . 647
BizTalk as an ESB? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Getting Developers on Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
The Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Mediation Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
Resolvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Adapter Providers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Mediation Policies (Itineraries). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
CONTENTS xvii
The Functional Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
The Itinerary Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
ItineraryHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Pipeline Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Orchestrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
Resolver Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Adapter Provider Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Business Rule Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Working with Itineraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
Setting Up a New Itinerary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
Defining Your Itinerary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Validating and Testing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
Using the Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
xix
About the Authors
GEORGE DUNPHY is an architect with Microsoft Consulting Services’ World Wide Technical Quality Assurance. He has 14 years of experience and focuses on technologies such as the Microsoft .NET Framework, BizTalk Server, Visual Basic and Visual Basic .NET, Active Server Pages, COM, SQL Server, XML, SOAP and WSDL, T-SQL, and web development. In addition to his technical skills, George focuses on managing development teams for large enterprise application development projects. He works with a variety of cus-tomers ranging from governments to Fortune 100 companies to start-ups. He lives in Ottawa, Canada, with his wife, Keressa, and their two children.
SERGEI MOUKHNITSKI is a senior software architect with Sanoraya Con-sulting in Ottawa, Canada. He has 14 years of experience developing software and systems. Currently, Sergei is consulting and managing out-sourcing projects.
His area of professional interest is Microsoft business process and integration technologies. His Microsoft certifications include MCAD.NET and MCSD.NET. Sergei has a master’s degree from the State Technical University in St. Petersburg, Russia.
STEPHEN KAUFMAN is a delivery architect with Microsoft Consulting Ser-vices focusing on middle-tier technologies and has worked with BizTalk since the original BizTalk CTP in 1999. In addition, he is an author, trainer, and speaker. He has written Microsoft Knowledge Base articles, a BizTalk tools white paper, and a number of other articles. He was a contributing author for the BizTalk Certification Exam 74-135. He also writes a blog focused on integration technologies at http://blogs.msdn.com/skaufman. Stephen has also spoken both nationally and interna-tionally at events such as TechEd North America, TechEd EMEA,
Microsoft’s SOA & BPM Conference, Microsoft’s Developer Days, and a number of other conferences and events.
ABOUT THE AUTHORSxx
PETER KELCEY is a senior technology specialist with Microsoft Canada who focuses on architectures and technologies related to connected sys-tems and integration. He focuses on concepts such as service-oriented architecture, Enterprise Service Bus, enterprise application integration, business-to-business integration, business process management, model-ing, and RFID.
Within his current role, he is responsible for technical presales activi-ties across Microsoft’s enterprise clients located in central and eastern Canada. An early adopter of Microsoft’s Enterprise Service Bus Toolkit,
he developed Microsoft’s first ESB “training in a box” course as part of his activities to drive developer readiness for this new technology.
Prior to his current role, he spent more than a decade in the IT consulting world where he architected, developed, and delivered enterprise applications for large organizations across Canada while working for TELUS Business Solutions.
An experienced presenter, Peter has spoken at a wide range of conferences, events, and seminars including Microsoft’s SOA Conference, Microsoft’s TechReady Conference, Cana-dian Strategic Architecture Forum, Canadian Financial Architects Summit, and the Aspiring Architect’s Webcast Series.
HAROLD VALENTIN CAMPOS URQUIZA is a consultant with Microsoft Con-sulting Services specializing in SOA, legacy integration, collaboration, and e-commerce. He has more than ten years of experience in IT business around the world. He has managed, architected, and developed solutions in the government, defense, banking, energy, telecommunications, retail, mining, and health-care sectors.
Harold has a bachelor’s degree in systems engineering at the pres-tigious National University of Engineering in Lima, Peru, where he was ranked second in his class. He is also a Microsoft Certified Solutions Devel-
oper and Microsoft Certified Technology Specialist in BizTalk and SharePoint technologies.Currently, Harold lives in Toronto, Canada, spending most of his time working in legacy
integration and collaboration solutions for Canadian customers. You can reach him at [email protected].
DAVID PETERSON is a solution architect with Microsoft Consulting Services specializing in enterprise application architecture and development. He has 18 years of experience in soft-ware development with both Microsoft and a large Canadian retail organization and has extensive experience is architecting, building, and deploying enterprise-scale applications in mission-critical environments. David is a Microsoft Certificated Solution Developer focusing on technologies such as Microsoft .NET Framework, Commerce Server, SQL Server, Visual C#, Visual Basic, Windows Communication Foundation, Windows Workflow, Smart Client, and ASP.NET web development.
xxi
About the Technical Reviewer
RICHARD SEROTER is a solutions architect for an industry-leading biotech-nology company, a Microsoft MVP for BizTalk Server, and a Microsoft Connected Technology Advisor. He has spent the majority of his career consulting with customers as they planned and implemented their enter-prise software solutions. Richard worked first for two global IT consulting firms, which gave him exposure to a diverse range of industries, technolo-gies, and business challenges. Richard then joined Microsoft as a SOA/BPM technology specialist where his sole objective was to educate and collaborate with customers as they considered, designed, and architected
BizTalk solutions. One of those customers liked him enough to bring him onboard full-time as an architect after they committed to using BizTalk Server as their Enterprise Service Bus. Once the BizTalk environment was successfully established, Richard transitioned into a solutions architect role where he now helps identify enterprise best practices and applies good architec-tural principles to a wide set of IT initiatives.
Richard is the author of the recently released SOA Patterns for BizTalk Server 2009 book, which covers how to apply good SOA principles to a wide variety of BizTalk scenarios.
Richard maintains a semipopular blog of his exploits, pitfalls, and musings with BizTalk Server and enterprise architecture at http://seroter.wordpress.com.
xxiii
Acknowledgments
First I have to thank the entire integration community at Microsoft. You are all really a world-class group of individuals, and it has been my pleasure to work with all of you during my career at Microsoft. I also have to thank the other authors in this book, without whom this book would not be possible. They have gone above and beyond what I asked of them, and they each gave this project 110%. I would really like to thank Richard Seroter for agreeing to be our tech reviewer. Richard is absolutely a gem for anything BizTalk related and has helped us so much in the creation of this revision of the book. I would also like to thank Jonathon Gennick at Apress for again being our editor and helping us navigate through the many issues both big and small that we came across while writing this book. Lastly, I have to thank Sergei for all his hard work and dedication to this project. You have made this project a success with your hon-esty and work ethic.
George Dunphy
I want to thank Richard Seroter, technical reviewer of the book. Richard’s expertise, advice, and comments have greatly improved the quality of the book. Richard, thanks!
I also would like to thank the entire Apress team: Jonathan Gennick, Kylie Johnston, Sofia Marchant, and Kelly Gunther. Special thanks to Kim Wimpsett for her tireless copyediting of my work and attention to detail. Kim, I thank you.
Sergei Moukhnitski
xxv
Introduction
A Tale of Two ProductsIn the beginning, when BizTalk was still in its infancy, there were two teams within Microsoft: the Commerce Server Team and the COM+ team. The Commerce Server Team was imple-menting technology it called Commerce Server Messaging Pipelines, which was essentially software that allowed applications to move messages from one system to another system using the commerce server framework. The goal was to abstract away the sending and receiving of messages from the transports that they used. For example, using this framework, a developer would not care about the physical implementation of how the messages were sent; that infor-mation would be abstracted away into another construct called a port. The port would talk to an adapter that handled the communication to and from the medium in question, whether it was a file system, an FTP server, or a web server.
At the same time, the COM+ team was implementing a new graphical workflow represen-tation system they called XLang. XLang schedules, as they were called, would compile down to a binary format and run within the XLang engine inside COM+. Each schedule would be drawn, not coded, to model a business process that the developer was trying to automate. This schedule could also access existing components that were present within the organization, assuming they used the principles of n-tiered architecture and had implemented a well-defined business object library.
The rumor was that when Bill Gates saw these two technologies, he immediately sought to find a way to combine them. His vision was to allow the developer to graphically draw a work-flow that modeled a business process and allow the information needed by that process to be received and sent freely within or outside an organization. He envisioned a “next-generation programming language” type of tool that allowed even the most nonprogrammer type to model a business process, interact with already defined business objects, and send and receive messages without having to worry about the details of how to physically implement this trans-port. With that, BizTalk 2000 was born.
The Platform TodayBizTalk Server has progressed into a world-class application platform capable of supporting the most complicated business requirements and scenarios. BizTalk can do this while provid-ing a rich development experience and allowing for the rapid development of solutions at a much faster pace than was capable even a few years ago.
In its early versions, the tool was powerful but not complete. The first two editions of BizTalk laid the groundwork for implementing real business process automation within many organizations, but it lacked the robustness of a real development environment, proper admin-istration tools, an application release management service, and several other features.
INTRODUCTIONxxvi
This book is targeted toward the architect. This is the person who, at the end of the day, wears either the success or failure of any software project. My hope is that this book will give that person the tools and know-how to successfully implement a BizTalk solution and feel comfortable that they have designed the best application possible.
Downloading the CodeThe source code for this book is available to readers on the book’s page at www.apress.com. Please feel free to visit the Apress web site and download all the code there. You can also check for errata and find related titles from Apress.
George Dunphy