第1章 异常处理(Exception Handling) 1
1.1 WCF基本异常处理模式 2
1.1.1 当异常从服务端抛出 2
1.1.2 异常细节的传播 5
1.1.3 自定义异常信息 8
1.2 错误消息与FaultException异常 19
1.2.1 从SOAP Fault说起 19
1.2.2 唯一可被传播的异常:FaultException 22
1.2.3 FaultException异常和错误消息之间的转换 26
1.3 WCF异常处理体系剖析 34
1.3.1 FaultFormatter 35
1.3.2 ServiceDebugBehavior如何实现对异常细节传播 39
1.4 WCF异常处理扩展 42
1.4.1 处理器(ErrorHandler) 42
1.4.2 实例演示:通过WCF扩展实现与EntLib的集成(S105) 43
第2章 元数据(Metadata) 55
2.1 WCF元数据架构体系简介 56
2.1.1 WS-MEX 56
2.1.2 MetadataSection与MetadataSet 70
2.1.3 WCF元数据架构模型 73
2.2 元数据的导出 74
2.2.1 MetadataExporter和WsdlExporter 74
2.2.2 WSDL导出扩展和策略导出扩展 79
2.3 元数据的发布 81
2.3.1 元数据发布的实现者:ServiceMetadataBehavior 81
2.3.2 MEX终结点有何不同 83
2.3.3 ServiceMetadataBehavior是如何实现元数据发布的 85
2.4 元数据的获取和导入 97
2.4.1 自己动手实现元数据的获取 97
2.4.2 MetadaImporter与元数据导入 102
第3章 事务(Transaction) 108
3.1 WCF需要怎样的事务控制 109
3.1.1 什么是事务 109
3.1.2 事务的显式控制 110
3.1.3 分布式事务应用场景 113
3.2 Windows下的事务处理模型 114
3.2.1 事务模型中的三种角色 115
3.2.2 分布式事务是如何实现的 118
3.2.3 System.Transactions事务 121
3.3 事务处理协议:OleTx和WS-AT 135
3.3.1 WS-Coordination 136
3.3.2 WS-AT 140
3.4 WCF事务编程 142
3.4.1 通过服务契约决定事务流转的策略 142
3.4.2 通过绑定实施事务的流转 144
3.4.3 通过服务(操作)行为控制事务 153
3.4.4 实例演示:创建事务型服务(S301) 156
3.5 WCF事务实现原理 166
3.5.1 TransactionFlowAttribute行为 166
3.5.2 事务绑定 166
3.5.3 事务的自动登记(Enlistment) 173
3.5.4 OleTx提升(OleTx Upgrade)机制 174
第4章 并发与限流(Concurrency and Throttling) 176
4.1 并发与实例上下文模式 177
4.1.1 同一个服务实例上下文同时处理多个服务调用请求 177
4.1.2 并发中的同步 180
4.1.3 并发与实例上下文模式 182
4.2 同步上下文与线程亲和性 196
4.2.1 倘若去除ServiceBehaviorAttribute的UseSynchronizationContext属性 196
4.2.2 什么是同步上下文(SynchronizationContext) 197
4.2.3 WCF中的同步上下文与线程亲和性 199
4.3 流量限制(Throttling) 203
4.3.1 如何进行限流控制 203
4.3.2 WCF限流控制是如何实现的 206
第5章 可靠会话(Reliable Sessions) 210
5.1 可靠消息传输 211
5.1.1 从TCP对报文段的可靠交付机制说起 211
5.1.2 WS-RM简介 213
5.2 编写可靠会话服务 220
5.2.1 实例演示:通过WCF服务传输图片(S501) 220
5.2.2 可靠会话绑定 234
5.3 可靠会话的实现原理 241
5.3.1 从信道层看可靠会话的实现 241
5.3.2 从传输协议的局限性和消息交换模式看可靠会话的实现 251
5.3.3 可靠会话最佳实践 254
第6章 队列服务(Queued Service) 257
6.1 MSMQ简介 258
6.1.1 MSMQ能解决什么问题 258
6.1.2 MSMQ的安装 259
6.1.3 消息队列 261
6.1.4 MSMQ编程 263
6.2 从队列服务的终结点谈起 274
6.2.1 地址 274
6.2.2 绑定 276
6.2.3 契约 278
6.3 事务控制 279
6.3.1 MSMQ事务模型 279
6.3.2 客户端事务 280
6.3.3 服务端事务 282
6.3.4 事务性批量接收 283
6.4 会话 288
6.4.1 客户端会话 288
6.4.2 服务端会话 292
6.5 错误处理 296
6.5.1 接收重试 296
6.5.2 接收错误处理 300
6.5.3 死信消息处理 301
6.5.4 日志(Journaling)与跟踪(Tracing) 303
第7章 传输安全(Transfer Security) 305
7.1 传输安全简介 306
7.1.1 分布式应用中的传输安全隐患 306
7.1.2 非对称加密(Asymmetric Cryptography) 307
7.1.3 Transport与Message安全模式 312
7.2 认证 318
7.2.1 认证与凭证(User Credential) 318
7.2.2 绑定、安全模式与客户端凭证类型 323
7.2.3 服务认证 335
7.2.4 客户端认证 351
7.2.5 ServiceCredentials V.S.ClientCredentials 362
7.3 消息保护(Message Protection) 366
7.3.1 消息的保护级别 366
7.3.2 签名与加密的实现 374
7.3.3 安全会话(Secure Sessions) 380
第8章 授权与审核(Authorization and Auditing) 386
8.1 身份(Identity)与安全主体(Principal) 387
8.1.1 身份 387
8.1.2 安全主体 391
8.2 Windows用户组授权 397
8.2.1 Windows用户组授权与认证的关系 397
8.2.2 Windows用户组授权编程 398
8.2.3 实例演示:基于Windows用户组的声明式授权(S801) 399
8.2.4 身份模拟(Impersonation) 402
8.3 ASP.NET Roles授权 409
8.3.1 ASP.NET Roles提供程序 409
8.3.2 ASP.NET Roles授权与认证的无关性 410
8.3.3 ASP.NET Roles授权编程 411
8.3.4 实例演示:不同认证方式下的ASP.ENT Roles授权 413
8.3.5 实例演示:通过WCF扩展实现授权(S805) 418
8.4 自定义授权方式 423
8.4.1 通过自定义AuthorizationPolicy和ServiceAuthorizationManager创建安全主体 423
8.4.2 Claim和ClaimSet 426
8.4.3 自定义授权实现原理剖析 427
8.4.4 实例演示:通过自定义AuthorizationPolicy和ServiceAuthorizationManager实现授权(S806) 428
8.5 安全审核(Security Auditing) 434
8.5.1 ServiceSecurityAuditBehavior服务行为 434
8.5.2 安全审核的实现 435
8.5.3 实例演示:如何实施安全审核 436
第9章 扩展(Extension) 442
9.1 服务端架构体系的构建 443
9.1.1 再谈服务描述(Service Description) 443
9.1.2 终结点分发器选择机制 446
9.1.3 信道分发器(ChannelDispatcher) 448
9.1.4 终结点分发器(EndpointDispatcher) 452
9.1.5 分发运行时(DispatchRuntime) 453
9.1.6 分发操作(DispatchOperation) 460
9.2 客户端架构体系的构建 465
9.2.1 创建ChannelFactory<TChannel> 465
9.2.2 客户端运行时(ClientRuntime) 467
9.2.3 客户端操作(ClientOperation) 470
9.2.4 服务代理与服务调用 471
9.3 通过定义四种行为对WCF的扩展 474
9.3.1 WCF四种类型的行为 474
9.3.2 行为方法的执行 476
9.3.3 实例演示:通过扩展确保语言文化一致性(S901) 477
9.4 ServiceHost对WCF的扩展 488
9.4.1 自定义ServiceHost的本质:对服务描述进行定制 488
9.4.2 自定义ServiceHost的创建者:ServiceHostFactory 491
9.4.3 实例演示:通过扩展实现基于IoC的服务实例的创建(S903,S904) 493
第10章 WCF 4.0新特性(New Features in WCF 4.0) 503
10.1 简化开发体验 504
10.1.1 默认终结点 504
10.1.2 默认绑定配置 509
10.1.3 默认行为配置 510
10.1.4 标准终结点 513
10.1.5 无.svc文件服务激活 514
10.2 路由服务(Routing Service) 516
10.2.1 路由服务就是一个WCF服务 516
10.2.2 基于消息内容的路由策略 520
10.2.3 实例演示:如何使用路由服务(S1001) 527
10.2.4 其他路由特性 532
10.3 服务发现(Service Discovery) 534
10.3.1 WS-Discovery 534
10.3.2 可被发现的服务(Discoverable Service) 537
103.3 目标服务的探测和解析 544
10.3.4 实例演示:如何利用服务发现机制实现服务的“动态”调用(S1002) 550
10.3.5 DynamicEndpoint 553
10.3.6 服务上/下线通知 555
10.3.7 发现代理(Discovery Proxy) 563
附录A 实例列表 571
参考文献 573