基于WCF构架的应用与研究

时间:2022-07-05 01:47:19

基于WCF构架的应用与研究

摘要:通过介绍面向服务的WCF构架的功能特点和技术要素,分析研究其用于分布式的多层开发技术, 以及对WCF在一般场景应用的服务端、宿主、客户端开发的阐述,为大家学习基于WCF的分布式技术,提供了开发步骤与过程。

关键词:WCF;分布式开发;SOA

中图分类号:TP302.1文献标识码:A文章编号:1009-3044(2010)01-77-03

Research and Application Based on the WCF framework

ZHAO Hai-ning, LI Yang

(Henan University, Kaifeng 475004, China)

Abstract: Introducing a service- oriented applications WCF framework of the unity of the system architecture features and technical elements, analyzing and studying the development of technologies for distributed multi-layer. As well as in the general scene of the WCF service, host, client development of elaborated,in order to learn WCF-based distributed technology,provide the steps and process of the development for someone.

Key words: WCF; distributed development; SOA

Windows 通讯基础(Windows Communication Foundation,WCF)是基于Windows 平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。它是微软专门针对面向服务(Service Oriented)应用程序提供的分布式编程框架。WCF是.NET 3.0 的组成部分之一,该框架旨在统一迄今为止微软创造的各种不同的通信技术,从功能角度来看,WCF整合了ASMX、.Net Remoting、Enterprise Service、WSE以及MSMQ等现有技术的优点。 WCF 通过一种面向服务的新型编程模型简化了关联应用程序的开发。通过提供分层的体系结构,WCF 可以支持多种风格的分布式应用程序开发。WCF 通道体系结构在底层提供了异步的非类型化消息传递基元,可以使用托管代码建立和运行SOA 的软件系统。它提供了一种构建安全可靠的分布式面向服务系统的统一的框架模型,使软件研发人员在开发分布式应用程序时变得更加轻松。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

1 WCF的技术要素

WCF最重要的就是能够快捷的创建一个服务(Service),一个WCF Service由下面三部分构成:

Service Class:一个标记了[ServiceContract]Attribute的类,在其中可能包含多个方法。除了标记了一些WCF特有的Attribute外,这个类与一般的类没有什么区别。

Host(宿主):可以是应用程序,进程如Windows Service等,它是WCF Service运行的环境。宿主监听来自客户端的请求,并给出相应的响应。WCF提供了多种宿主形式,适合在不同的应用环境中使用。

Endpoints:它是WCF实现通信的核心要素,一个Endpoint由三部分组成:Address(地址),Binding(绑定),Contract(契约)。

地址描述了服务采用的通讯协议、服务所在主机的位置、端口以及服务的标识,客户端是通过地址来找到具体的服务。

绑定定义了客户端与服务端之间通讯的协议以及通信的细节,描述的是如何发送消息。每种绑定对应不同的传输协议、消息编码格式和版本以及安全、可靠性和事务模式。WCF也提供了扩展绑定的方式,例如通过CustomBinding或者定义派生与Binding的类。

契约是WCF的消息标准,告知客户端如何与服务器联系交互,它包括服务契约、数据契约和消息契约(特别的,还包括了错误契约,用于异常的处理)。其中服务契约为面向服务应用程序的核心,通过它可以定义服务。数据契约则为服务所要传递的数据。由于服务的调用需要跨进程或机器进行通信,就需要服务数据必须能够被序列化和反序列化。消息契约则可以将服务数据定义为消息,包括XML文本格式、MTOM(消息传输优化机制)格式和二进制格式。

2 WCF服务端的开发

服务的设计主要放到了业务逻辑层来实现。包括UILayer里面的ServiceProxy以及BLayer 里面的所有文件。其中:ServieceProxy用来定义服务, 它里面暴露的方法供表示层来进行调用, 表示层只和ServiceProxy交互。ServiceProxy是调用BLayer里面的Contract, 也即是WCF 中的服务契约, 这里的Contract全部用来存放接口。接口的实现放入Facade实现, 同时在Facade里面进行一些业务规则的处理。Facade进行相关处理后, 直接调用Rules里面的方法。Rules里面定义的是最小的原子方法,它们是和数据层进行交互的。在Rules里面不进行业务规则的运算和处理, 它里面定义的是最小最细的方法。

1) 服务开发者使用.NET 接口定义一份契约。

使用WCF 服务模型时,我们一般从定义契约开始。定义契约是很简单的,只要先编写一个接口,并为其添加特性以指定这个接口是一个WCF契约。具体一个契约如下:

using System;

using System.Collections.Generic;

using System.ServiceModel;

using System.Text;

namespace Test

{

[ServiceContract]

public interface ITest

{

[OperationContract]

void TestDo();

}}

2) 服务开发者编写一个实现该接口的类,即服务类型

using System;

using System.Collections.Generic;

using System.Text;

namespace Test

{

public class TestType:ITest

{

#region ITest Members

void TestDo()

{ }

#endregion

}}

由上面的代码我们可以发现服务类型的定义就是实现了契约接口的类。

3) 服务开发者通过给服务类型及其方法添加特性对WCF行为做出适当修改。

4) 用Service Configuration Editor或手动配置服务的终结点,即为已经被服务类型实现的契约关联地址和绑定。

5) 用Service Configuration Editor或手动对WCF行为做出适当的修改。

3 WCF宿主端的开发

WCF与其它类库另一个不同的地方,则在于WCF充分地体现了运行时环境的概念。由于WCF对服务有着专门的需求,对于服务端,需要和运行服务;对于客户端,则需要调用服务;因而对于开发者,就需要编写定义、、运行、调用服务的相关代码。而服务就只能运行在特定的宿主上,服务开发者为服务提供恰当的运行宿主环境,即承载服务。IIS 承载:在微软的Internet信息服务器(IIS)中承载服务。该方式的主要优势是宿主进程可以在客户端提交第一次请求的时候自动启动,还可以借助IIS服务宿主进程的生命周期。主要缺点在于只能使用HTTP协议。自承载:所谓自承载,就是由开发者提供和管理宿主进程的生命周期。适用于:需要确定客户端与服务之间的进程(或机器)边界时;使用进程内托管,即服务与客户端处于相同的进程中时。WAS承载:只适用于Windows Vista。WAS与IIS的主要区别在于WAS并不局限于使用HTTP,它支持所有可用的WCF传输协议、端口和队列。

在宿主内部,则封装了通道堆栈,其中又包含了对协议、编码、消息传输、的处理。而在通道层的顶部,还提供了一个高级运行时,以针对应用程序的开发人员。

4 客户端的开发

客户端的设计主要包括实现客户端与配置文件、客户端的回调接口契约的实现以及客户端的窗体界面和Web 界面的设计与代码逻辑实现。在客户端配置文件中, 地址、绑定、契约分别与宿主端配置所一一对应。客户端开发者使用服务模型元数据工具下载描述服务的WSDL 并生成与服务通信所需要的代码和配置文件。

首先我们在浏览器中输入localhost:8000/Test/?WSDL后将出现用来描述Web服务的WSDL信息。然后根据WSDL信息可以手工编写相关程序代码和配置文件,也可以利用相关工具来生成程序代码和配置文件,具体命令如下:svcutil localhost:8000/Test/?wsdl/out:c:/client.cs /config:c:/app.config。

客户端开发者利用代码和配置文件进行编程,与服务进行通信。由上面工具生成的代码使用方式如下:

……

using (TestProxy proxy=new TestProxy("BasicHttpBinding_ITest"))

{

……

proxy.TestDo();

……

}

TestProxy:这个由工具生成的类名。

BasicHttpBinding_ITest:这是绑定的终结点名,指定在程序配置文件中使用哪个定义的终结点通信。

proxy.TestDo():这是执行具体服务操作。

5 结束语

本文简要介绍了WCF和WCF进行开发的基本步骤,展现了基于WCF开发分布式软件系统的编程方法与程序设计技巧。这只是基本的、概念性的介绍,适用于一般的应用场景,而例如WCF中安全性、事务、程序,定制等高级应用需要大家结合实际继续研究。对于使用.NET Framework 进行软件研发的开发人员来说,WCF是分布式编程领域的一个新台阶, 关注WCF技术的发展趋势并在实际开发项目中合理的运用它是十分必要的。

参考文献:

[1] Juval L.Programming WCF Services[M].Oreilly & Associates Inc,2005.

[2] McMurtry C,rc Mercur.WCF 揭秘[M].北京:人民邮电出版社,2008.

[3] Bustamante M L.学习WCF:从原理到实践[M].北京:电子工业出版社,2008.

[4] 张逸.WCF基础知识问与答[EB/OL].[2008-04-15]./n2005c13.aspx.

上一篇:运用“信息系统三大能力”框架对决策支持系统... 下一篇:远洋运输业业务邮件信息抽取系统的设计及实现