当前位置: 首页 > 编程语言 > .NET综合 > 正文

WCF简介

时间:2010-04-18

一、简介

WCF是Windows Communication Foundation缩写,是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。

根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communication)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

WCF是.NET Framework的扩展,它提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .NET Remoting、Web Services、Web Services Enhancements (WSE)等等,来开发统一的可靠系统。WCF简化了SOA框架的应用,同时也统一了Enterprise Services、Messaging、.NET Remoting、Web Services、WSE 等技术,极大的方便了开发人员进行WCF应用程序的开发和部署,同时也降低了WCF应用开发的复杂度。

WCF支持大量的Web Service标准,这些标准包括XML、XSD、SOAP、Xpath、WSDL等标准和规范,所以对于现有的标准,开发人员能够方便的进行移植。同时WCF可以使用Attribute属性进行WCF应用程序配置,提高了WCF应用的灵活性。WCF遵循客户端/服务器模型在应用程序之间进行通信,客户端程序能够通过服务器端提供的EndPoint端直接访问服务。

WCF是一个统一框架,用于创建既安全可靠又可交互的分布式事务处理应用程序。Visual Studio 的早期版本中存在一些可用于在应用程序之间进行通信的技术。 如果要以一种能够实现从任何平台访问信息的方式来共享信息,则应使用 Web 服务(也称为 ASMX Web 服务)。如果只想在客户端和正在 Windows 操作系统上运行的服务器之间移动数据,则应使用 .NET 远程处理。如果需要事务处理通信,则应使用企业服务 (DCOM),或者如果需要排队的模型,则应使用消息队列(也称为 MSMQ)。

WFC将所有这些技术的功能汇集到一个统一编程模型中。这简化了开发分布式应用程序的过程。

二、WCF框架模型

三、WCF 编程模型

WCF 编程模型 WCF 编程模型基于以下两个实体之间的通信:WCF 服务和 WFC 客户端。该编程模型封装在 .NET Framework 的 System.ServiceModel 命名空间中。

WCF 服务

WCF 服务基于一个定义服务与客户端之间的协定的接口。它是用 ServiceContractAttribute 属性进行标记的,如下列代码中所示:

<ServiceContract()> _
Public Interface IService1
<OperationContract()> _
Function GetData(ByVal Value As String) As String
End Interface

通过使用 OperationContractAttribute 属性标记 WCF 服务公开的函数和方法,可以定义这些函数和方法。另外,通过使用 DataContractAttribute 属性标记复合类型,可以公开序列化数据。这样可以在客户端中进行数据绑定。 定义了接口及其方法后,会将它们封装在一个实现该接口的类中。单一的 WCF 服务类可以实现多个服务协定。 为了使用 WCF 服务,通过通常所说的“终结点”公开了此服务。 只有使用终结点提供的方法才能与服务进行通信;您不能像访问其他类那样通过直接引用来访问该服务。

终结点由地址、绑定和协定组成。地址定义服务的位置;该地址可以是 URL、FTP 地址、网络路径或本地路径。绑定定义与服务通信的方法。WCF 绑定提供一个用于指定协议(如 HTTP 和 FTP)、安全机制(如 Windows 身份验证或用户名和密码)和更多内容的通用模型。协定包括 WCF 服务类公开的操作。

可以针对单一的 WCF 服务公开多个终结点。这样,不同的客户端便可以采用不同的方法与同一服务进行通信。例如,银行服务可以为雇员提供一个终结点,为外部客户提供另一个终结点,每个终结点都使用不同的地址、绑定、和/或协定。

WCF 客户端

WCF 客户端由“代理”和终结点所组成,前者使应用程序能够与 WCF 服务通信,后者与针对服务定义的终结点相匹配。 该代理在 app.config 文件中的客户端上生成并包括有关服务所公开的类型和方法的信息。例如,对于公开多个终结点的服务,客户端可以选择最能满足其需求的服务,以便通过 HTTP 进行通信以及使用 Windows 身份验证(本文发布于编程入门网---www.bianceng.cn)。

创建 WCF 客户端后,可以像引用任何其他对象那样在代码中引用服务。例如,若要调用之前显示的 GetData 方法,则应编写与下列内容相似的代码:

Dim client As New ServiceReference.Service1Client
Dim returnString As String
returnString = client.GetData("Hello")
MsgBox(returnString)

四、Visual Studio 中的 WCF 工具

创建并测试 WCF 服务

可以使用 WCF Visual Studio 模板为基础快速创建自己的服务。然后可以使用 WCF 服务自动主机和 WCF 测试客户端来调试和测试此服务。通过共同使用这些工具,可以快速方便地进行调试和测试,从而缩短调试和测试周期,并且不必在早期阶段提交给宿主模型。

WCF 模板

WCF Visual Studio 模板为服务开发提供一个基类结构。在“添加新项目”对话框中可以使用一些 WCF 模板。这些模板包括 WCF 服务库项目、WCF 服务网站、和 WCF 服务项模板。 选择模板时,将为服务协定、服务实现、以及服务配置添加文件。所有必需的属性都已添加,同时将创建简单的“Hello World”服务类型,且不必编写任何代码。当然,您将需要添加代码以便为实际服务提供函数和方法,但是模板会提供基础。

WCF 服务主机

为 WCF 服务项目启动 Visual Studio 调试程序(通过按 F5)时,将自动启动 WCF 服务主机工具以便以本地方式承载服务。WCF 服务主机将枚举 WCF 服务项目中的服务、加载该项目的配置、并为它所找到的每个服务实例化主机。 通过使用 WCF 服务主机,可以测试 WCF 服务,而不用在开发期间编写额外代码或提交给特定主机。

WCF 测试客户端

通过使用 WCF 测试客户端工具,可以输入测试参数、将该输入提交给 WCF 服务、并查看该服务发送回的响应。如果将 WCF 测试客户端与 WCF 服务主机结合起来,会提供满意的服务测试体验。 按 F5 调试 WCF 服务项目时,WCF 测试客户端将打开并显示在配置文件中定义的服务终结点的列表。可以测试参数并启动服务,重复此过程以连续测试和验证您的服务。

在 Visual Studio 中访问 WCF 服务

Visual Studio 2008 简化了创建 WCF 客户端的任务,同时将针对使用“添加服务引用”对话框添加的服务自动生成代理和终结点。所有必需的配置信息将添加到 app.config 文件中。大多数情况下,只需实例化该服务便可以使用此服务。 通过使用“添加服务引用”对话框,可以输入服务的地址或搜索在解决方案中定义的服务。该对话框将返回由服务和这些服务提供的操作所组成的列表。通过使用此对话框,还可以定义用于在代码中引用服务的命名空间。 通过使用“配置服务引用”对话框,可以自定义服务的配置。可以更改服务地址,指定访问级别、异步行为和消息协定类型,以及配置类型重用。