编辑推荐

适读人群:计算机程序员和计算机程序设计架构师
WCF 服务编程(第四版)》介绍了关于WCF深入、详细、系统的知识,可以帮助我们学习并构建可维护、可扩展、可复用的应用系统。《WCF 服务编程(第四版)》通过告诉我们“为什么”以及“如何”使用WCF进行开发来帮助我们精通WCF编程,让我们成长为一名出色的软件工程师。

内容简介

WCF 服务编程(第四版)》介绍了基于WCF开发面向服务应用程序的主题和技能;阐述了如何使用其内置的特性,如服务托管、实例管理、并发管理、事物、无连接队列调用、安全和WindowsAzureAppFabric服务总线;介绍了.NET4.6和ServiceFabric知识。此外,《WCF 服务编程(第四版)》还包含许多有用的代码、工具和帮助类,收集在名为ServiceModelEx里。它们可以用来提高代码生成率和WCF服务的质量。《WCF 服务编程(第四版)》不仅介绍了WCF编程和相关系统的知识,还介绍了相关的设计原则、提示、zui佳实践和误区,重点关注WCF的实际应用。
WCF 服务编程(第四版)》是一本关于现代软件工程的图书,不仅会让你成为一个WCF专家,更会让你成为一名出色的软件工程师。

作者简介

JuvalLöwy是IDesign的创始人,也是专注于系统与项目设计的软件架构师。
Juval已经培养了全球各地数百位架构师,分享他在软件架构、项目设计、系统开发领域的独到见解和知识技巧。Juval是微软硅谷的区域总监,参与过微软内部C#,WCF等相关技术的设计评审工作。微软授予他“软件传奇”(SoftwareLegend)称号以表彰其卓越的贡献,他是世界di.ji的.NET专家之一和行业领导者。
MichaelMontgomery是IDesign的软件架构师,专注于.NET分布式系统设计与微服务架构开发技术。他指导过许多开发者使用IDesign的方法成功按时、按预算、按质量交付过系统。他发表了许多软件架构领域的文章,分享自己独特的观点。他还经常在各种.NET技术大会上演讲。

精彩书评

如果你选择学习WCF,那么你的选择非常正确;如果你选择JuvalLöwy的书籍,那么无疑更是英明之举。因为他是世界上仅有的几位精通WCF的大师之一”
--RonJacobs,WCF高级技术专家,微软公司

目录

第1章WCF基础1
什么是WCF1
服务2
服务的执行边界3
WCF与位置透明度4
地址4
TCP地址5
HTTP地址6
IPC地址6
MSMQ地址6
WebSocket地址7
UDP地址7
契约7
服务契约8
托管11
IIS托管12
自托管13
WAS托管18
在IIS/WAS里自定义托管18
选择宿主19
绑定20
常用绑定21
选择绑定22
其他绑定23
使用绑定25
终结点25
以管理方式配置终结点26
以编程方式配置终结点30
默认终结点31
Configure()方法34
元数据交换36
基于HTTP-GET的元数据37
元数据交换终结点40
元数据浏览器46
行为配置的更多内容48
客户端编程49
生成代理50
以管理方式配置客户端54
以编程方式配置客户端59
WCF提供的测试客户端60
编程方式配置VS管理方式配置62
配置策略63
WCF体系结构63
宿主体系结构64
使用通道65
InProcFactory类67
传输会话层70
传输会话与绑定71
传输会话终止71
可靠性72
绑定、可靠性和有序消息73
配置可靠性73
必备有序传递75
第2章服务契约77
操作重载77
契约继承79
客户端契约层级80
服务契约分解与设计84
契约分解84
分解准则86
契约查询88
以编程方式处理元数据88
第3章数据契约95
序列化95
.NET序列化96
序列化的数据契约100
数据契约特性101
导入数据契约104
数据契约与Serializable特性106
推断数据契约107
组合数据契约109
数据契约事件110
共享数据契约112
数据契约层级113
已知类型114
服务已知类型116
多个已知类型117
配置已知类型118
数据契约解析器119
Objects与接口129
数据契约等效性131
序列化顺序132
版本控制134
新增成员135
缺失成员135
版本控制往返139
数据契约分解与设计141
数据契约设计142
数据契约分解142
操作分解151
数据传输对象(DTO)模式153
务实的模式使用154
枚举154
委托与数据契约156
泛型157
集合160
具体集合类型161
自定义集合163
CollectionDataContract特性163
引用集合165
字典集合165
第4章实例管理169
行为169
单调服务170
单调服务的优势171
配置单调服务172
单调服务与传输会话173
设计单调服务173
选择单调服务176
会话服务176
配置私有会话176
会话与可靠性181
会话ID182
会话终止183
单例服务184
初始化单例服务185
选择单例服务188
操作分界188
实例停止190
配置为ReleaseInstanceMode.None192
配置为ReleaseInstanceMode.BeforeCall193
配置为ReleaseInstanceMode.AfterCall193
配置为ReleaseInstanceMode.BeforeAndAfterCall193
显式停止194
使用实例停止195
持久化服务195
持久化服务与实例管理模式196
实例ID与持久化存储区196
显式实例ID197
消息头里的实例ID199
支持实例ID的上下文绑定202
自动持久化行为207
限流213
配置限流215
第5章操作221
请求/应答操作221
单向操作221
配置单向操作222
单向操作与可靠性223
单向操作与会话服务223
单向操作和异常224
回调操作225
回调契约226
客户端回调设置227
服务端的回调调用230
回调连接管理233
双向代理与类型安全235
回调契约层级240
事件241
流操作245
I/O流245
流操作与绑定246
流操作与传输247
第6章错误249
错误隔离和解耦249
错误屏蔽249
通道故障250
错误传播254
错误契约256
错误调试259
错误与回调265
错误处理扩展268
提供错误269
处理错误272
安装错误处理扩展274
宿主与错误扩展277
回调与错误扩展280
第7章事务283
恢复的挑战283
事务284
事务资源284
事务属性285
事务管理286
资源管理器289
事务传播289
事务流与绑定289
事务流与操作契约290
单调292
事务协议与管理器293
协议与绑定293
事务管理器294
事务管理器提升296
Transaction类297
环境事务298
本地事务VS分布式事务298
服务事务编程299
设置环境事务299
事务传播模式301
投票与提交308
事务隔离311
事务超时313
明确使用事务编程314
TransactionScope类314
事务流管理316
非服务客户端323
服务状态管理324
事务边界325
实例管理与事务325
单调事务服务326
会话事务服务329
事务持久化服务342
事务行为344
事务单例服务349
实例模式与事务352
回调353
回调事务模式354
回调投票356
使用事务型回调356
第8章并发管理359
实例管理与并发359
服务并发模式360
ConcurrencyMode.Single360
ConcurrencyMode.Multiple361
ConcurrencyMode.Reentrant364
实例与并发访问366
单调服务366
会话与单例服务367
资源与服务368
访问死锁368
避免死锁369
资源同步上下文370
.NET同步上下文370
UI同步上下文373
服务同步上下文378
托管在UI线程上379
作为服务384
UI线程与并发管理387
自定义服务同步上下文389
线程池同步化器389
替换I/O完成线程池394
线程关联性395
优先级处理397
回调与客户端安全400
使用ConcurrencyMode.Single回调401
使用ConcurrencyMode.Multiple回调402
使用ConcurrencyMode.Reentrant回调402
回调与同步上下文403
回调与UI同步上下文403
回调自定义上下文406
异步调用410
异步机制的需求410
基于代理的异步调用411
异步调用413
轮询或等待完成415
延续417
延续与线程安全420
延续同步上下文421
单向异步调用427
异步错误处理430
异步调用与事务433
同步与异步调用433
异步服务操作434
第9章队列服务455
无连接的服务与客户端455
队列调用456
队列调用架构456
队列契约457
配置与安装458
事务464
传递与回放464
事务配置466
非事务性队列469
实例管理469
单调队列服务470
会话队列服务471
单例服务475
并发管理476
限流476
传送失败477
死信队列478
生存时间478
配置死信队列479
处理死信队列480
回放失败484
有害消息485
里的有害消息处理486
队列调用与连接调用490
要求队列化491
应答服务492
设计应答服务契约493
客户端编程496
队列服务端编程499
应答服务端编程501
事务502
HTTP桥505
设计桥505
事务配置506
服务端配置506
客户端配置508
第10章安全511
验证511
授权512
传输安全512
传输安全模式513
传输安全模式配置514
Transport安全和凭据517
Message安全和凭据517
身份标识管理518
整体策略518
场景驱动方法519
Intranet应用场景520
保护Intranet绑定520
约束消息保护526
身份验证528
身份标识530
安全调用上下文531
模拟533
授权540
身份标识管理545
回调546
Internet应用场景547
安全Internet绑定547
消息保护549
验证553
使用Windows凭据555
使用ASP.NETprovider556
标识管理564
B2B应用场景565
保护B2B绑定565
验证566
授权568
身份标识管理569
宿主安全配置570
匿名应用场景570
确保匿名绑定的安全571
验证571
授权571
标识管理571
回调572
无安全场景572
无安全的绑定572
验证573
授权573
标识管理573
回调573
场景总结574
声明式安全框架574
SecurityBehaviorAttribute575
宿主端的声明式安全582
客户端的声明式安全583
安全审计590
配置安全审计591
声明式安全审计593
第11章AzureServiceFabric微服务平台595
为什么需要AzureServiceFabric595
集成平台596
设计一致性596
编程模型一致性596
未来兼容596
为ServiceFabric作准备598
ServiceModelEx.ServiceFabric598
配置ServiceFabric599
IT运维599
部署600
两者兼备601
编写ServiceFabric606
服务编程模型606
可靠服务607
可靠角色614
状态管理617
托管623
客户端编程模型624
建模ServiceFabric633
建模方法633
建模可靠服务635
建模可靠角色637
建模托管宿主645
测试646
附录A面向服务概述653
附录B消息头与上下文665
附录C服务发现687
附录D发布-订阅服务741
附录E通用拦截器765
附录FWCF编码规范781
附录GServiceModelEx分类

前言/序言

在软件历史的长河中,WCF逐渐成为前辈框架。2001年8月,我第一次了解到微软公司在使用托管代码重写COM+的工作细节。在2002年7月重新审订C#2.0战略的时候,Remoting的经理提出要以一种开发人员实际使用的方式重写Remoting代码。与此同时,微软公司也在忙于把新的WebService安全规范引入ASMX堆栈,并且与其他公司一起积极起草新的WebService规范。
2003年7月,我被授权参与一个新的事务性框架的研发工作,这个框架用来改进.NET事务编程。当时,还没有一个高耦合的编程模型可以统一这些千差万别的技术。直到2003年年末,我接到一个私人邀请,加入一个由许多行业专家组成的团队来参与审订Indigo平台的战略设计。我所知道的一些最优秀的人都是这个团队的成员。在此后的两三年里,Indigo经历了三代编程模型。最终声明式、终结点驱动的对象模型于2005年初才初露端倪,2005年8月就基本定型,命名为WindowsCommunicationFoundation(WCF)。WCF在2006年作为.NET3.0的一部分发布出来。
在软件集成领域,WCF就是巨人。它包含所有构建现代软件需要的正确元素、所有现代软件需要的基础模式,可扩展、基于拦截的管道;它是未来AzureServiceFabric的基石,而且与ServiceFabric完美集成。实际上,之前三个版本的图书已经介绍了实现ServiceFabric的所有元素。因此,WCF至关重要。
WCF包含的几方面内容是今天唯一提供互操作性、生产效率和可扩展性的技术。它就是终极互操作的解决方案,是一大串行业规范的集成。对分布式系统开发人员来说,它是最容易实现远程调用和队列调用的方式。对系统开发人员来说,它是下一代面向生产力的代表,如事务和托管,它提供了许多现成的构件。对应用程序开发人员来说,它就是结构化应用系统的声明式的编程模型。对架构师来说,它就是一个构件面向服务应用系统的工具。WCF事实上非常简单,它其实就是微软各种通信技术的统一平台。
个人认为,WCF是下一代的开发平台,并且被最大限度地集成到.NET中。抛开应用系统的类型、大小或行业范围,所有的.NET开发人员都应该使用WCF。WCF提供了一种方便、简洁的方式去生成符合设计原则的服务和应用程序。设计WCF的目的是简化应用程序的开发和部署成本。WCF服务可用来构建面向服务的应用程序,从独立的桌面应用到基于Web的应用和服务,以及高端的企业应用。

WCF 服务编程(第四版)》涵盖了基于WCF开发面向服务应用程序的主题和技能,阐述了如何使用内置的特性,如服务托管、实例管理、并发管理、事务、无连接队列调用、安全和WindowsAzure服务总线等。《WCF 服务编程(第四版)》不仅告诉你如何使用这些特性,还告诉你为什么使用这些特性,以及特性设计背后的原因。你不仅会从中学习到WCF编程和相关系统的知识,而且会了解相关的设计原则、提示、最佳实践和误区。我会从软件工程的角度来介绍每个知识点,因为我的目标不仅是让你成为一个WCF专家,而且是让你成为一名出色的软件工程师。掌握了《WCF 服务编程(第四版)》的精髓,你就可以开发具有可维护性、可扩展性、可复用性和高生产率的应用程序。
《WCF服务编程》第四版也给了我一些机会:首先,可以介绍WCF4.6的新特性,如并行处理和配置简化;其次,可以介绍AzureServiceFabric,这是一个根本的颠覆性技术,因为它允许开发人员构建各种应用,并统一开发和运营;最后,可以介绍我积累的多年的WCF编程技术、想法及帮助类,以及对前一版的一些改进想法。我相信这些新的材料会使《WCF 服务编程(第四版)》更具价值。
WCF 服务编程(第四版)》没有介绍WCF的实现细节,而是重点关注WCF的实际应用:如何使用WCF技术,如何在已有的设计和编程模型之间选择。《WCF 服务编程(第四版)》尽量介绍.NET4.6和ServiceFabric的知识,当然从某种程度上说它也是一本高级C#编程书。
此外,《WCF 服务编程(第四版)》还包含许多有用的代码、工具和我编写的帮助类,收集在ServiceModelEx里。我的工具、帮助类及属性可以提高你的代码生产率和WCF服务的质量。ServiceModelEx是一个小的框架,寄宿于WCF内,它提供了一些监测功能,简化了一些代码工作。《WCF 服务编程(第四版)》介绍的内容主要是关于原生态WCF的工具、想法及技巧。我的框架也演示了如何扩展WCF。许多读者告诉我,除了《WCF 服务编程(第四版)》的内容介绍之外,ServiceModelEx是最有价值的部分。我的建议是,读者不必使用ServiceModelEx全部的代码。实际上,ServiceModelEx是一个WCF强大工具集,你可以独立地使用其中每个辅助类、工具或框架,它们之间的内在联系很少。
每个章节讨论一个主题,并进行深入分析。然而,每个章节都依赖于之前的章节,所以建议你按照顺序学习。

其他推荐