Programming WCF Services小编序

2001年九月,我在微软首次询问到使用托管代码重写COM+的技术细节。随后整个正常,直到2002年十月,在对C#2.0应战略设计评审时期,负责Remoting的主次COO提议了一个盛况空前的陈设,试图将Remoting重写为开发者真正可以利用的技能。同时,微软也在谋求合作,共同为ASMX中的web服务制订全新的安全规范,起草一三种附加的web
服务规范表达书。

到了二〇〇三年十二月,我有机遇体验了一个簇新的事务型序列架构,它亦可改善.NET编程中关于事务处理的相关缺陷。当时,并从未一个祥和的编程模型可以联合那几个单身的技巧。直到二〇〇三年末,我幸运获邀参预一个由同行专家组成的袖珍团队,对代号为Indigo的付出平台开展战略性的部署性评审。就自我所知,那些开发团队可谓人才济济,会聚了广大社会风气上最非凡的资质。在接下去的2-3年时间内,Indigo一共经历了三代编程模型版本的演化。就在二〇〇五年先前期间发表了基于终结点驱动对象模型的本子之后,终于于是年三月日益稳定为一个恒定的版本,同时更名为Windows
Communication Foundation(WCF)。

要想赢得开发者的众口赞美,可谓难于上青天,可是WCF却给了我们不一致的诠释。对于Web服务的开发者而言,WCF就是最终的答问互操作性的化解方案,已毕了大多数行业标准。分布式应用程序的开发者则觉得它简化了中远距离调用以及队列调用。系统开发者认为它装有下一代面向产品的特色,诸如事务与宿主,为应用程序提供了现成的底子作用模块。至于应用程序的开发者,WCF则为他们打造应用程序提供了声明式的编程模型。而对此架构师,WCF则是营造面向服务应用程序的结尾选项。一言以敝之,WCF涵盖了上述所有的满贯,因为安排WCF的目的就是为着可以联合微软的后进全新的技巧。

对我而言,WCF就是下一代开发者平台,它在很大程度上包容了初期的.NET编程理念。任何.NET开发者都足以应用WCF,而不用考虑应用程序的类型、规模仍旧行业领域。WCF是一门基础技术,它提供了变更服务与应用程序的“终南走后门”,完全符合我所确认的赏心悦目的安插性准则。WCF从一发轫就是工程化的,可以简化应用程序的开支与安插,下降开发费用。WCF服务用于营造面向服务的应用程序,不管那几个程序是单独的桌面应用程序,如故Web应用程序;是劳务,如故高端的集团应用程序。

关于本书的社团

本书涵盖了装有陈设开发基于WCF的面向服务应用程序所需的学问与技术。通过本书,你可以看看什么样使用WCF内建的性状,例如服务托管、实例管理、并发管理、事务、离线队列调用以及安全。本书会为你显示什么行使那几个特点,并追究它们在那种特定的设计思路下的已毕原理。你非但可以精晓到WCF编程技术,以及相关的系统知识,同时还包括了对应的设计方案、诀窍、最佳实践以及存在的欠缺。我为此站在软件工程的立足点演说本书的每个宗旨与特点,是因为自己希望它亦可接济读者不仅要改成一名WCF专家,而且还要成为一名佳绩的软件工程师。本书带给您的这种认知能够使你如虎生翼,让你的应用程序在可维护性、可增加性、可重用性以及高效性方面,更加适合软件工程的见解。

本书回避了广大WCF的落实细节,更加多的是爱抚运用WCF的实用性与趋势:如何使用WCF技术?怎么样挑选有效的设计基准与编程模型?本书多量应用了.NET
2.0技艺,从某种角度来说,本书也可以算是一本高级的C#技术书籍。

除开,本书包蕴了大气本身所编纂的套件类、工具类以及辅助类。那么些类还可以坚实你的支付功用,有限支撑支出的WCF服务的质料。我还支付了一个依据WCF技术的袖珍框架,用以弥补一些陈设缺陷,或者简化确切的职务,使其可以自动化已毕。在书中,我像介绍WCF技术那样,详细地介绍了这个工具、理念与技术。同时,我付出的框架则为您演示了如何对WCF举行扩展。

在过去的两年中,我在MSDN杂志上登载了多量有关WCF的篇章。近来,我还在为杂志的底子专栏(Foundations
Column)撰写WCF技术小说。我要谢谢杂志社可以允许自己将那一个文章引用到本书中。尽管您早就读书过那么些小说,或许可以从本书的相关章节中发现它们的阴影。相比较而言,本书的章节尤其健全,提供了WCF的有余理念、技术与实例,而且那几个焦点也与书中的其它章节紧密相连。

自我在每一章中都系统地讲解了一个专题,深切探究了那几个专题的始末。不过,每一章又都依靠于前一章的情节,由此,我提议你最好依据先后顺序阅读本书。

以下是书中各章节以及附录的摘要:

第1章,WCF基础

本章首先演讲了WCF的技艺原理,并描述了WCF的根基概念和构建模块,例如地点(Addresses)、契约(Contracts)、绑定(Bindings)、终结点(Endpoints)、托管(Hosting)以及客户端(Clients)。在本章最后还研商了WCF体系架构,它将是扶助我们掌握前面章节的要紧。本章假定读者已经精通面向服务的怀念与优势。如果你不拥有那方面的学问,可以率先阅读附录A的始末。即便你早已深谙了WCF的基本功概念,我仍旧指出你至少可以神速地浏览本章的始末,它不仅可以巩固你已部分文化,更在乎本章介绍的一些协理类与技能术语有助于你读书全书。

第2章,服务契约

本章致力于介绍服务契约的宏图与付出。首先,你会精通到有的卓有成效的技巧,包蕴劳动契约的重载与持续以及任何高级技术。然后,本章深远钻探了怎么筹划以及分解契约,以利于服务的选取、可维护性以及可伸张性。最终,本章还将向你显示了什么通过公开契约元数据形成运行时的互动编程。

第3章,数据契约

只要没有实际存在的可共享的数据类型本身,若是没有拔取同一的开发技术,大家相应什么处理客户端与劳动中间的数据互换?在本章,你可以见到哪些处理某些有趣的现实难题,例如数据版本控制,以及传递元素项集合的章程。

第4章,实例管理

到底是哪个种类服务实例处理哪个种类客户端的请求?本章给出了难题之钥。WCF帮衬七种劳动实例管理、激活以及生命周期管理技术,那一个技能与系统规模和质量巢倾卵破。本章给出了每一种实例管理格局之间的涉及,指引读者曾几何时以及怎么样有效地应用它们。本章还介绍与之城门失火的主旨,例如限流(Throttling)。

第5章,操作

乘机对各种类型操作的拍卖,客户端可以调用服务,遵从有关的统筹条件,例如怎样立异和伸张基础功效,以接济回调的设置与销毁,管理回调端口与通道,提供品类安全的双向代理(Duplex
Proxies)。

第6章,错误

本章周到介绍了劳动将错误与越发再次来到给客户端的主意,毕竟,诸如至极与丰裕处理的创设都是一门一定的技术,不可以通过服务边界。本章介绍了错误处理的最佳实践,使开发者可以清除客户端错误处理与劳务的耦合度。本章还演示了什么扩张以及立异WCF基础的错误处理机制。

第7章,事务

第一,本章从完整上介绍了运用工作的目标,然后商讨了作业服务的众多特性:事务管理架构、事务传播(Transaction
Propagation)配置、WCF提供的评释性事务帮助,以及客户端创立工作的不二法门。最终,本章探究了与工作相关的规划标准,例如事务服务境况管理与实例情势。

第8章,并发管理

WCF提供了一种强大但是简约的宣示格局,用来管理客户端与服务的面世与协办。本章呈现了不可胜言高等技术,例如回调、重入(Reentrancy)、线程关联度(Thread
Affinity)、同步上下文(Synchronization
Context)以及制止死锁的特级实践与原则。

第9章,队列服务

本章描述了客户端怎样通过队列调用服务,从而扶助异步与离线工作。本章首先介绍了哪些创设与陈设队列服务,然后,重点教学了诸如事务、实例管理、故障以及它们对劳动业务模型与贯彻造成的熏陶。

第10章,安全

透过将四个地点的职分分解为一些基本的因素,如音讯传递、认证和授权,就足以揭开面向服务安全神秘的面纱。本章演示了什么样为局域网和网络应用程序等主要场景提供安全保证。最终,你可以看出自身为评释式的WCF安全所编写的框架,设计为自行达成攀枝花的安装,从而极大地简化对平安的军事管制。

附录A,面向服务概述

附录A为这一个愿意明白面向服务的读者提供,介绍了自家在面向服务的切实可行应用。附录定义了面向服务应用程序(而非日常所谓的架构)以及劳动本身,检验了它在方理学方面的优势。附录还提交了面向服务的规则,通过多数应用程序所急需的实用要点,强化了面向服务的悬空原则。

附录B,服务发表与订阅

附录B展现了我定义的框架,它已毕了发表-订阅事件管理的化解方案。框架可以使您只须求编制一两行代码就能揭示和订阅服务。公布-订阅情势属于第5章的情节,之所以将它放入到附录中,是因为它利用了其他章节的内容,例如事务与队列调用。

附录C,WCF编码规范

大抵,附录C涵盖了全书提及的甚至没有提及的极品实践。规范在于论述应该“怎么办”以及“怎么办”,而不表明其原因。隐藏在规范内部的根底原理可以在本书的其余部分找到。本标准同时还运用了本书商量的鼎力相助类。

对于读者的假诺

本书假定读者是一名经验充足的开发者,熟稔诸如封装与继承等面向对象的定义。我会利用读者现有的对目的和零部件技术以及术语的咀嚼,巩固对WCF知识的询问。读者应当对于.NET以及C#
2.0的基础知识(包括泛型与匿名格局)有着分明的垂询。即使本书一大半情节使用的是C#语言,不过对于Visual
Basic 2005的开发者而言,如故有着参考价值。

什么样利用本书

若要使用本书,须要安装.NET 2.0、Visual Studio 2005、.NET
3.0的揭破组件,以及.NET 3.0支出的SDK和Visual Studio 2005的.NET
3.0扩大版。除非尤其提醒,本书适用的操作系统包涵Windows XP、Windows
Server 2003和Windows
Vista。同时,你还索要安装一些外加的Windows组件,如MSMQ和IIS。

本书约定

下列为本书的印刷体约定:

斜体

用以技术术语、在线链接和文件名

等宽字

用以示范代码、语句、命名空间、类、程序集、接口申明、操作符、特性以及保留字

等宽粗体字

用于代码中的重点部分

唤醒:该图标标示着附近的文书非凡重大。

警示:该图标代表附近的文件属于警告新闻。

每当我想要在实例代码中特意表明某一内容,我会在调用Debug类的Assert静态方法:

int number = 1+2;
Debug.Assert(number == 3);

Assert方法可以收到Boolean型语句,当值为false时,抛出非常。

本书推荐的命名规范与编码样式可以参见拙著《.NET组件编程(O’Reilly)》附录E中的内容。如果书中代码背离了这一正经,是因为境遇了空格或代码行长度的限定。至于命名约定,我利用“Pascal
casing”为国有成员方法与特性命名,即名称的各类单词首字母要大写。至于当地变量和艺术参数,则使用“camel
casing”方式,即名称中的第二个单词首字母不要大写。对于私有成员,我会在变量名后边加上前缀m_:

public class SomeClass
{
  int m_Number;

  public int Number
  {get;set};
}

自己动用在花括弧之间加点的款型,表示其中省略了必备但不需求指定的代码:

public class SomeClass
{…}

为清晰起见,实例代码平日并不带有using语句指定示例必须的命名空间,唯有在前文中介绍到的新的命名空间,才会蕴藏在实例代码中。

使用实例代码

 “磨刀不误砍柴工”,那有的内容可以更好地扶持您达成工作。总的来说,你不要得到授权就足以在您的顺序和文档中动用本书的代码,除非您对代码最保养的部分进行了二次加工。例如,使用本书的代码片段编写程序,并不必要特其他许可,但销售或分发包涵本书实例代码的光盘则必须取得认同。引用本书的实例代码或难点解答是不必要授权的,但是尽管要将本书实例中的大旨代码放入到您的出品文档中,则须要获得认同。

俺们讲究图书的版权须要,不过并非必须。图书版权常常包涵标题,小编,出版商以及ISBN。例如:”Programming
WCF Services by Juval Löwy. Copyright 2007 O’Reilly Media, Inc.,
978-0-596-52699-3.”

假若您在选用实例代码进程中发觉了错误,或者希望赢得上述授权,敬请联系大家:permissions@oreilly.com.

什么联系大家

对此本书,即使有其它看法或难题,请依据以下地点联系本书出版商:

O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international/local)
707-829-0104 (fax)

本书的网页列出了校勘表、实例以及其余附加信息。你可以由此以下地方访问:
http://www.oreilly.com/catalog/9780596526993

至于本书技术内容的眼光或难题,可以发送邮件到bookquestions@oreilly.com。

您也足以经过以下地点联系小编:http://www.idesign.net

小编在IDesign网站上公布了本书提及的百分之百代码库,共计超越120个下载内容,包罗WCF基础,契约设计,实例管理,操作与调用,错误,事务,并发,队列以及安全。下载内容包含了本书一大半可知运转的代码段。

Safari® Enabled

读者是不是注意到在您欣赏的技艺书籍的封底上,有一个Safari®
Enabled图标。它表示本书由O’Reilly Network Safari
Bookshelf提供了在线的可用版本。

Safari提供了一套优于电子书籍的缓解方案。它是一个虚拟教室,读者通过它可以省事地寻找到数千本一级的技术书籍,剪切和粘贴代码实例,下载书中的章节,搜寻你所须求的更详尽、更准确的新闻。飞速行动吗,体验就在http://safari.oreilly.com。

致谢

比方没有WCF(Indigo)项目COO们直接以来的支撑与协助,我一向不可以在WCF诞生之初就可以熟知了然那门技术。我无法不感谢我的爱人SteveSwartz,作为WCF的一名架构师,他不只进献了他的文化与胆识,还有他的古道热肠,始终不厌其烦地在IM(即时通信工具)之上与自己琢磨相关难点。感谢Yasser
Shohoud,Doug Purdy以及Shy
Cohen,感谢他们就本书作出的美妙而又主要的布署复审,同时还要感谢Krish
Srinivasan,感谢她在软件工程学上如国学家一般的远见卓识。可以与你们一起搭档,是自我三生侥幸,也是本人在攻读驾驭WCF过程中的紧要收获。以下WCF程序员则成仁了她们的日子,扶助自己表明了WCF这门技术:AndyMilligan, Brian McNamara, 尤金 Osovetsky, Kenny 沃尔夫, Kirill
Gavrylyuk, 马克斯 Feingold, 迈克尔 Marucheck, 迈克 Vernal, and SteveMillet。同时还要感谢这么些小组的经纪Angela Mills。

除此之外微软的积极分子,我还要感谢诺玛n Headlam和Pedro
Felix,你们给了自己越发有价值的反馈。感谢NicholasPaldino的扶植。尼克对于.NET框架的接头是无比的,正是因为他一叶落而知天下秋的缜密精神,才可以确保本书的人格。

最后,我要谢谢我的老小。我的老婆Dana,是你锲而不舍地鼓励我,让自家力所能及写下自家的所思与所得,但却就义了随同您和姑娘们的可贵时间。感谢自己的大人,是你们带给了自家对工程学的尽头热爱。我还要将本书献给自己的多少个姑娘,7岁的Abigail,4岁的埃莉诺。对于自身而言,可爱的你们就是自己的全部社会风气。