Enterprise Solution Patterns Using Microsoft .NET
利用Microsoft.NET构建企业级解决方案模式
附录A, Pattlets,展示本向导提到的所有模式,但不讨论其细节。这些模式被命名为pattlets以跟目录中的其他模式区分。关于为什么pattlets被使用详见第二章“组织模式”
Chapter 1, “Patterns for Building Enterprise Solutions,” introduces the notion of a pattern, explains how a pattern documents simple, proven mechanisms, and shows how collections of patterns provide a common language for developers and architects. To illustrate these concepts, this chapter applies abbreviated versions of actual patterns to real-life development situations.
Chapter 2, “Organizing Patterns,” explains how patterns emerge at different levels of abstraction and across a variety of domains. This chapter explores pattern levels in detail and outlines an organizing frame that helps you find relevant patterns quickly. The chapter then demonstrates how patterns provide a vocabulary to efficiently describe complex solutions without sacrificing detail.
Chapters 3 through 6 present a catalog of 27 patterns, which are grouped into clusters. Each chapter starts by describing how the patterns in a particular cluster are related and then gives direction on when to use the patterns. For implementation patterns, code examples are written in C# and are for example purposes only. The example code is not meant to be used in production.
Chapter 3, “Web Presentation Patterns,” describes design and implementation patterns related to constructing dynamic Web applications. Depending on the size and the complexity of the application, different design tradeoffs have to be made. The Web Presentation patterns cluster offers a number of pattern alternatives that illustrate the varied types of applications and their resulting tradeoffs.
Chapter 4, “Deployment Patterns,” helps reduce the tension between application development and system infrastructure teams by offering guidance on how to optimally structure your applications and technical infrastructure to efficiently fulfill your solution requirements. The patterns discuss such topics as organizing your application into logical layers, refining layers to provide and consume services, organizing hardware into physical tiers, and allocating processes to processors with a deployment plan.
Chapter 5, “Distributed Systems Patterns,” introduces concepts relevant to both the Distributed Systems and Services patterns clusters, including the distinction between interface-based and service-based collaboration and the concept of near versus far links. Distributed Systems patterns, as defined here, focus on instance-based collaboration and near links.
Chapter 6, “Services Patterns,” briefly revisits collaboration concepts introduced in the previous chapter before presenting patterns that focus on collaboration between applications and external services. In contrast with Distributed Systems, Services patterns are primarily concerned with systems connected by far links using service-based collaboration.
Chapter 7, “Performance and Reliability Patterns,” discusses how enterprise solutions must reliably meet the needs of an unpredictable number of users, and often must operate 24 hours a day, seven days a week. Although there are many ways to increase performance and improve reliability, this patterns cluster focuses how to combine multiple systems that serve any number of applications or users for greater scalability and improved availability.
Appendix A, “Pattlets,” presents a list of patterns that this guide mentions, but that it does not discuss in detail. These patterns are named pattlets to distinguish them from the rest of the patterns in the catalog. For more information about why pattlets are used, see Chapter 2, “Organizing Patterns.”
.NET Data Access Architecture Guide
介绍
谁应该阅读此文档
你应该知道的
新特性
介绍ADO.NET
.NET数据提供者
存储过程与SQL语句比较
属性与构造函数参数比较
管理数据库连接
使用连接池
存储链接字符串
链接用法模式
错误处理
.NET Exception
从存储过程生成错误信息
性能
检索多行
检索单行
穿越防火墙连接
选择一个网络库
分布式事务
处理BLOBs
怎样存储BLOB数据
使用DataSets执行数据库更新
更新用法模式
初始化DataAdapters进行更新
使用存储过程
管理并发
正确更新空字段
更多信息
使用强类型数据集对象
使用强类型数据集
产生数据集类
事务
选择一个实物模型
使用手动事务
使用自动事务
分页
比较选项
使用SqlDataAdapter的Fill方法
使用ADO
使用手动配置
附录
如何让一个.NET类允许对象构造
如何使用SqlDataAdapter检索多行数据
如何使用SqlDataReader检索多行数据
如何使用XmlReader检索多行数据
如何使用存储过程输出参数检索单行数据
如何使用SqlDataReader检索单行数据
如何使用ExecuteScalar检索一个单独项
如何使用存储过程输出或者返回参数检索一个单独项
如何使用SqlDataReader检索一个单独项
如何编码ADO.NET手动事务
如何通过SQL执行事务
如何编码一个.net事务类
作者
合作者
附加信息
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Who Should Read This Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
What You Must Know . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
What’s New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Introducing ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
.NET Data Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Stored Procedures vs. Direct SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Properties vs. Constructor Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Managing Database Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Using Connection Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Storing Connection Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Connection Usage Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
.NET Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Generating Errors from Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Retrieving Multiple Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Retrieving a Single Row . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Retrieving a Single Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Connecting Through Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Choosing a Network Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Distributed Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Handling BLOBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Where to Store BLOB Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Performing Database Updates with DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Update Usage Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Initializing DataAdapters for Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Using Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Managing Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Correctly Updating Null Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Using Strongly Typed DataSet Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
When to Use Strongly Typed DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Generating DataSet Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Working with Null Data Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Choosing a Transaction Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Using Manual Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Using Automatic Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Data Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Comparing the Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Using the Fill Method of SqlDataAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Using ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Using a Manual Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Appendix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
How to Enable Object Construction for a .NET Class . . . . . . . . . . . . . . . . . . . . . . . . 62
How to Use a SqlDataAdapter To Retrieve Multiple Rows . . . . . . . . . . . . . . . . . . . . 64
How to Use a SqlDataReader to Retrieve Multiple Rows . . . . . . . . . . . . . . . . . . . . . 64
How to Use an XmlReader to Retrieve Multiple Rows . . . . . . . . . . . . . . . . . . . . . . . 66
How to Use Stored Procedure Output Parameters to Retrieve a Single Row . . . . . . . 67
How to Use a SqlDataReader to Retrieve a Single Row . . . . . . . . . . . . . . . . . . . . . . 68
How to Use ExecuteScalar to Retrieve a Single Item . . . . . . . . . . . . . . . . . . . . . . . . 69
How to Use a Stored Procedure Output or Return Parameter
to Retrieve a Single Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
How to Use a SqlDataReader to Retrieve a Single Item. . . . . . . . . . . . . . . . . . . . . . 72
How to Code ADO.NET Manual Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
How to Perform Transactions with Transact-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
How to Code a Transactional .NET Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Collaborators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Additional Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3. Application Architecture for NET Designing Applications and Services.pdf
第一章
介绍
内容Roadmap
章节内容
分布式应用程序设计目标
服务和服务集成
应用程序和服务中的组件和层
一个简单应用场景
接下来是什么
第二章
设计应用程序或服务的组件
章节内容
组件类型
应用程序和服务的通用设计建议
设计展示层
设计用户接口组件
设计用户处理组件
设计业务层
业务组件和工作流
设计服务接口
展示数据并且通过层传递
业务实体设计建议
设计数据层
数据存储
数据访问逻辑组件
设计数据访问Helper组件
与服务集成
接下来是什么
第三章
安全性,操作性管理和通信策略
章节内容
设计安全策略
通用安全原则
认证
授权
安全通讯
资料管理
审查
设计操作性管理策略
例外管理
监控
配置
元数据
服务位置
设计通信策略
选择正确的通信模型
同步
通信建议
通信格式,模式和协议
前瞻一下
接下来是什么
第四章
物理部署和操作性需求
章节内容
部署应用程序组件
物理部署环境
计划应用程序组件的物理位置
组件之间的分布边界
将应用程序或服务分割为程序集
打包及分发应用程序组件
通用部署模式
基于网络的用户接口场景
富客户端用户接口场景
服务集成场景
生产,测试和阶段环境
操作性需求
扩展性
可用性
可维护性
安全性
可管理性
性能
第五章
附录
附录1:产品图
附录2:术语表
程序集
原子事务
可换性
组件
协约
会话
CRUD
DMZ(非武装区域)
静态数据路由
Emissary
Fiefdom
防火墙
等幂性
层
长期事务
消息
Orchestration
策略
服务
服务代理
服务接口
有状态
无状态
两阶段提交
工作流
区域
附录3:层次化架构
Chapter 1
Introduction 1
Contents Roadmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Chapter Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Goals of Distributed Application Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Services and Service Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Components and Tiers in Applications and Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
A Sample Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Chapter 2
Designing the Components of an Application or Service 11
Chapter Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Component Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
General Design Recommendations for Applications and Services . . . . . . . . . . . . . . . . 15
Designing Presentation Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Designing User Interface Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Designing User Process Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Designing Business Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Business Components and Workflows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Designing a Service Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Representing Data and Passing It Through Tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Recommendations for Business Entity Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Designing Data Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Data Stores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Data Access Logic Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Designing Data Access Helper Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Integrating with Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Chapter 3
Security, Operational Management, and Communications Policies 71
Chapter Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Designing the Security Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
General Security Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Authorization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Secure Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Profile Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Designing the Operational Management Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Exception Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Service Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Designing the Communications Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Choosing the Correct Communication Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Synchronicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Recommendations for Communications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Communication Format, Schema, and Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
A Look Ahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
What’s Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Chapter 4
Physical Deployment and Operational Requirements 119
Chapter Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Deploying Application Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Physical Deployment Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Planning the Physical Location of Application Components . . . . . . . . . . . . . . . . . . 125
Distribution Boundaries Between Components . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Partitioning Your Application or Service into Assemblies . . . . . . . . . . . . . . . . . . . . 131
Packaging and Distributing Application Components . . . . . . . . . . . . . . . . . . . . . . . 134
Common Deployment Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Web-Based User Interface Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Rich Client User Interface Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Service Integration Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Production, Test, and Staging Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Operational Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Scalability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Maintainability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Manageability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Chapter 5
Appendices 151
Appendix 1: Product Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Appendix 2: Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Atomic Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Commutativity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Contract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Conversation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Demilitarized Zone (DMZ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Dynamic Data Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Emissary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Fiefdom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Idempotency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Long-Running Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Orchestration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Service Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Service Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Stateful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Stateless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Two-Phase Commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Workflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Zone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Appendix 3: Layered Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Feedback and Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159