SOA 观念提出后,经过多年的时间终于开始发酵。微软世界里因 WCF 的出现,简化了实做的基础。SOA 强调如下的重点:
l 一切技术遵循公开标准
l 服务定义的边界明确
l 服务自主而不受制于其他服务
l 服务间只共享合约和原则
这些概念既抽象,实际设计与撰写也很繁琐,且维护不易,WCF 则尽量将我们所需要开发的商业逻辑与 SOA 的基本要求分开。系统开发人员依然专注在使用者的需求,若要满足 SOA 的特性,仅需要照着 WCF 的规范提供定义后,就交由平台去负责。
换句话说,要落实 SOA 的概念,需要容易开发自定服务的整合环境与执行平台。在强调组装、重用与整合下,程序如何遵循标准,共享数据合约和服务合约,而非绑死在基本数据型态和类别?在开放架构下,跨异质型平台的沟通变成是基本,如何弹性、安全、有效率地沟通?当上述问题变成是基本需求,则根稳固才会枝繁叶茂。微软就此推出了 WCF,为架构工程师和程序设计师清除了底层的障壁。
什么是 WCF
WCF 全名是 Windows Communication Foundation,程序代码名称为 ”Indigo”,是建立在 .NET 上的应用程序沟通框架,集微软分布式应用经验之大成。整合了 .Net 平台和分布式计算相关的技术,如.Net Remoting、Web Service/WSE/WS-*、分布式交易(.NET Enterprise)和讯息处理(MSMQ),以及以往的 COM+/DCOM 等技术。提供开发者建立跨平台、安全、可信赖、交易管理的解决方案,且与既有系统兼容。
WCF 内建于.Net Framework 3.0。Windows Vista 及 Windows 2008 操作系统会预含该架构。而 Windows XP 和 Windows 2003 操作系统也可以单独安装 .NET Framework 3,0 Runtime。现今通行的 Visual Studio 2005 中并没有包含WCF,但可自微软的网站下载 Visual Studio 2005 extensions for .NET Framework 3.0,以方便开发架在 WCF 上的系统。
WCF 总体架构如图 1 所示:

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="圖片_x0020_1" style="VISIBILITY: visible; WIDTH: 376.5pt; HEIGHT: 217.5pt; mso-wrap-style: square" o:bwmode="inverseGray" type="#_x0000_t75" o:spid="_x0000_i1025"><imagedata o:title="" src="file:///C:%5CUsers%5CByron%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.png"></imagedata></shape>
图 1:WCF 的总体架构
WCF 规范你在写商业逻辑前,要先制定程序间沟通时所需的合约,如数据合约、服务合约、讯息合约等。接着,透过设定 behavior 你可以调整 WCF runtime 如何搭配你的服务执行,例如是否要提供 WSDL 说明给前端,是否传回完整错误讯息…等。
就程序或系统间的沟通而言,WCF 可以跨程序(Process)、机器、局域网络、乃至于因特网。以 WCF 为基础的服务,其宿主(Host)程序可以是 IIS、ASP.NET,EXE,Windows Service,COM+…等。WCF 支持的网络协议包括 SOAP、HTTP、Named Pipe、TCP…等,而它提供的安全机制包括各种加解密算法、SAML、Kerberos、X509、账号/密码等多种标准与模式,你也可以自定义协议与安全机制,以延伸其功能。
另外,图 1 中 Messaging 区块内的 Channel 代表传输时,各种功能的堆栈。虽然是画在一起,但逻辑上有层次之分,例如 Transaction Flow 最高,Reliable 次之,Security 再次之,而 HTTP、TCP、Named Pipe 同属底层的传输协议。
总而言之,WCF将所有与程序沟通相关的技术都包含在内,并替你实做了 OASIS 组织所定义一堆的 WS-* 标准规格。而熟悉 WCF 是简化 SOA 开发的第一步。
WCF 的优点
概括地说,WCF具有如下的好处:
l 统一:如前所述,WCF 整合微软历来分布式开发的技术。
l 相容:充分与旧有系统兼容。安装WCF并不会影响企业内原有的技术,且仍可与其沟通。
l 整合:WCF支持多种通信协议以保证系统间的互操作性,且期待经由标准的 WS-*/Web Service/SOAP 等规格,可跨异质型平台整合。
l 安全:支持 WS-* 所规范的多种安全机制,如 WS-Security,WS-Trust 和WS-SecureConversation 等标准,以用于用户认证,数据完整性验证,数据隐私等多种安全议题。
l 可信赖的讯息沟通:一般对可信赖的讯息沟通之要求可大分为两部分,一是安全,另一是两端收发讯息的质量。安全的部分如前点所述,WCF 同时支持 WS-ReliableMessaging、WS-Addressing 标准,提供可信赖的端对端通信。同时还支持 MTOM 规格(讯息传输优化机制,Message Transmission Optimization Mechanism),让大型二进制数据可以有效地传递。
l 整合队列(Queue):上述讯息质量指的是两端应用程序同时在在线之端对端沟通。而 WCF 也支持透过队列(Queue)传递讯息,让两端不必同时存在同一时空中。
l 交易管理:建立在 WS-Coordination 和 WS-AtomicTransaction 标准之上,以整合异质型平台的交易,提供分布式交易所需的两阶段完成交易协议(two-phase commit transactions)。
l 简化开发:让以往需徒手撰写的功能改以设定启动(依据微软举的例子,将原本需撰写 56296 行的程序代码简化成 3 行程序代码,4 行设定)。
光是表列这么多 WCF 的好处当然不够J,上图 1 的架构也非三言两语可以道尽。在此介绍一本关于 WCF 的好书「Microsoft Windows Communication Foundation Step by Step」,作者是 John Sharp,Microsoft Press 出版。它有着 Step by Step 系列书籍的特征,就是藉由许多实做范例导引你。但不同的是,本书所援引的技术广且深。
书籍内容
本书共有十六个章节,利用前三章介绍了 WCF 的基本原理,其余针对不同的需求面向,深入解释并辅之以实做。第一章以简单范例启始,用架在 WCF 上的用户端应用程序呼叫服务。第二章介绍透过 .NET Framework 3.0 的 System.ServiceModel.ServiceHost 类别来承载我们所撰写的服务,但由于它只是一个类别,自己不会执行。作者进一步示范如何撰写 WPF 以及 Windows Service 两种应用程序类型来加载先前撰写的服务。
当系统整合时,会潜藏很多的不确定因素,因为每个系统开发团队对需求与规格的认知不同,技术能力良莠不齐,自然会有很多的例外错误。但这些错误需要在异质平台间传递,因此 WCF 需要能将 .NET Framework 的 Exception 改以 SOAP Fault 来呈现,这是第三章所要强调的主题。其内并示范如何在定义 DataContract 后,再传回自定义的错误结构。
第四章讨论当使用者端与服务端透过网络沟通时,如何保护其安全。在这章中,你可以了解到仅透过设定,藉由 WCF 已经提供的完备功能可以轻易完成验证、签章、加解密等机制。第五章则延伸安全的讨论到因特网。
第六章主要在介绍服务和数据合约的版本控管,以及建议更新版本的做法。第七章介绍如何在伺服端维护用户端的状态,但这与服务实例的生命周期密切相关。第八章讨论分布式交易,透过简单的范例程序代码说明如何在前端程控交易,但可惜对于异质型平台的分布式交易着墨不多。第九章介绍如何维持通信质量,同时藉由保证讯息顺序的唯一标识/编号和失效等机制,可以防止黑客的回放攻击(replay attack)。
第十章讨论如何藉由程序来设定与管理 WCF 所提供的功能,也解释了图 1 中 Service Runtime 和 Messaging 两个区块。第十一章讨论单向(OneWay)与异步两种沟通方式,这与使用者端是否需要服务器端的响应,以及两者间是否需要同步处理单一需求有关,设计的好坏将影响整体系统的效能和前端程序的流畅与否。第十二章探讨为保证资源有效使用而提供的流量限制,以及传递如多媒体数据等大型二进制数据时,使用的 MTOM 规格。第十三章介绍讯息的绕送,并据此示范经由绕送使用者端的需求来达成负载平衡(load balance)。第十四章说明从服务器端反向呼叫使用者端,这需先在服务器端定义回呼合约(Callback contract),并由使用者端实作。当服务器端发生了使用者端有兴趣的事件时,可以反过来呼叫用户端的程序。
第十五章介绍了 .NET Framework 3.0 引进的 Windows CardSpace 技术,以验证使用者的身分。经由实做,让笔者从懵懂进而理解其架构,以及如何整合凭证(Certificate)来保证双方的安全。本书的最后一章解释如何将以往用 ASP.NET 开发的 Web Service;或是 .NET Enterprise 开发的 COM+ 移转到 WCF,藉以保障先前的投资。
阅读建议
本书的章节内容蛮独立的,循着前三章走完范例,了解 WCF 的基本架构后,就可以选取你有兴趣的主题阅读。
由于 Visual Studio 2008 还未正式发行,你使用的可能是 Visual Studio 2005 版本,要执行本书的范例前,务必参考 Introduction 章节介绍,安装必要的程序对象,否则书中的范例将无法使用。
此书上市之时,书内范例所引用的 Microsoft Enterprise Library 版本是 2.0 – January 2006,而现今在微软网页下载(http://msdn2.microsoft.com/en-us/library/aa480453.aspx)的最新版本已经变成Enterprise Library 3.1 – May 2007 (for .NET Framework 2.0 and 3.0),若你下载的是最新版本,则范例程序代码所呼叫的对象会有版本问题。一般来说,你只要将服务或是服务的宿主程序所使用之 app.config 档案内容,如下的部分稍做修改即可:
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
你可以参照该对象的版本特征来修改上述粗体字的部分,但最简单的方式应是将其删除即可。
本书在说明时多辅之以范例,而范例设计成填空题,清楚解释操作步骤,让你仅撰写或复制/贴上关键的程序代码即可。章节之间的部分范例有关连性,若能跟着章节走,对范例较能融贯。
本书所涵盖的面向相当广泛,程序设计新手阅读起来可能会有点辛苦。换言之,你是个使用 Visual Studio 2005 的 C# 程序老手,且有网络结构、交易管理、安全等基本知识,则 WCF 将是一个工作利器。当然,若你是系统分析设计人员,或是架构工程师,也可以透过此书了解一下分布式系统应注意的事项。
相关阅读
除了本书之外,笔者列出些与 WCF 相关的资源供你参考:
l 微软对 WCF 的主网页:http://wcf.netfx3.com/,MSDN 对 WCF 的主网页:http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx。
l 制定 WS-* 标准的 OASIS (Organization for the Advancement of Structured Information Standards) 组织的首页:http://www.oasis-open.org/home/index.php。
l 另一本关于 WCF 不错的书:Inside Windows Communication Foundation,出版社 Microsoft Press,作者 Smith。这本书只有本文介绍的书三分之二的厚度,单就 WCF 本身介绍,并未延伸讨论。
最后,就个人对 WCF 的感觉是:我们实做信息系统的技术依然建立于 .Net 之上,以面向对象/组件导向的设计方式融入服务导向的精神后,WCF 将可简化与商业逻辑无关的部分。明年(2008/3月) Visual Studio 2008(Orcas) + Windows 2008(Longhorn) + IIS 7出来后,新一代的 AP Server 可以便利地整合 WCF,也有一致的开发与设定方式,分布式系统将有一番新气象。
分享到:
相关推荐
《指向深度学习的生物学教学研究》是一本关于如何将深度学习理念应用于生物学教学的书籍,通过对生物学教学实践的深度研究,展示了在真实情境中如何利用科学知识解决实际问题。书中强调了STEM教育理念的融入,即科学...
教师专业学习共同体(PLC)是一种以教师为主体的、旨在提升教育质量的组织形式。它强调教师间的合作与共享,通过共同学习和交流经验来促进专业成长和学生学习。随着教育专业化的推进,PLC逐渐成为国内外教育研究的...
《指向深度学习的生物学教学研究》是一本旨在探讨如何在生物学教学中引导学生进行深度学习的书。该书强调了在教学过程中运用多学科知识的重要性,特别强调了物理学、化学和数学分析方法在理解生命现象中的作用。...
- 包月订购:提供3元包和5元包,包含不同数量的免费书、折扣权益和书讯。 - 点播计费:按次点播,按千字计费,不足1000字按实际字数收费。 5. **功能应用** - 导航区:快速定位用户常看的图书类型。 - 推荐区:...
【个人中心】全面掌握个人读书脚印,轻松管理账号信息,还可及时获取最新书讯、优惠活动、礼券到期提醒。 【阅读体验全面升级】 1、UI、UE全面优化,读书秒开、翻页顺滑、护眼模式、轻松阅读……堪称业界良心的升级...
【在线书店】项目是北大青鸟推出的一个教育实践项目,旨在帮助学员掌握实际的Web开发技能,特别是电子商务网站的构建。这个项目的核心目标是设计并实现一个功能完备、用户友好的在线购书平台,使学员在实践中理解并...
JS向上滚动,JS向上滚动,JS向上滚动,JS向上滚动
--书讯快递--> <div class="book_sort_bg"><img src="images/dd_book_mess.gif" alt="mess" vertical-align:text-bottom;"/>书讯快递 ・2010考研英语大纲到货75折... ・权威定本四大名著(人民文......
2. 书讯广告:甘辛为了提高书籍的知名度,选择在杂志上登载书讯广告,这是一种推广手段,旨在告知潜在读者新书的信息,增加销售机会。书讯广告通常包括书名、作者、简介和购买渠道等内容。 3. 出版市场困境:甘辛的...
首页的主要内容是查看最新上架的各类图书、重点关注的图书、近7日网上畅销的图书、书讯快递,以及根据图书分类的方式查看各类图书,首页应实现如下功能。 1、 网站导航部分的树形菜单。当鼠标指针停在“我的当当”...
- **平面媒体**:合作全国数百家媒体,发布书讯、书评,提升图书的知名度。 - **电台电视台**:通过广播和电视节目推荐,扩大影响力。 - **渠道推广**:与当当、卓越等在线零售商合作,进行专题制作和打榜;与...
┆【考研专区】免费提供当年最新考研复习资料、书讯书评信息、知名考研 ┆ ┆ 辅导班的教学视频,历年真题! ┆ ┆【就业指导】提供实用就业指导,教你如何制作简历,如何择业、求职! ┆ ┆【以食为天】提供...
书籍的出版信息,包括联系地址、电话、传真、邮箱、网站等,也都详细列出,方便读者与出版方取得联系,以及获取勘误、资源下载和书讯信息。 从内容和结构上看,《Python网络编程》不仅是一本技术书籍,也是一本内容...
前台功能包括书籍搜索、分类浏览、书目展示、消息公告、书讯查看、在线订购、书店留言、用户登录和注册等,提供用户友好的交互体验。后台则涉及图书上架、信息管理、类别管理、新闻发布、订单处理、留言管理、用户及...
回顾这次书讯经历,至今我仍感慨颇多,的确,从选题到开始制作,从理论到实践,5天实训的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上...
该项目功能主要含用户登录(用户登录页面),用户注册(新用户注册页面),首页网页特效(下拉菜单的自动显示与隐藏,随滚动条上下移动的广告图片,带数字按钮的循环显示的图片广告,Tab切换特效,书讯快递无缝隙、...
图书宣传策划通常按照四个层次进行:通过连载预热,专访深入介绍,发布书讯广泛传播,以及举办签售等活动增强互动。为了有效执行宣传策略,出版社需要随时关注图书选题动态,制定针对重点图书的宣传方案,并建立与...