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 Gennick Technical Reviewer: Richard Seroter Editorial Board: Clay Andres, Steve Anglin, Mark Beckner, Ewan Buckingham, Tony Campbell, Gary Cornell, 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 Johnston Copy Editor: Kim Wimpsett Associate Production Director: Kari Brooks-Copony Production Editor: Kelly Gunther Compositor: Linda Weidemann, Wolf Creek Publishing Services Proofreader: Nancy Sixsmith Indexer: John Collin Artist: April Milne Cover Designer: Anna Ishchenko Manufacturing 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 kn`ano)ju
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
“This page left intentionally blank.”
Contents at a Glance About the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
PART 1
N N N
Readme.1st
CHAPTER 1
BizTalk in the Enterprise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
CHAPTER 2
Starting a New BizTalk Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
PART 2
N N N
BizTalk Revealed
CHAPTER 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
N N N
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 v
“This page left intentionally blank.”
Contents About the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
PART 1 CHAPTER 1
N N N
Readme.1st
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
vii
viii
NCO NTENT S
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 CHAPTER 3
N N N
BizTalk Revealed
Thinking Inside the Box
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Understanding the Message Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 The Messagebox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Messaging Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
NC O N T E N T S
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 Within Orchestrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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
ix
x
NCO NTENT S
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
NC O N T E N T S
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
xi
xii
NCO NTENT S
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 CHAPTER 9
N N N
You Mean You Aren’t a Developer?
BizTalk Server 2009 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Configuration and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Administration Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Application Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 BizTalk Server Administration Console. . . . . . . . . . . . . . . . . . . . . . . . 348
NC O N T E N T S
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
xiii
xiv
NCO NTENT S
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
NC O N T E N T S
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
xv
xvi
NCO NTENT S
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
NC O N T E N T S
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
xvii
“This page left intentionally blank.”
About the Authors GEORGE DUNPHY is an architect with Microsoft Consulting Services’ World N 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 customers ranging from governments to Fortune 100 companies to start-ups. He lives in Ottawa, Canada, with his wife, Keressa, and their two children.
NSERGEI MOUKHNITSKI is a senior software architect with Sanoraya Consulting in Ottawa, Canada. He has 14 years of experience developing software and systems. Currently, Sergei is consulting and managing outsourcing 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.
NSTEPHEN KAUFMAN is a delivery architect with Microsoft Consulting Services 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 internationally 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.
xix
xx
NABO UT T HE AUT HOR S
NPETER KELCEY is a senior technology specialist with Microsoft Canada who focuses on architectures and technologies related to connected systems and integration. He focuses on concepts such as service-oriented architecture, Enterprise Service Bus, enterprise application integration, business-to-business integration, business process management, modeling, and RFID. Within his current role, he is responsible for technical presales activities 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, Canadian Strategic Architecture Forum, Canadian Financial Architects Summit, and the Aspiring Architect’s Webcast Series.
NHAROLD VALENTIN CAMPOS URQUIZA is a consultant with Microsoft Consulting 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 prestigious National University of Engineering in Lima, Peru, where he was ranked second in his class. He is also a Microsoft Certified Solutions Developer 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].
NDAVID PETERSON is a solution architect with Microsoft Consulting Services specializing in enterprise application architecture and development. He has 18 years of experience in software 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.
About the Technical Reviewer NRICHARD SEROTER is a solutions architect for an industry-leading biotechnology 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 enterprise software solutions. Richard worked first for two global IT consulting firms, which gave him exposure to a diverse range of industries, technologies, 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 architectural 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.
xxi
“This page left intentionally blank.”
Acknowledgments F
irst 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 honesty 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
xxiii
“This page left intentionally blank.”
Introduction A Tale of Two Products In 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 implementing 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 information 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 representation 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 welldefined 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 workflow 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 transport. With that, BizTalk 2000 was born.
The Platform Today BizTalk Server has progressed into a world-class application platform capable of supporting the most complicated business requirements and scenarios. BizTalk can do this while providing 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 administration tools, an application release management service, and several other features.
xxv
xxvi
NINT ROD UCTIO N
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 Code The 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
P A R T
1
Readme.1st The first two chapters of this book are designed to help architects and team leaders perform the most important tasks of any BizTalk project starting in its infancy. In these chapters, we cover the following: s 7HAT "IZ4ALK IS AND IS NOT DESIGNED FOR s !N OVERVIEW OF "IZ4ALK 3ERVERS KEY FEATURES s 7HERE "IZ4ALK FITS IN TO THE -ICROSOFT !PPLICATION 0LATFORM STACK s "IZ4ALK VERSUS SERVICE ORIENTED ARCHITECTURES s 2ESOURCE AND ESTIMATED BUDGET REQUIREMENTS s %XAMPLE "IZ4ALK 3ERVER CONFIGURATIONS s !NSWERS TO THE MOST COMMON QUESTIONS CONCERNING IMPLEMENTING "IZ4ALK IN A NEW project scenario
“This page left intentionally blank.”
CHAPT ER
1
BizTalk in the Enterprise T
he BizTalk Server 2009 product is a group of application services that facilitate the rapid creation of integration solutions. BizTalk Server is designed specifically to integrate disparate systems in a loosely coupled way. BizTalk Server is a toolkit, and within this toolkit you will find tools to help you build your application. The trick, like the wise Scottish man said, is “using the right tool for the right job.” The art of creating a BizTalk solution is exactly that—using the right tool from the BizTalk toolkit to accomplish the task at hand. If you were to look at two BizTalk projects that address identical problems, designed by two architects, you would most likely see two completely different-looking solutions. Both solutions would probably work; however, generally one solution would be more correct because it would properly use BizTalk’s tools as they were intended. This book will attempt to address how to properly use each of the tools within BizTalk in the manner in which they were intended. The other thing the book will do is show how each of the tools can be used to solve integration problems in an efficient way. In reality, though, most of the features within BizTalk are flexible enough that you can generally solve most problems using only one piece of the BizTalk puzzle. Since BizTalk allows you to address a problem in dozens of different ways, there is no one answer as to how to implement a BizTalk solution. To help address this issue of how best to implement a given solution, Microsoft has released several enterprise application guidelines1 for BizTalk 2009 that should alleviate some of this confusion; however, this problem will never go away. This book will build upon those patterns as well as provide some advanced concepts, examples, and patterns to allow software architects to properly build complex solutions using BizTalk Server.
7HAT )S IN THE 4OOLKIT Inside BizTalk Server, you will find several tools, each of which addresses a specific type of problem. Before learning about those tools, it is important to know what the architecture is for a “typical” BizTalk solution. Figure 1-1 illustrates the typical architecture for a BizTalk-based solution.
1 See http://msdn.microsoft.com/en-ca/biztalk/default.aspx for more information.
3
4
C H APT ER 1 N BIZ TA L K IN THE ENTER P R IS E
Orchestrations Business Rules Engine
<XML Message>
Inbound Receive Adapter
Receive Pipeline
Outbound
<XML Message>
<XML Message>
Send Pipeline
Send Adapter
<XML Message>
Incoming Message
Outgoing Message Subscriptions
MessageBox
Message Path
&IGURE