第1章 异常处理 (Exception Handling) 1
1.1. WCF基本异常处理模式 3
1.1.1. 当异常从服务端抛出(S101) 3
1.1.2. 异常细节的传播(S102) 5
1.1.3. 自定义异常信息 8
1.2. 错误消息与FaultException异常 18
1.2.1. 从SOAP Fault说起 18
1.2.2. 唯一可被传播的异常:FaultException 21
1.2.3. FaultException异常和错误消息之间的转换 24
1.3. WCF异常处理体系剖析 32
1.3.1. FaultFormatter 32
1.3.2. ServiceDebugBehavior如何实现对异常细节传播? 36
1.4. WCF异常处理扩展 38
1.4.1. 错误处理器(ErrorHandler) 38
1.4.2. 实例演示:通过WCF扩展实现同EntLib的集成(S105) 39
第2章元数据 (Metadata) 49
2.1. WCF元数据架构体系简介 51
2.1.1. WS-MEX 51
2.1.2. MetadataSection与MetadataSet 67
2.1.3. WCF元数据架构模型 70
2.2. 元数据的导出 72
2.2.1. MetadataExporter和WsdlExporter 72
2.2.2. WSDL导出扩展和策略导出扩展 77
2.3. 元数据的发布 79
2.3.1. 元数据发布的实现者:ServiceMetadataBehavior 79
2.3.2. MEX 终结点有何不同? 82
2.3.3. ServiceMetadataBehavior是如何实现元数据发布的? 84
2.4. 元数据的获取和导入 99
2.4.1. 自己动手实现元数据的获取 99
2.4.2. 通过MetadataExchangeClient获取元数据(S206) 103
2.4.3. MetadaImporter与元数据导入 105
第3章 事务 (Transaction) 111
3.1. WCF需要怎样的事务控制? 113
3.1.1. 什么是事务(Transaction)? 113
3.1.2. 事务的显式控制 113
3.1.3. 分布式事务(Distributed Transaction)应用场景 116
3.2. Windows下的事务处理模型 119
3.2.1. 事务模型中的三种角色 119
3.2.2. 分布式事务是如何实现的? 121
3.2.3. System.Transactions事务 125
3.3. 事务处理协议:OleTx和WS-AT 138
3.3.1. WS-Coordination 138
3.3.2. WS-AT 142
3.4. WCF事务编程 144
3.4.1. 通过服务契约决定事务流转的策略 144
3.4.2. 通过绑定实施事务的流转 146
3.4.3. 通过服务(操作)行为控制事务 155
3.4.4. 实例演示:创建事务型服务(S301) 158
3.5. WCF事务实现原理 168
3.5.1. TransactionFlowAttribute行为 168
3.5.2. 事务绑定 168
3.5.3. 事务的自动登记(Enlistment) 174
3.5.4. OleTx提升(OleTx Upgrade)机制 175
第4章 并发与限流 (Concurrency and Throttling) 177
4.1. 并发与实例上下文模式 179
4.1.1. 同一个服务实例上下文同时处理多个服务调用请求 179
4.1.2. 并发中的同步 182
4.1.3. 并发与实例上下文模式 184
4.2. 同步上下文与线程亲和性 201
4.2.1. 倘若去除ServiceBehaviorAttribute的UseSynchronizationContext属性(S407) 201
4.2.2. 什么是同步上下文(SynchronizationContext)? 203
4.2.3. WCF中的同步上下文与线程亲和性 205
4.3. 流量限制(Throttling) 210
4.3.1. 如何进行限流控制? 210
4.3.2. WCF限流控制是如何实现的? 212
第5章 可靠会话 (Reliable Sessions) 217
5.1. 可靠消息传输(Reliable Messaging) 219
5.1.1. 从TCP对报文段的可靠交付机制说起 219
5.1.2. WS-RM简介 220
5.2. 编写可靠会话服务 229
5.2.1. 实例演示:通过WCF服务传输图片(S501) 229
5.2.2. 可靠会话绑定 247
5.3. 可靠会话的实现原理 256
5.3.1. 从信道层看可靠会话的实现 256
5.3.2. 从传输协议的局限性和消息交换模式看可靠会话的实现 266
5.3.3. 可靠会话最佳实践 270
第6章 队列服务 (Queued Services) 273
6.1. MSMQ简介 275
6.1.1. MSMQ能解决什么问题? 275
6.1.2. MSMQ的安装 276
6.1.3. 消息队列 278
6.1.4. MSMQ编程 280
6.2. 从队列服务的终结点谈起 290
6.2.1. 地址 290
6.2.2. 绑定 291
6.2.3. 契约 293
6.3. 事务控制 295
6.3.1. MSMQ事务模型 295
6.3.2. 客户端事务 296
6.3.3. 服务端事务 297
6.3.4. 事务性批量接收 299
6.4. 会话 304
6.4.1. 客户端会话 304
6.4.2. 服务端会话 307
6.5. 错误处理 311
6.5.1. 接收重试(S605, S606) 311
6.5.2. 接收错误处理 314
6.5.3. 死信消息处理 315
6.5.4. 日志(Journaling )与跟踪(Tracing) 317
第7章 传输安全 (Transfer Security) 319
7.1 传输安全简介 321
7.1.1 分布式应用中的传输安全隐患 321
7.1.2 非对加密(Asymmetric Cryptography) 322
7.1.3 Transport与Message安全模式 326
7.2 认证(Authentication) 332
7.2.1 认证与凭证(User Credential) 332
7.2.2 绑定、安全模式与客户端凭证类型 337
7.2.3 服务认证 348
7.2.4 客户端认证 362
7.2.5 ServiceCredentials V.S. ClientCredentials 371
7.3 消息保护(Message Protection) 375
7.3.1 消息的保护级别 375
7.3.2 签名与加密的实现 382
7.3.3 安全会话(Secure Sessions) 387
第8章 授权与审核 (Authorization and Auditing) 393
8.1. 身份(Identity)与安全主体(Principal) 395
8.1.1. 身份(Identity) 395
8.1.2. 安全主体(Principal) 399
8.2. Windows用户组授权 406
8.2.1. Windows用户组授权与认证的关系 406
8.2.2. Windows用户组授权编程 406
8.2.3. 实例演示:基于Windows用户组的声明式授权(S801) 408
8.2.4. 身份模拟(Impersonation) 412
8.3. ASP.NET Roles授权 420
8.4.1. ASP.NET Roles提供程序 420
8.4.2. ASP.NET Roles授权与认证的无关性 421
8.4.3. ASP.NET Roles授权 编程 422
8.4.4. 实例演示:不同认证方式下的ASP.ENT Roles授权 424
8.4.5. 实例演示:通过WCF扩展实现授权(S805) 431
8.4. 自定义授权方式 437
8.4.1. 通过自定义AuthorizationPolicy和ServiceAuthorizationManager创建安全主体 437
8.4.2. Claim和ClaimSet 440
8.4.3. 自定义授权实现原理剖析 441
8.4.4. 实例演示:通过自定义AuthorizationPolicy和ServiceAuthorizationManager实现授权(S806) 443
8.5. 安全审核(Security Auditing) 451
8.5.1. ServiceSecurityAuditBehavior服务行为 451
8.5.2. 安全审核的实现 452
8.5.3. 实例演示:如何实施安全审核 453
第9章 扩展 (Extensions) 461
9.1. 服务端架构体系的构建 463
9.1.1. 再谈服务描述(Service Description)谈起 463
9.1.2. 终结点分发器选择机制 466
9.1.3. 信道分发器(ChannelDispatcher) 467
9.1.4. 终结点分发器(EndpointDispatcher) 471
9.1.5. 分发运行时(DispatchRuntime) 471
9.1.6. 分发操作(DispatchOperation) 477
9.2. 客户端架构体系的构建 483
9.2.1. 创建ChannelFactory<TChannel> 483
9.2.2. 客户端运行时(ClientRuntime) 485
9.2.3. 客户端操作(ClientOperation) 487
9.2.4. 服务代理与服务调用 488
9.3. 通过定义四种行为对WCF的扩展 492
9.3.1. WCF四种类型的行为 492
9.3.2. 行为方法的执行 493
9.3.3. 实例演示:通过扩展确保语言文化一致性(S901) 494
9.4. ServiceHost对WCF的扩展 504
9.4.1. 自定义ServiceHost的本质:对服务描述进行定制 504
9.4.2. 自定义ServiceHost的创建者:ServiceHostFactory 507
9.4.3. 实例演示:通过扩展实现基于IoC的服务实例的创建(S903,S904) 508
第10章 WCF 4.0新特性 (New Features in WCF 4.0) 517
10.1. 简化开发体验 519
10.1.1. 默认终结点 519
10.1.2. 默认绑定配置 524
10.1.3. 默认行为配置 525
10.1.4. 标准终结点 529
10.1.5. 无.svc文件服务激活 531
10.2. 路由服务(Routing Service) 534
10.3.1. 路由服务就是一个WCF服务 534
10.3.2. 基于消息内容的路由策略 538
10.3.3. 实例演示:如果使用路由服务(S1001) 546
10.3.4. 其他路由特性 552
10.3. 服务发现(Service Discovery) 555
10.3.1. WS-Discovery 555
10.3.2. 可被发现的服务(Discoverable Service) 558
10.3.3. 目标服务的探测和解析 566
10.3.4. 实例演示:如何利用服务发现机制实现服务的“动态”调用?(S1002) 572
10.3.5. DynamicEndpoint(S1003) 576
10.3.6. 服务上/下线通知 579
10.3.7. 发现代理(Discovery Proxy) 588