第1章 WCF簡介 (WCF Overview) 1
1.1 SOA的基本概念和設計思想 3
1.2 WCF是對現有分布式通信技術的整合 4
1.3 構建一個簡單的WCF應用 6
步驟一、構建整個解決方案 7
步驟二、創建服務契約 8
步驟三 創建服務 8
步驟四 通過自我寄宿的方式寄宿服務 9
步驟五 創建客戶端調用服務 12
步驟六 通過IIS寄宿服務(S104) 15
第2章 地址(Address) 18
2.1. 統一資源標識符(URI) 20
2.1.1. HTTP/HTTPS 20
2.1.2. NET.TCP 21
2.1.3. Net.Pipe 21
2.1.4. Net.Msmq 21
2.2. EndpointAddress 23
2.2.1. 服務端終結點地址 23
2.2.2. 客戶端終結點地址 29
2.2.3. 地址報頭 32
2.3. 端口共享 42
2.3.1. 端口共享意義何在? 43
2.3.2. HTTP|HTTPS端口共享 43
2.3.3. TCP端口共享 43
2.4. 邏輯地址與物理地址 47
2.4.1. 服務的角色 47
2.4.2. 監聽地址與監聽模式 48
2.4.3. ClientViaBehavior行為 51
2.4.4. 實例演示:通過tcpTrace進行消息的路由(S205,S206) 53
2.5. 請求監聽與消息分發 60
2.5.1. 連接請求的監聽(S208) 60
2.5.2. 消息分發 61
第3章 綁定 (Binding) 64
3.1. 綁定模型 66
3.1.1. 信道與信道棧 66
3.1.2. 實例演示:直接通過綁定進行消息通信(S301) 67
3.1.3. WCF的綁定模型 70
3.2. 信道與信道棧 72
3.2.1. CommunicationObject 72
3.2.2. DefaultCommunicationTimeouts 73
3.2.3. IChannel和ChannelBase 74
3.2.4. 消息交換模式 75
3.2.5. 信道形狀 76
3.2.6. 會話信道 80
3.2.7. 實例演示:自定義信道(S302) 81
3.3. 信道監聽器 86
3.3.1. IChannelListener與ChannelListenerBase 86
3.3.2. 信道棧的創建/使用模式 87
3.3.3. 實例演示:自定義信道監聽器(S302) 87
3.4. 信道工廠 90
3.4.1. IChannelFactory與ChannelFactoryBase 90
3.4.2. 實例演示:自定義信道工廠(S302) 90
3.5. 綁定元素 93
3.5.1. 構成綁定的元素 93
3.5.2. 實例演示:自定義綁定元素(S302) 94
3.6. 綁定 96
3.6.1. 綁定是綁定元素的有序集合 96
3.6.2. 實例演示:創建自定義綁定(S302,S303) 98
3.6.3. 系統綁定 103
3.6.4. 自定義綁定 107
3.6.5. 綁定配置 108
第4章 契約 (Contracts) 111
4.1. 多角度認識契約 113
4.1.1. 抽象、接口與服務契約 113
4.1.2. 元數據與服務契約 113
4.1.3. WSDL、XSD與服務契約 114
4.1.4. 消息交換與服務契約 114
4.2. 定義服務契約 115
4.2.1. ServiceContractAttribute 115
4.2.2. OperationContractAttribute 119
4.2.3. 服務契約的繼承 125
4.3. 契約描述 129
4.3.1. ContractDescription 129
4.3.2. OperationDescription 130
4.3.3. MessageDescription 131
4.4. 消息交換模式與服務操作 136
4.4.1. 請求-回復模式 136
4.4.2. 單向模式 139
4.4.3. 雙工模式 140
4.4.4. 實例演示:通過雙工通信實現回調 141
4.5. 多線程與異步操作 149
4.5.1. 異步服務調用 149
4.5.2. 異步服務實現 153
4.6. 操作的選擇與執行 156
4.6.1. DispatchOperation與ClientOperation 156
4.6.2. 操作的選擇 157
4.6.3. 操作的執行 158
第5章 序列化 (Serialization) 160
5.1. XmlSerializer 162
5.1.1. XmlSerializer默認的序列化規則 162
5.1.2. 通過定制XmlSerializer控制XML結構 165
5.1.3. 通過定制數據類型控制XML結構 166
5.2. 數據契約 168
5.2.1. 數據契約的本質 168
5.2.2. DataContractAttribute與DataMemberAttribute 169
5.3. DataContractSerializer 171
5.3.1. DataContractSerializer的序列化規則 172
5.3.2. 如何限定序列化對象的數量? 174
5.3.3. 如何保持對象現有的引用結構? 177
5.4. 已知類型 181
5.4.1. 未知類型導致序列化失敗 181
5.4.2. DataContractSerializer的已知類型集合 182
5.4.3. 基於接口的序列化 183
5.4.4. KnownTypeAttribute 184
5.4.5. ServiceKnownTypeAttribute 186
5.5. 泛型數據契約與集合數據契約 188
5.5.1. 泛型數據契約 188
5.5.2. 數據契約集合 191
5.5.3. 集合數據契約 195
5.5.4. 字典數據契約 198
5.6. 等效數據契約 203
5.6.1. 數據契約的等效性 203
5.6.2. 數據成員的添加 203
5.6.3. 數據成員的刪除 207
5.6.4. 數據契約代理 210
5.7. 序列化在WCF框架中的實現 214
5.7.1. 消息格式化器 214
5.7.2. DataContractSerializer還是XmlSerializer? 215
5.7.3. 實例演示:通過自定義消息格式化器壓縮消息(S521) 217
第6章 消息 (Message) 225
6.1. SOAP與WS-Addressing 227
6.1.1. SOAP 227
6.1.2. WS-Addressing 227
6.2. 消息 230
6.2.1. 消息版本 230
6.2.2. 如何創建消息 232
6.2.3. 消息的基本操作 238
6.3. 消息報頭與消息屬性 243
6.3.1. MessageHeaderInfo 243
6.3.2. MessageHeader 244
6.3.3. MessageHeader<T> 245
6.3.4. MessageHeaders 245
6.3.5. 消息屬性 248
6.3.6. 實例演示:通過消息報頭和消息屬性實現上下文信息的傳播(S612) 251
6.4. 消息契約 255
6.4.1. MessageContractAttribute 255
6.4.2. MessageHeaderAttribute 258
6.4.3. MessageBodyMemberAttribute 258
6.4.4. 消息契約與操作 258
6.5. XML編碼 262
6.5.1. XmlDictionary 262
6.5.2. XmlDictionaryWriter 264
6.5.3. XmlDictionaryReader 270
6.6. 消息編碼 272
6.6.1. 消息編碼器 272
6.6.2. 消息編碼器工廠 273
6.6.3. 消息編碼綁定元素 273
6.6.4. 消息編碼與綁定 274
6.6.5. 消息編碼的實現 277
6.6.6. 實例演示:通過自定義消息編碼器實現消息壓縮(S620) 277
第7章 服務寄宿 (Hosting) 285
7.1. 服務描述 287
7.1.1. ServiceDescription 287
7.1.2. WCF的四大行為 289
7.2. ServiceHost 293
7.2.1. 服務描述的創建(S701) 293
7.2.2. 運行時框架體系的構建 299
7.2.3. 服務的批量寄宿(S702) 302
7.2.4. 自定義ServiceHost(S703) 305
7.3. IIS與ASP.NET架構設計 308
7.3.1. IIS 5.x與ASP.NET 308
7.3.2. IIS 6.0與ASP.NET 309
7.3.3. IIS 7.0與ASP.NET 310
7.3.4. ASP.NET管道 313
7.4. IIS寄宿 317
7.4.1. .svc文件 318
7.4.2. 實例演示:如何使用自定義ServiceHost(S704) 319
7.4.3. ASP.NET並行模式 320
7.4.4. ASP.NET兼容模式 325
7.4.5. 非HTTP協議寄宿 328
7.5. Windows 服務寄宿(S708) 332
第8章 客戶端 (Client) 338
8.1. 一個精簡版的WCF框架 340
8.1.1. 從透明代理和真實代理說起 340
8.1.2. 服務代理的真實代理是什么? 341
8.1.3. 服務調用的大致流程 342
8.1.4. 實例演示:創建一個WCF框架模擬程序(S801) 343
8.2. ChannelFactory<TChannel> 353
8.2.1. 終結點是ChannelFactory<TChannel>的核心 353
8.2.2. 一個特殊的信道工廠 353
8.2.3. ChannelFactory<TChannel>的開啟 354
8.3. 服務代理 357
8.3.1. 服務代理的創建 357
8.3.2. 四個重要的接口 358
8.3.3. 服務調用 360
8.4. ClientBase<TChannel> 363
8.4.1. ClientBase<TChannel>與ChannelFactory<TChannel> 363
8.4.2. ChannelFactory<TChannel>緩存機制 364
8.5. 服務代理關閉與中止 367
8.5.1. 沒有關閉服務代理會帶來怎樣的后果? 367
8.5.2. 數據報信道與會話信道 369
8.5.3. 服務代理、ChannelFactory<TChannel>和ClientBase<TChannel>的關閉 369
8.5.4. 服務代理的中止 371
8.5.5. 通過RealProxy實現服務代理的自動關閉和中止(S810) 374
8.5.6. 通過委托實現服務代理的自動關閉和中止(S811) 376
第9章 實例管理與會話 (Instancing and Sessions) 380
9.1. 實例上下文與實例上下文模式 382
9.1.1. 實例上下文 382
9.1.2. 實例上下文模式 383
9.1.3. 實例服務行為 384
9.1.4. 實例上下文提供者與實例提供者 385
9.1.5. 實例上下文提供機制 386
9.2. 單調模式 388
9.2.1. 實例演示:單調模式下實例的創建與回收(S901) 388
9.2.2. 單調模式實例上下文提供機制 389
9.2.3. 實例演示:通過自定義實例上下文提供者實現單調模式(S902) 389
9.2.4. 單調模式與可伸縮性 391
9.3. 單例模式 393
9.3.1. 已知單例和隱式單例 393
9.3.2. 實例演示:單例模式下實例的創建與回收(S903) 393
9.3.3. 單例模式實例上下文提供機制 395
9.3.4. 實例演示:通過自定義實例上下文提供者實現單例模式(S904) 395
9.3.5. 單例模式下的並發與同步 397
9.4. 會話 399
9.4.1. 客戶端識別機制 399
9.4.2. 會話契約 399
9.4.3. 會話綁定 404
9.5. 會話模式 406
9.5.1. 實例演示:會話模式下實例的創建與回收(S910) 406
9.5.2. 會話模式實例上下文提供機制 406
9.5.3. 實例演示:通過自定義提供者會話模式(S911) 408
9.5.4. 會話實例上下文模式與可伸縮性 410
9.6. 會話模式、綁定與實例上下文模式 412
9.6.1. 單調服務決定於單調實例上下文模式 412
9.6.2. 單例服務決定於單例實例上下文模式 414
9.6.3. 會話服務決定於會話信道(棧)和會話實例上下文模式 414
第10章 REST 服務(REST Service) 418
10.1. Web、REST和WCF REST 420
10.1.1. Web如此簡單 420
10.1.2. REST是什么? 421
10.1.3. WCF REST 423
10.2. Web HTTP編程模型模型 431
10.2.1. WebHttpBinding 431
10.2.2. WebGetAttribute與WebInvokeAttribute 434
10.2.3. WebHttpBehavior 439
10.2.4. WebServiceHost與WebServiceHostFactory 444
10.2.5. WebOperationContext 446
10.2.6. WebFaultException與WebFaultException<T> 447
10.3. URI模板 449
10.3.1. URI模板 449
10.3.2. UriTemplate 450
10.3.3. UriTemplateTable 451
10.3.4. WebHttpDispatchOperationSelector 452
10.4. 消息格式化 456
10.4.1. 客戶端消息格式化 456
10.4.2. 服務端消息格式化 467
10.5. 輸出緩存與條件獲取/更新 469
10.5.1. 輸出緩存 469
10.5.2. 條件獲取 472
10.5.3. 條件更新 476
第11章 WCF實例研究 (WCF in Practice) 480
11.1. VM簡介 482
11.1.1. 基本功能 482
11.1.2. 物理部署 484
11.1.3. 模塊划分 485
11.1.4. 層次設計 486
11.1.5. IoC的應用 489
11.1.6. AOP的應用 493
11.1.7. 身份認證 494
11.1.8. 異常處理 499
11.2. 模塊設計 503
11.2.1. 數據庫設計 503
11.2.2. Products模塊 505
11.2.3. Orders模塊 514
11.2.4. Infrastructure模塊 518
11.3. ASP.NET MVC項目 522
11.3.1. IoC集成 522
11.3.2. 異常處理 523
11.3.3. AccountController 524
11.3.4. ProductsController 526
11.3.5. OrdersController 528