《wcf全麵解析:全2冊》
上冊
第1章 wcf簡介(wcf overview) 1
1.1 soa的基本概念和設計思想 2
1.2 wcf是對現有分布式通信技術的整閤 3
1.3 構建一個簡單的wcf應用 6
第2章 地址(address) 18
2.1 統一資源標識(uri) 19
2.1.1 http/https 19
2.1.2 net.tcp 20
2.1.3 net.pipe 20
2.1.4 net.msmq 21
2.2 endpointaddress 21
2.2.1 服務端終結點地址 22
2.2.2 客戶端終結點地址 29
2.2.3 地址報頭 32
2.3 端口共享 41
2.3.1 端口共享意義何在 43
2.3.2 http/https端口共享 43
2.3.3 tcp端口共享 44
.2.4 邏輯地址與物理地址 47
2.4.1 服務的角色 47
2.4.2 監聽地址與監聽模式 48
2.4.3 clientviabehavior行為 52
2.4.4 實例演示:通過tcptrace進行消息的路由(s205,s206) 54
2.5 請求監聽與消息分發 60
2.5.1 連接請求的監聽 61
2.5.2 消息分發 62
第3章 綁定(binding) 65
3.1 綁定模型 66
3.1.1 信道與信道棧 66
3.1.2 實例演示:直接通過綁定進行消息通信(s301) 68
3.1.3 wcf的綁定模型 71
3.2 信道與信道棧 72
3.2.1 communicationobject 72
3.2.2 defaultcommunicationtimeouts 74
3.2.3 ichannel和channelbase 75
3.2.4 消息交換模式 76
3.2.5 信道形狀 77
3.2.6 會話信道 81
3.2.7 實例演示:自定義信道(s302) 83
3.3 信道監聽器 87
3.3.1 ichannellistener與channellistenerbase 87
3.3.2 信道棧的創建/使用模式 88
3.3.3 實例演示:自定義信道監聽器(s302) 88
3.4 信道工廠 91
3.4.1 ichannelfactory與channelfactorybase 91
3.4.2 實例演示:自定義信道工廠(s302) 92
3.5 綁定元素 93
3.5.1 構成綁定的元素 94
3.5.2 實例演示:自定義綁定元素(s302) 95
3.6 綁定 96
3.6.1 綁定是綁定元素的有序集閤 97
3.6.2 實例演示:創建自定義綁定(s302,s303) 99
3.6.3 係統綁定 105
3.6.4 自定義綁定 109
3.6.5 綁定配置 110
第4章 契約(contract) 114
4.1 多角度認識契約 115
4.1.1 抽象、接口與服務契約 115
4.1.2 元數據與服務契約 116
4.1.3 wsdl、xsd與服務契約 116
4.1.4 消息交換與服務契約 117
4.2 定義服務契約 117
4.2.1 servicecontractattribute 117
4.2.2 operationcontractattribute 122
4.2.3 服務契約的繼承 128
4.3 契約描述 132
4.3.1 contractdescription 132
4.3.2 operationdescription 133
4.3.3 messagedescription 134
4.4 消息交換模式與服務操作 139
4.4.1 請求-迴復模式 139
4.4.2 單嚮模式 143
4.4.3 雙工模式 144
4.4.4 實例演示:通過雙工通信實現迴調 145
4.5 多綫程與異步操作 153
4.5.1 異步服務調用 154
4.5.2 異步服務實現 157
4.6 操作的選擇與執行 160
4.6.1 dispatchoperation與clientoperation 160
4.6.2 操作的選擇 162
4.6.3 操作的執行 163
第5章 序列化(serialization) 165
5.1 xmlserializer 166
5.1.1 xmlserializer默認的序列化規則 166
5.1.2 通過定製xmlserializer控製xml結構 169
5.1.3 通過定製數據類型控製xml結構 170
5.2 數據契約 171
5.2.1 數據契約的本質 172
5.2.2 datacontractattribute與datamemberattribute 172
5.3 datacontractserializer 174
5.3.1 datacontractserializer的序列化規則 176
5.3.2 如何限定序列化對象的數量 178
5.3.3 如何保持對象現有的引用結構 181
5.4 已知類型 184
5.4.1 未知類型導緻序列化失敗 184
5.4.2 datacontractserializer的已知類型集閤 186
5.4.3 基於接口的序列化 187
5.4.4 knowntypeattribute 188
5.4.5 serviceknowntypeattribute 190
5.5 泛型數據契約與集閤數據契約 191
5.5.1 泛型數據契約 191
5.5.2 數據契約集閤 195
5.5.3 集閤數據契約 199
5.5.4 字典數據契約 203
5.6 等效數據契約 208
5.6.1 數據契約的等效性 208
5.6.2 數據成員的添加 209
5.6.3 數據成員的刪除 212
5.6.4 數據契約代理 215
5.7 序列化在wcf框架中的實現 219
5.7.1 消息格式化器 219
5.7.2 采用datacontractserializer還是xmlserializer 221
5.7.3 實例演示:通過自定義消息格式化器壓縮消息(s521) 223
第6章 消息(message) 231
6.1 soap與ws-addressing 232
6.1.1 soap 232
6.1.2 ws-addressing 232
6.2 消息 234
6.2.1 消息版本 235
6.2.2 如何創建消息 237
6.2.3 消息的基本操作 244
6.3 消息報頭與消息屬性 249
6.3.1 messageheaderinfo 249
6.3.2 messageheader 250
6.3.3 messageheader[t] 251
6.3.4 messageheaders 252
6.3.5 消息屬性 255
6.3.6 實例演示:通過消息報頭和消息屬性實現上下文信息的傳播(s612) 259
6.4 消息契約 261
6.4.1 messagecontractattribute 262
6.4.2 messageheaderattribute 265
6.4.3 messagebodymemberattribute 265
6.4.4 消息契約與操作 266
6.5 xml編碼 268
6.5.1 xmldictionary 268
6.5.2 xmldictionarywriter 270
6.5.3 xmldictionaryreader 278
6.6 消息編碼 279
6.6.1 消息編碼器 279
6.6.2 消息編碼器工廠 280
6.6.3 消息編碼綁定元素 281
6.6.4 消息編碼與綁定 282
6.6.5 消息編碼的實現 285
6.6.6 實例演示:通過自定義消息編碼器實現消息壓縮(s620) 286
第7章 服務寄宿(hosting) 294
7.1 服務描述 295
7.1.1 servicedescription 295
7.1.2 wcf的四大行為 297
7.2 servicehost 301
7.2.1 服務描述的創建(s701) 301
7.2.2 運行時框架體係的構建 308
7.2.3 服務的批量寄宿(s702) 312
7.2.4 自定義servicehost(s703) 316
7.3 iis與asp.net架構設計 317
7.3.1 iis 5.x與asp.net 318
7.3.2 iis 6.0與asp.net 319
7.3.3 iis 7.0與asp.net 320
7.3.4 asp.net管道 324
7.4 iis寄宿 328
7.4.1 .svc文件 328
7.4.2 實例演示:如何使用自定義servicehost(s704) 330
7.4.3 asp.net並行模式 331
7.4.4 asp.net兼容模式 337
7.4.5 非http協議寄宿 341
7.5 windows服務寄宿(s708) 343
第8章 客戶端(client) 350
8.1 一個精簡版的wcf框架 351
8.1.1 從透明代理和真實代理說起 351
8.1.2 服務代理的真實代理是什麼 352
8.1.3 服務調用的大緻流程 353
8.1.4 實例演示:創建一個wcf框架模擬程序(s801) 354
8.2 channelfactory[tchannel] 365
8.2.1 終結點是channelfactory[tchannel]的核心 366
8.2.2 一個特殊的信道工廠 366
8.2.3 channelfactory[tchannel]的開啓 367
8.3 服務代理 369
8.3.1 服務代理的創建 369
8.3.2 四個重要的接口 370
8.3.3 服務調用 374
8.4 clientbase[tchannel] 376
8.4.1 clientbase[tchannel]與channelfactory[tchannel] 376
8.4.2 channelfactory[tchannel]緩存機製 378
8.5 服務代理的關閉與中止 380
8.5.1 沒有關閉服務代理會帶來怎樣的後果 380
8.5.2 數據報信道與會話信道 382
8.5.3 服務代理、channelfactory[tchannel]和clientbase[tchannel]的關閉 383
8.5.4 服務代理的中止 385
8.5.5 通過realproxy實現服務代理的自動關閉和中止(s810) 389
8.5.6 通過委托實現服務代理的自動關閉和中止(s811) 391
第9章 實例化與會話(instancing and session) 395
9.1 實例上下文與實例上下文模式 396
9.1.1 實例上下文 396
9.1.2 實例上下文模式 397
9.1.3 實例服務行為 398
9.1.4 實例上下文提供者與實例提供者 399
9.1.5 實例上下文提供機製 400
9.2 單調模式 402
9.2.1 實例演示:單調模式下實例的創建與迴收(s901) 402
9.2.2 單調模式實例上下文提供機製 403
9.2.3 實例演示:通過自定義實例上下文提供者實現單調模式(s902) 404
9.2.4 單調模式與可伸縮性 406
9.3 單例模式 407
9.3.1 已知單例和隱式單例 407
9.3.2 實例演示:單例模式下實例的創建與迴收(s903) 408
9.3.3 單例模式實例上下文提供機製 409
9.3.4 實例演示:通過自定義實例上下文提供者實現單例模式(s904) 410
9.3.5 單例模式下的並發與同步 412
9.4 會話 413
9.4.1 客戶端識彆機製 414
9.4.2 會話契約 414
9.4.3 會話綁定 419
9.5 會話模式 421
9.5.1 實例演示:會話模式下實例的創建與迴收(s910) 421
9.5.2 會話模式實例上下文提供機製 422
9.5.3 實例演示:通過自定義提供者實現會話模式(s911) 424
9.5.4 會話實例上下文模式與可伸縮性 426
9.6 會話模式、綁定與實例上下文模式 427
9.6.1 單調服務決定於單調實例上下文模式 427
9.6.2 單例服務決定於單例實例上下文模式 429
9.6.3 會話服務決定於會話信道(棧)和會話實例上下文模式 430
第10章 rest服務(rest service) 433
10.1 web、rest和wcf rest 434
10.1.1 web如此簡單 434
10.1.2 rest是什麼 435
10.1.3 wcf rest 438
10.2 web http編程模型 445
10.2.1 webhttpbinding 445
10.2.2 webgetattribute與webinvokeattribute 449
10.2.3 webhttpbehavior 454
10.2.4 webservicehost與webservicehostfactory 459
10.2.5 weboperationcontext 461
10.2.6 webfaultexception與webfaultexception[t] 463
10.3 uri模闆 465
10.3.1 uri模闆簡介 465
10.3.2 uritemplate 467
10.3.3 uritemplatetable 468
10.3.4 webhttpdispatchoperationselector 469
10.4 消息格式化 473
10.4.1 客戶端消息格式化 473
10.4.2 服務端消息格式化 485
10.5 輸齣緩存與條件獲取/更新 487
10.5.1 輸齣緩存 488
10.5.2 條件獲取 492
10.5.3 條件更新 496
第11章 wcf實例研究(wcf in practice) 500
11.1 vm簡介 501
11.1.1 基本功能 501
11.1.2 物理部署 504
11.1.3 模塊劃分 504
11.1.4 層次設計 506
11.1.5 ioc的應用 508
11.1.6 aop的應用 513
11.1.7 身份認證 515
11.1.8 異常處理 520
11.2 模塊設計 523
11.2.1 數據庫設計 524
11.2.2 products模塊 526
11.2.3 orders模塊 536
11.2.4 infrastructure模塊 540
11.3 asp.net mvc項目 544
11.3.1 ioc集成 545
11.3.2 異常處理 546
11.3.3 accountcontroller 547
11.3.4 productscontroller 549
11.3.5 orderscontroller 551
附錄a 實例列錶 557
下冊
第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
10.3.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
· · · · · · (
收起)