书讯--Microsoft Windows Communication Foundation Step by Step

来源:互联网 发布:淘宝定制产品纠纷退款 编辑:程序博客网 时间:2024/04/30 12:08

SOA 观念提出后,经过多年的时间终于开始发酵。微软世界里因 WCF 的出现,简化了实做的基础。SOA 强调如下的重点:

l   一切技术遵循公开标准

l   服务定义的边界明确

l   服务自主而不受制于其他服务

l   服务间只共享合约和原则

这些概念既抽象,实际设计与撰写也很繁琐,且维护不易,WCF 则尽量将我们所需要开发的商业逻辑与 SOA 的基本要求分开。系统开发人员依然专注在使用者的需求,若要满足 SOA 的特性,仅需要照着 WCF 的规范提供定义后,就交由平台去负责。

换句话说,要落实 SOA 的概念,需要容易开发自定服务的整合环境与执行平台。在强调组装、重用与整合下,程序如何遵循标准,共享数据合约和服务合约,而非绑死在基本数据型态和类别?在开放架构下,跨异质型平台的沟通变成是基本,如何弹性、安全、有效率地沟通?当上述问题变成是基本需求,则根稳固才会枝繁叶茂。微软就此推出了 WCF,为架构工程师和程序设计师清除了底层的障壁。

什么是 WCF

WCF 全名是 Windows Communication Foundation,程序代码名称为 ”Indigo”,是建立在 .NET 上的应用程序沟通框架,集微软分布式应用经验之大成。整合了 .Net 平台和分布式计算相关的技术,如.Net RemotingWeb Service/WSE/WS-*、分布式交易(.NET Enterprise)和讯息处理(MSMQ),以及以往的 COM+/DCOM 等技术。提供开发者建立跨平台、安全、可信赖、交易管理的解决方案,且与既有系统兼容。

WCF 内建于.Net Framework 3.0Windows 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 所示:

WCF 总体架构

1WCF 的总体架构

WCF 规范你在写商业逻辑前,要先制定程序间沟通时所需的合约,如数据合约、服务合约、讯息合约等。接着,透过设定 behavior 你可以调整 WCF runtime 如何搭配你的服务执行,例如是否要提供 WSDL 说明给前端,是否传回完整错误讯息等。

就程序或系统间的沟通而言,WCF 可以跨程序(Process)、机器、局域网络、乃至于因特网。以 WCF 为基础的服务,其宿主(Host)程序可以是 IISASP.NETEXEWindows ServiceCOM+…等。WCF 支持的网络协议包括 SOAPHTTPNamed PipeTCP…等,而它提供的安全机制包括各种加解密算法、SAMLKerberosX509、账号/密码等多种标准与模式,你也可以自定义协议与安全机制,以延伸其功能。

另外,图 1 Messaging 区块内的 Channel 代表传输时,各种功能的堆栈。虽然是画在一起,但逻辑上有层次之分,例如 Transaction Flow 最高,Reliable 次之,Security 再次之,而 HTTPTCPNamed Pipe 同属底层的传输协议。

总而言之,WCF将所有与程序沟通相关的技术都包含在内,并替你实做了 OASIS 组织所定义一堆的 WS-* 标准规格[1]。而熟悉 WCF 是简化 SOA 开发的第一步。

WCF 的优点

概括地说,WCF具有如下的好处:

l   统一:如前所述,WCF 整合微软历来分布式开发的技术。

l   相容:充分与旧有系统兼容。安装WCF并不会影响企业内原有的技术,且仍可与其沟通。

l   整合:WCF支持多种通信协议以保证系统间的互操作性,且期待经由标准的 WS-*/Web Service/SOAP 等规格,可跨异质型平台整合。

l   安全:支持 WS-* 所规范的多种安全机制,如 WS-SecurityWS-Trust WS-SecureConversation 等标准,以用于用户认证,数据完整性验证,数据隐私等多种安全议题。

l   可信赖的讯息沟通:一般对可信赖的讯息沟通之要求可大分为两部分,一是安全,另一是两端收发讯息的质量。安全的部分如前点所述,WCF 同时支持 WS-ReliableMessagingWS-Addressing 标准,提供可信赖的端对端通信[2]。同时还支持 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 SharpMicrosoft Press 出版。它有着 Step by Step 系列书籍的特征,就是藉由许多实做范例导引你。但不同的是,本书所援引的技术广且深[3]

书籍内容

本书共有十六个章节,利用前三章介绍了 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 档案内容,如下的部分稍做修改即可:

, 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,也有一致的开发与设定方式,分布式系统将有一番新气象。



[1] WS-* 是非常多标准规格的总称,由 OASIS 制定,后文中提及以 WS- 开头的标准规格皆属于此。

[2] 也就是有效绕送并保证讯息寄达、不会重复收取,以及按顺序接收讯息等。若实在无法寄达,发送端也会收到例外错误。

[3] 似乎一旦触及整合,不可免地就要深入了解五花八门的技术。WCF 透过设定或许可以简化系统设计开发人员的程序撰写工作,但其本身提供的设定多如牛毛,若不提纲挈领地了解各种技术概念,根本不会设定。