WCF全面解析(上下册)
WCF全面解析(上下册)
蒋金楠 著
ISBN
978-7-121-16656-3
2012年4月出版
定价:168.00元
16开
1168页
宣传语:如果你想成为SOA和WCF方面的专家,那么这本书就是你的最好法宝。
内 容 简 介
本书是作者多年潜心研究WCF技术的心血之作,也是这些年来从事WCF开发的经验总结。书如其名,《WCF全面解析》涵盖了WCF几乎所有的知识点,并对其底层框架进行了“庖丁解牛”式的剖析,力求将WCF的整个运行机制完整而清晰地呈现在读者面前。
本书上册的前四章在对WCF进行总体介绍的基础上,对构成终结点的三要素(地址、绑定和契约)进行了系统说明;随后的两章则着重剖析序列化和消息编码在WCF中的实现;第7、8章讲述了在服务寄宿和操作调用过程中,WCF的服务端和客户端框架分别为我们做了什么;第9、10章将介绍的重点落在实例化、会话和REST服务上面;在最后一章中采用WCF构建了一个具体的电子商务网站VM,它将指导你如何将理论应用于实践。
本书下册主要涉及一些所谓的“高级”话题,主要包括如何在分布式环境中处理异常(第1章);元数据的导入与导出、发布与获取如何实现(第2章);如何利用WCF对事务的支持将分布式事务引入服务(第3章);如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全、授权与审核;第9章全景展示WCF服务端和客户端的运行时框架,以及在此基础上的所有扩展可能;最后一章为你带来WCF 4.0几个独立的新特性。
本书不仅适合尚未接触过WCF,希望尽快入门并进行深入研究的开发人员使用,同样也适合对WCF有一定了解的开发设计人员和架构师阅读。相信不同层次的读者都能从本书中找到自己希望了解的部分。
作者介绍
蒋金楠(网名Artech)现就职于某知名软件公司担任高级软件顾问。连续5届微软MVP(最有价值专家),同时也是少数的双料MVP(Solutions Architecture + Connected System)之一。国内较早接触WCF的人之一,2007年2月起在个人博客(http://www.cnblogs.com/artech)上发表超过两百篇深入介绍WCF的文章,成为了目前国内WCF在线资料的主要来源。
同业推荐
我经历了COM时代,一直把Don Box的《COM本质论》奉为我的指路明灯。能把SOA机理和WCF这种特定厂商实现的技术讲得如《COM本质论》一样完美透彻的,那必属Artech这本经过自己深研、实践而著的心血结晶——《WCF全面解析》。如果你想成为SOA和WCF方面的专家,那么这本书就是你的最好法宝。想想你作为专家而获得的回报,那么你对这本书购买所做的付出,那简直是太值了。
——《走出软件作坊》作者 明源软件CTO 阿朱
金楠是一位工作在一线的优秀的WCF技术人员,这符合我对阅读技术图书的第一个要求和期待。其次,金楠的写作文笔、专业责任也给人以充分信任,这在金楠的文字中读者可以体会。这本《WCF全面解析》全面剖析了构建WCF应用所需要的各方面技术,剥丝抽茧,由浅入深,也是我非常欣赏的技术讲述方式。我相信《WCF全面解析》一书是搞WCF朋友的案头必备。
——祝成科技与Boolan.com创始人 .NET技术专家 李建忠
知识全面、论述准确、逻辑严密是本书的特点。这是一本各层次开发人员都可以从中受益的书:对于初、中级开发人员,它可以帮助你获得WCF全方位的知识,系统地梳理WCF的知识结构,提升动手实践能力;对于高级开发人员,它既可以有效弥补你WCF相关知识中的盲点,又可以让你在自己熟悉的知识点上领略作者的看法和理解。
——资深架构师 曲春雨
序
由于从事IT技术教育行业,我对金楠在技术教育传播方面的付出有着格外一层敬意。对国内IT技术出版历史有所了解的朋友应该不会忘记,我们曾经的IT技术出版是多么的贫瘠和劣质。大量的非专业人士在翻译、编著一些粗制滥造的图书来“教育”从事一线IT技术工作的专业人士,一如食品行业的“三聚氰胺”和“地沟油”,侵蚀着技术人员的知识供应系统——这段荒诞的历史,是中国IT行业一段时间以来技术水平低下的一个重要原因。
我一直有一个观念:IT教育、出版、传播必须由一线专业的技术人来做内容的生产者——其实这是一个常识,可惜的是在我们这个杂草丛生的时代,这些常识常常被忘记。
所幸,每个行业总有一些进步的力量在推动改变。金楠就是推动国内技术教育进步力量的一分子。首先,金楠是一位工作在一线的优秀的WCF技术人员,这符合我对阅读技术图书的第一个要求和期待;其次,金楠的写作文笔、专业责任也给人以充分信任,这在金楠的文字中读者可以体会。
另一方面,我也相信读者的觉醒是中国技术出版环境改善的土壤基础。“阅读图书前仔细调研作译者,了解作译者的背景和经验,看作译者是否持续地在某一领域有长期积累和耕耘,大家用买书作为选票来鼓励那些优秀、负责任的作译者……”这是我在很多场合鼓动“读者觉醒”的“启蒙言论”。
我相信随着觉醒的读者越来越多,像金楠这样的教育同道越来越多,假以时日,国内的技术教育和出版环境就会得到大幅度改善,中国技术产业也会有质的飞跃。
这是我为金楠的呕心力作《WCF全面解析》出版感到欣喜的原因。了解WCF的朋友我想很多都知道“国内有个叫蒋金楠,网名Artech的在搞WCF”——这也是我对金楠的初始印象。通过接触金楠的技术博客,以及金楠09年的作品《WCF技术剖析》,我以及我的技术团队都曾从金楠那里得到过技术营养。作为继DCOM、Remoting、Web Services、Enterprises
Services之后微软的分布式组件通信与服务框架,WCF无疑是微软技术平台构建网络应用的首选。特别是在添加了REST支持之后,WCF在面向新一代移动互联应用方面也成为很多技术架构的选择。金楠的《WCF全面解析》全面剖析了构建WCF应用所需要的各方面技术,剥丝抽茧,由浅入深,也是我非常欣赏的技术讲述方式。我相信《WCF全面解析》一书是搞WCF朋友的案头必备。
李建忠 祝成科技创始人
微博:weibo.com/jzli
李建忠,祝成科技与Boolan.com创始人,兼高级讲师,国内知名.NET技术专家。对于技术教育有异乎寻常的热情,由于在.NET社区的特殊贡献,于2010年获微软区域技术总监荣誉称号。专注于面向对象、.NET、C++、设计模式。微软MSDN中国C++、.NET、设计模式专栏讲师。四度连任微软最有价值专家(MVP);微软MSDN中文网络广播最受欢迎讲师。译作:《Microsoft .NET框架程序设计(修订版)》、《Effective
C#中文版》。曾成功培训过西门子、SAP、HP、CA、腾讯、东软、诺基亚等著名企业。
推荐序
组件式开发是每个开发人员的梦想。前有CORBA、COM+、EJB前赴后继,进化到如今又演变成了SOA。而微软体系内的SOA解决方案就是WCF。
微软的技术似乎入门、易用性一直都不错,VS.NET随便一个向导就能产生一个WCF应用代码骨架。而且微软一直号称底层他们给搞定,大家只要专注业务实现即可。
但事实真的如此吗?如果你曾经经历了过往的组件式开发技术在商用产品中的实践,那么你就会知道,不了解底层机理,你做的东西只能作为原型,一到真实的商用生产环境中接受数据、并发、事务、安全、网速的考验,不足立马显现。这也就是组件技术经历了多种技术,流行多年,但真正能在市面上看到的成功的组件式应用软件却少之甚少的原因。
但我们仍然不乏梦想,组件式开发仍然是我们每个开发人员的追求境界。我们想做好它掌控它,怎么入手?庞杂的技术规范和技术演进,又杂合了各家厂商的实现不同、理念不同,让我们乱花迷眼。
我经历了COM时代,一直把Don
Box的《COM本质论》奉为我的指路明灯。在SOA时代,我想学习WCF,我曾经购买过大量关于SOA和WCF的书籍,但能把SOA机理和WCF这种特定厂商实现的技术讲得如《COM本质论》一样完美透彻的,那必属Artech这本经过自己深研、实践而著作成功的心血结晶——《WCF全面解析》。
Artech对WCF的研究历来已久,早在2009年就已经出版了广受欢迎的《WCF技术剖析》(卷1),因为我关注Artech的博客已经很久,所以卷1一出版我就赶快入手了一本。很快这本书就成为我学习WCF的主要读物,每每重读都有新的启发和认识。但卷1对WCF的高级技术如事务、异常保护、元数据、可靠会话、传输安全等主题并没有谈得很透彻,所以Artech又专门著作了卷2来专题论述。WCF技术发展日新月异,回过头来看卷1内容,很多细节已经发生了改变,而且一些新的技术特性也需要增补,Artech对WCF技术的认识和实践在这么多年一线研发工作中更深入了一层,所以Artech决定修订卷1,并且和卷2构成更完整、更流畅、更清晰的体系,两卷合并出版,这就是《WCF全面解析》的来由。这本书历经5年打磨,绝对和它的名字“全面解析”名副其实。能读到此书,幸哉!
国内在技术图书这个领域大多崇拜国外翻译的书籍,当然也有国内害群之马不在一线开发实践工作就大讲技术,厚厚的一本书尽贴的是大段完整的Demo代码和Next Step之类的截图。但卷1已经用事实证明,这本书都是干货。尽管这次卷1、卷2合二为一,厚厚一个大部头容易让人吓一跳,但这确实是因为WCF这个体系太庞大,要想真正把它层层解析透彻,就需要这么多的笔墨力量。
而且Artech有着程序员惯有的严谨、细致、踏实、追本求源、动手验证、力求完美代码的精神品质。所以此书的字里行间也处处透着这种实践、实证、机理的氛围。能把如此复杂、庞大的技术体系讲明白,这需要有非常高超的文字架构能力和描述能力。但Artech层层剖析,从入门实例到技术规范原理,再到WCF实现与代码验证,Artech这种写作风格非常符合开发人员的理解习惯,而Artech本身就是一直战斗在一线的开发人员,因此这就是一本开发人员写给开发人员的书。
如果你想成为SOA和WCF方面的专家,那么这本书就是你的最好法宝。想想你作为专家而获得的回报,那么你对这本书购买所付出的,简直是太值了。
阿朱
阿朱,本名吕建伟,畅销书《走出软件作坊》作者,CSDN名博,现任深圳明源软件CTO。10年以上商业软件从业经验,10余年来一直专注行业管理信息化领域,7年职业经理人生涯,在商业分析、产品体系规划、研发人才体系搭建、研发过程管理、技术架构、贯通售前/研发/售后方面多有经验。
前 言
“全书之写印,实系初稿。有时公私琐务猬集,每写一句,三搁其笔;有时兴会淋漓,走笔疾书,絮絮不休;有时意趣萧索,执笔木坐,草草而止。每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴补重书,故剪刀浆糊乃不离左右。个中甘苦,只自知之。”
在某个阳光明媚的早晨,我在去上班的公交车上翻看岳南先生的《南渡北归》的时候,看到上面这段董作宾描述自己写作《殷历谱》之甘苦的文字,回想起我写作这本书的经历,不禁感慨万千。我无意将《WCF全面解析》自比煌煌巨著《殷历谱》,只是觉得人同此心,这段文字正好描述我写作此书的状态。
《WCF技术剖析(卷1)》(以下称《卷1》)于2009年7月正式出版,在此不久我就开始了《卷2》的创作。对于《卷1》的写作,我还算是游刃有余,但是写作《卷2》的难度是我始料未及的。如果像市面上大部分专著一样只涉及WCF编程,我想《卷2》早在一年之前就已经完成了。但是我在写作之初就没有将本书定位为一本纯粹的WCF编程书籍,而是决心写一本“深入肌理”,对WCF进行“庖丁解牛”式剖析的书籍。在没有任何现成资料可供参考的情况下,我只能通过对源码的分析来了解其底层的实现原理。为了能够确保这部分内容的正确性,我编写了很多的测试程序来证实我的想法。
“探究之深”是本书难以在较短的时间之内交付出版的一个主要原因,而另一个因素则是“涉及之广”。WCF不是微软在Windows平台下的闭门造车,而是在设计之初就考虑到了针对开放标准的支持。《卷2》涉及到太多的WS-*规范,比如“异常处理”一章涉及到SOAP;“元数据”一章涉及到WS-Policy、WS-Transfer、WS-MEX和WSDL;“事务”一章涉及到WS-Coordination和WS-AT;“可靠会话”一章涉及到WS-RM;“传输安全”一章涉及到WS-Security、WS-Trust 、WS-Secure Conversation和WS-Security Policy;“WCF 4.0新特性”一章涉及到WS-Discovery。对于这一系列的WS-*规范,单单从头到尾看一遍都需要花费不少时间,而我已经不太记得自己究竟看多少遍了。
《卷1》的整个内容基本上都围绕着WCF本身,但《卷2》却涉及到不少的背景知识。为了让读者对WCF有一个全面而深刻的了解,我在书中涉及到很多背景知识的介绍。比如“事务”一章中花费了很多文字介绍MSDTC和System.Transactions事务;“并发与限流”一章中有针对同步上下文的介绍;为了让读者能够深入认识可靠会话的实现原理,我将其同TCP协议的机制进行类比;“队列服务”一章中对MSMQ进行了系统的介绍;“传输安全”一章中更是涉及到针对非对称加密以及NTLM和Kerberos认证原理的介绍。
由于写作难度不小,加上写作和资料收集只能在工作之余进行,所以很多次都有中途放弃的念头。很有意思的是,每次在我下定决心放弃写作后没几天总是会收到《卷1》的读者给我的留言,这些留言体现了对《卷1》的肯定,充满了对《卷2》的期待。读者的肯定和期待一次次给了我坚持下去的力量,前后经历了两年的时间终于完成了《卷2》,这算是对读者的交代,也是对我自己的交代。
《卷2》完稿之后我开始为《卷1》的再版进行修订。对于出版后的《卷1》我基本上很少翻看,因为我个人基本上不太喜欢翻看自己写的东西,包括自己写的400多篇博客文章。针对《卷1》的修订让我第一次完整地阅读自己写的东西,经过了写作《卷2》的“折磨”,让我对WCF有了更加深刻的认识,于是我基于对WCF最新的理解开始对《卷1》的内容进行大刀阔斧的修改。虽然《卷1》大体上还是保留着原来的结构,但是内容已经发生了巨大的改变。据我粗略估计,改动内容的比率基本上达到一半。
最后我将《卷2》和修订后的《卷1》给李建忠和吕建伟(阿朱)老师帮忙审阅,李建忠老师建议增加关于WCF REST的内容,于是我在《卷1》中新加了“REST服务”一章。由于新的《卷1》已经难现往日模样,在本书的策划编辑张春雨老师的建议下我决定将原《卷1》和《卷2》作为一个整体分上、下册出版,于是才有了你手中的这本《WCF全面解析》。
本书特点
如果要说出《WCF全面解析》具有哪些市面上其他WCF图书不具备的特点的话,我觉得可以通过以下三个“注重”来概括。
注重原理
“知其然,且知其所以然”,对一项技术实现原理的把握能够帮助你更加有效地利用这项技术。WCF建立在.NET平台下,提供基于托管代码的应用编程接口(API),在编程层面不会太复杂,也很容易入手。但是如果希望通过WCF构建一个具有高性能、高可维护性、高可扩展性的分布式应用,就要求架构师、设计师和开发者对WCF的实现机制,以及面向服务的设计原理具有正确、全面而深入的理解。当然,对于WCF编程的介绍对于任何一本关于WCF的图书都是必需的,《WCF全面解析》也不例外,不过它和那些完全介绍WCF编程的书不同的是,本书中此类内容仅占全部内容的一半左右。
注重细节
“细节决定成败”,如果将2/8原则应用到编程领域,它将体现在:花20%的时间编写出80%程序主体,而80%的时间用于编写剩下20%核心程序并纠错和解决Bug。这些Bug的产生往往是由于对细节不够重视所导致的。《WCF全面解析》会介绍一些常被人们忽视而导致产品Bug的细节,这些细节多源自于我这些年来实践的积累和总结。
注重实践
“实践出真知”,不断地在具体应用中进行实践是学习WCF最有效的手段。实践是检验真理的唯一标准,通过将所学的WCF知识应用到一个真正的应用之中,才能确保我们掌握的知识的正确性。实践不但可以巩固我们的所学,还会让我们意识到不足。《WCF全面解析》在每一章节都会提供一系列的实例演示,读者可以单独下载这163个实例的源代码。
本书读者
本书的内容不仅适合尚未接触过WCF,希望尽快入门并进行深入研究的开发人员,同样适合对WCF具有一定了解的开发设计人员和架构师。相信不同层次的读者都能从本书中找到自己希望了解的部分。阅读本书的读者需要对.NET,包括对C#和.NET Framework具有一定的了解。如果读者具备了DCOM、Enterprise Library Service、.NET Remoting、Web Service、MSMQ及SOA相关的基础,对阅读此书尽快掌握WCF将大有裨益。
本书结构
(上册)
第1章 WCF简介(WCF Overview)
本章简单讲述了WCF产生的历史背景,以及在微软产品线中所处的地位。为了使读者对基于WCF的编程模型有一个直观的印象,我们将带领读者创建一个完整的WCF应用。本章实例应用涵盖了构建一个基本WCF应用所需的所有步骤,包括服务契约的定义、服务的实现、服务的寄宿、元数据的发布和导入、服务代理的创建和服务调用等。
第2章 地址(Address)
作为终结点三要素之一的地址在WCF应用编程接口中通过EndpointAddress表示,本章会从编程的角度对该类型进行详细的介绍。端口共享对于WCF服务的部署具有重要的意义,我们会分别介绍基于不同传输协议(HTTP/HTTPS和TCP)的端口共享机制在WCF中是如何实现的。终结点地址具有逻辑地址和物理地址之分,本章会详细讲述如何在客户端和服务端实现两者的分离。在本章的最后会对请求监听和消息分发机制进行深入解析。
第3章 绑定(Binding)
WCF整个框架大体分为服务模型层和信道层,作为终结点三要素之一的绑定是整个信道层的缔造者。为了全景展示整个绑定模型,涉及到的对象包括绑定元素、信道监听器、信道工厂、信道等。绑定本质上是一系列相关绑定元素的有序组合,我们将从绑定元素的构成来分析常见系统绑定的本质区别,以及通过绑定元素重组来创建自定义绑定。
第4章 契约(Contract)
契约是组成终结点的第三个元素,本章会从编程和服务描述的角度系统地介绍服务契约。组成服务契约的操作表示基于某种模式的消息交换和消息本身的结构,本章会着重介绍基于三种消息交换模式的契约操作之间的差异,以及如何编程实现对客户端的回调。多线程在服务调用中具有普遍的意义,我们会全方面地介绍多种不同的异步调用方法在WCF中的实现。在本章的结尾,我们会详细讨论操作选择和执行机制。
第5章 序列化(Serialization)
序列化/反序列化最终通过XmlSerializer和DataContractSerializer这两个序列化器来实现,我们会详细介绍它们参与序列化和反序列化采用的序列化规则。数据契约是WCF中定义数据的主要方式,本章会着重介绍如何通过DataContractAttribute和DataMemberAttribute这两个特性来定义数据契约。确定对象的类型是保证序列化/反序列化成功的先决条件,我们会系统地介绍如何通过“已知类型”让某些类型成为序列化器预先知道的类型。基于集合和泛型类型的数据契约比较特殊,我们会在专门的一节对它们进行详细介绍。本章的最后会讲述数据契约等效性的概念,以及针对请求消息和回复消息的序列化/反序列化在WCF中是如何实现的。
第6章 消息(Message)
消息是通信的载体,本章专门介绍关于消息的话题。我们首先会通过对SOAP的介绍让读者知道一个标准的消息应该具有怎样的结构。在WCF的应用编程接口中,消息通过类型System.ServiceModel.Channels.Message表示,我们会针对该类型来介绍基于消息的基本操作和状态机。除了消息主体外,我们可以通过消息报头和消息属性来携带额外的控制信息,本章会详细讲述消息报头和消息属性是如何添加和读取的。消息契约可以将某个类型的属性/字段分别定义成消息的主体成员和报头成员,我们会系统地介绍基于消息契约的编程。本章以消息编码作为结尾,通过介绍我们可以知道消息在发送前的编码和接收后的解码在WCF中是如何实现的。
第7章 服务寄宿(Hosting)
我们通过宿主应用程序来承载服务旨在为服务提供一个运行环境。服务契约通过ServiceHost来实现,以终结点为核心的服务描述是创建ServiceHost的基础,所以本章的开始会对服务描述进行系统的介绍。IIS/WAS寄宿是我们常用的服务寄宿方式,为了深刻地理解背后的运行机制,我们对不同版本的IIS和ASP.NET管道进行了详细介绍。而IIS/WAS寄宿具有ASP.NET兼容模式和并行模式之分,本章将从实现原理的角度深入剖析两者的差别。我们将针对Windows服务的服务寄宿方式放在本章的结尾进行介绍。
第8章 客户端(Client)
我们通过服务代理进行服务调用,而服务代理可以直接通过ChannelFactory<TChannel>来创建,也可以通过导入服务元数据的方法直接生成继承自ClientBase<TChannel>的服务代理类。本章会详细讲述ChannelFactory<TChannel>和ClientBase<TChannel>。通过本章的介绍我们会知道,从ChannelFactory<TChannel>被创建到被开启,再到通过ChannelFactory <TChannel>创建服务代理,最后将服务代理开启并进行服务调用的各个阶段WCF在背后都为我们做了什么。
第9章 实例化与会话(Instancing
and Session)
实例化和会话是WCF中两个重要的概念,前者旨在实现服务实例对象的激活,后者则实现对客户端调用状态的保持。本章将详细介绍三种典型的实例化模式所表现的行为、实现的原理及各自适合的场景。在介绍会话的部分会深入剖析会话如何保持客户端多次服务调用的状态,以及会话、实例化模式、绑定和信道之间的关系。
第10章 REST服务(REST Service)
REST是直接建立在Web上的一种面向资源的软件架构风格,WCF通过Web HTTP编程模型对REST提供了很好的支持。本章会系统地讲述组成Web
HTTP编程模型的重要类型和组件。URI模板是WCF REST的一个重要的概念,读者通过本章的介绍不仅会了解定义URI模板的基本语法,还会对基于URI模板的操作选择机制有一个深刻的理解。较之SOAP,WCF REST采用更为复杂的消息格式化机制,本章通过对消息格式化的介绍让读者明白不同消息格式和主体风格的消息是如何格式化的。输出缓存、条件获取和条件更新的介绍被放在本章的最后部分。
第11章 WCF实例研究(WCF in
Practice)
本章通过一个简单的电子商务网站VideoMall指导读者如何利用WCF构建一个完整的分布式应用。本实例不仅会体现WCF的基本编程方式,还会涉及一些软件架构和设计方面的介绍,比如模块化、分层、IoC和AOP等。本实例还体现了很多针对WCF的扩展,比如通过扩展实现了与Unity、EntLib的集成。
(下册)
第1章 异常处理(Exception
Handling)
本章首先会对WCF基本异常处理模式进行介绍,读者借此会了解到如何进行异常的抛出与捕获,异常详细信息如何传递,以及错误契约该如何定义。异常和消息是错误信息的两种不同的载体,我们会详细介绍通过两种不同形式承载的错误信息是如何进行转换的。WCF的扩展性在异常处理方面具有较好的体现,本章的最后部分会通过实例演示的方式讲述基于自定义ErrorHandler的异常处理扩展。
第2章 元数据(Metadata)
用于描述服务的元数据帮助客户端创建匹配的终结点进行服务调用,WCF具有一个完整的元数据体系实现元数据的导出、发布、获取和导入,本章会从这4个方面来深入剖析整个元数据架构体系。不论是元数据本身还是元数据的发布,都不是微软在Windows平台内部的闭门造车,而是遵循一系列的开放标准,这些标准包括WS-Policy、WS-Transfer、WSDL和WS-MEX等,本章同样会涉及到对这些WS-*规范的介绍。
第3章 事务(Transaction)
基于WCF的分布式事务直接建立在现有的Windows事务管理体系之上,本章会对该事务处理模型进行详细的介绍。WCF事务具有OleTx和WS-AT两个基本协议,我们会对WS-AT以及相关的WS-Coordination规范进行相应的介绍。在针对事务编程模型的介绍中,我们会了解到如何通过服务契约定义事务流转的策略,如何通过对绑定的设置实现事务的流转,以及如何控制事务相关的行为。在本章的最后,我们会详细讲述事务流转和事务自动登记在WCF框架体系中是如何实现的。
第4章 并发与限流(Concurrency
and Throttling)
并发指的是针对同一个封装服务实例的实例上下文的并行调用,WCF具有Single、Multiple和Reentrant三种基本的并发模式,本章会详细讲述基于不同实例化方式的Single和Reentrant并发模式是如何实现的。线程的亲和性表示针对服务调用请求的处理与服务寄宿时的同步上下文的绑定,本章会详细介绍线程的亲和性是如何产生的,以及如何解除线程的亲和性。限流旨在控制相应的并发量以实现对资源的合理使用,进而确保服务的可用性,在本章的最后部分我们会详细讲述如何设置三个限流阈值,以及限流机制的实现原理。
第5章 可靠会话(Reliable
Sessions)
可靠会话通过消息确认和超时重传机制保证了通信的可靠性,实现了消息的接收保障、重复筛选和有序交付。可靠会话是对WS-RM的实现,本章的开始会进行关于WS-RM的相关介绍。可靠会话仅仅涉及到绑定,我们会通过实例演示的方式来介绍围绕着绑定的可靠会话编程模型。在本章的最后,我们会从消息交换的角度来深入剖析可靠会话是如何实现上述三个可靠通信诉求的。
第6章 队列服务(Queued
Service)
WCF是Windows平台下传统分布式技术集大成者,这里被集成的一项分布式技术就包括MSMQ,我们把采用MSMQ作为通信手段的服务称为队列服务。为了巩固读者针对MSMQ的相关知识,我们会对MSMQ以及针对System.Messaging的编程模型进行简单的介绍。同样是通过三要素组成的终结点,队列服务对终结点有着不同的要求,我们会讨论队列服务终结点的独特之处。队列服务针对事务和会话有着完全不同的特性和实现方式,队列服务下的事务和会话是本章的一个重点。本章的最后部分会讲述在客户端和服务端如何进行错误处理。
第7章 传输安全(Transfer
Security)
传输安全通过身认证让服务和客户端在进行功能性消息交互之前确定对方的身份,通过对消息的签名和加密确保消息的一致性和机密性。传输安全具有两种基本模式,即Transport和Message安全模式,本章针对不同的绑定类型对这两种安全模式的支持进行了系统的介绍。
第8章 授权与审核(Authorization
and Auditing)
WCF提供了针对操作的声明式授权让某个访问者只能执行被授权的操作。Windows用户组和ASP.NET Roles这两种现成的授权方式可以被直接使用,同时支持自定义的授权模式。本章着重介绍不同授权模式的编程方式和实现原理。所谓的安全审核就是针对认证和授权所做的针对EventLog的日志记录,我们将通过具体的实例来讲述如何审核编程和实现审核背后的故事。
第9章 扩展(Extension)
整本书都在提及WCF的扩展性,本章对此进行专门的介绍。根据具体需要对WCF进行自由而灵活的扩展的前提是我们对整个WCF运行框架体系有一个深刻的认识,所以本章会为你带来针对WCF客户端和服务端运行框架的全景展示,并在此基础上介绍WCF包含的几乎所有的扩展点。
第10章 WCF 4.0新特性(New Feathures
in WCF 4.0)
其实整本书都是针对WCF 4.0的,关于WCF 4.0针对现有功能的一些小改动已经包含在各个章节中。本章着重介绍WCF 4.0提供的一些全新的特性,包括默认终结点、默认绑定和行为配置、标准终结点、无.svc文件服务激活、路由服务和服务发现等。
关于作者
蒋金楠(网名Artech)现就职于某知名软件公司担任高级软件顾问。连续5届微软MVP(最有价值专家),同时也是少数的双料MVP(Solutions
Architecture + Connected System)之一。国内较早接触WCF的人之一,2007年2月起在个人博客(http://www.cnblogs.com/artech)上发表了超过200篇深入介绍WCF的文章,成为目前国内WCF在线资料的主要来源。
致谢
本书得以出版,最应该感谢的人是博文视点的策划编辑张春雨老师。虽然本书上册在《WCF技术剖析(卷1)》的基础上进行了非常大的修改,但是基本的框架结构还是保留下来,所以在这里需要首先感谢为《WCF技术剖析(卷1)》的出版付出努力的编辑周筠和杨绣国(Lisa)女士,以及作为审稿人的郭金链、葛子昂、黄昕、李会军、孟永刚、王翔、曲春雨、王森(中国台湾)、张逸、张玉彬等。
必须感谢我的父母,他们赐予我一颗不算愚笨的脑袋,并从小培养我独立思考的习惯。感谢我的老婆徐妍妍,虽然你不知道什么是WCF,但你却是我最忠实的读者。如果读者觉得和《WCF技术剖析(卷1)》相比本书少了一些错别字和表达错误,这主要得力于这位贴心的“私人编辑”。
本书支持
本书涉及的很多WCF底层实现的内容,大多不能通过官方的渠道获取。它们来自本人对WCF源代码的分析、通过应用程序的证明,以及这些年来使用WCF经验的总结。由于能力有限,对于本书涉及的内容,难免存在原理或表达上的偏差。如果读者在阅读本书过程中,发现任何问题可以直接向我本人反馈。如果你遇到任何WCF相关的问题,也可以和我一起交流。
作者博客:http://www.cnblogs.com/artech
作者微博:http://weibo.com/artech
邮箱地址:jiangjinnan@gmail.com
本书每一章节都会提供一系列实例演示,每个实例均有编号,如S101、S202等。对于专门介绍演示实例的章节,会将编号加入标题中。本书附录给出上下册共163个实例的标号及相关描述,读者可通过如下地址下载所有实例源代码:https://files.cnblogs.com/artech/WCF全面解析.rar。