Visual Studio 中的 Windows Communication Foundation 服务和 WCF 数据服务

Visual Studio 2008 提供了使用 Windows Communication Foundation (WCF) 和 WCF 数据服务(用于创建分布式应用程序的 Microsoft 技术)的工具。 本主题从 Visual Studio 的角度介绍了服务。

什么是 WCF?

Windows Communication Foundation (WCF) 是一个统一框架,用于创建既安全可靠又可交互的分布式事务处理应用程序。 Visual Studio 的早期版本中存在一些可用于在应用程序之间进行通信的技术。

如果要以一种能够实现从任何平台访问信息的方式来共享信息,则应使用 Web 服务(也称为 ASMX Web 服务)。 如果只想在客户端和正在 Windows 操作系统上运行的服务器之间移动数据,则应使用 .NET 远程处理。 如果需要事务处理通信,则应使用企业服务 (DCOM),或者如果需要排队的模型,则应使用消息队列(也称为 MSMQ)。

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

什么是 WCF 数据服务

WCF 数据服务 为可直接与数据库进行交互的服务,它允许您使用标准 HTTP 谓词(如 GET、POST、PUT 或 DELETE)返回数据。 通常,WCF 数据服务 对于用于创建、更新或删除数据库中的记录的应用程序来说,是一个好选择。 有关更多信息,请参见 ADO.NET Data Services Framework(ADO.NET 数据服务框架)。

WCF 编程模型

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

WCF 服务

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

<ServiceContract()>
Public Interface IService1
[ServiceContract]
public interface IService1
<OperationContract()>
Function GetData(ByVal value As String) As String
[OperationContract]
string GetData(string value);

通过使用 OperationContractAttribute 特性标记 WCF 服务公开的函数和方法,可以定义这些函数和方法。 另外,通过使用 DataContractAttribute 特性标记复合类型,可以公开序列化数据。 这样可以在客户端中进行数据绑定。

定义了接口及其方法后,会将它们封装在一个实现该接口的类中。 单一的 WCF 服务类可以实现多个服务协定。

为了使用 WCF 服务,通过通常所说的“终结点”公开了此服务。 只有使用终结点提供的方法才能与服务进行通信;您不能像访问其他类那样通过直接引用来访问该服务。

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

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

WCF 客户端

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

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

  Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
      Dim client As New ServiceReference1.Service1Client
      Dim returnString As String

      returnString = client.GetData(TextBox1.Text)
      Label1.Text = returnString
  End Sub
private void button1_Click(System.Object sender, System.EventArgs e)
{
    ServiceReference1.Service1Client client = new
        ServiceReference1.Service1Client();
    string returnString;

    returnString = client.GetData(textBox1.Text);
    label1.Text = returnString;
}

Visual Studio 中的 WCF 工具

Visual Studio 2008 提供帮助创建 WCF 服务和 WCF 客户端的工具。 有关演示这些工具的演练,请参见演练:创建和访问 WCF 服务

创建并测试 WCF 服务

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

WCF 模板

WCF Visual Studio 模板为服务开发提供一个基类结构。 在**“添加新项目”**对话框中可以使用一些 WCF 模板。 这些模板包括 WCF 服务库项目、WCF 服务网站、和 WCF 服务项模板。

选择模板时,将为服务协定、服务实现、以及服务配置添加文件。 所有必需的特性都已添加,同时将创建简单的“Hello World”服务类型,且不必编写任何代码。 当然,您将需要添加代码以便为实际服务提供函数和方法,但是模板会提供基础。

若要了解有关 WCF 模板的更多信息,请参见 WCF Visual Studio Templates

WCF 服务主机

为 WCF 服务项目启动 Visual Studio 调试程序(通过按 F5)时,将自动启动 WCF 服务主机工具以便以本地方式承载服务。 WCF 服务主机将枚举 WCF 服务项目中的服务、加载该项目的配置、并为它所找到的每个服务实例化主机。

通过使用 WCF 服务主机,可以测试 WCF 服务,而不用在开发期间编写额外代码或提交给特定主机。

若要了解有关 WCF 服务主机的更多信息,请参见 WCF Service Host (WcfSvcHost.exe)

WCF 测试客户端

通过使用 WCF 测试客户端工具,可以输入测试参数、将该输入提交给 WCF 服务、并查看该服务发送回的响应。 如果将 WCF 测试客户端与 WCF 服务主机结合起来,会提供满意的服务测试体验。

按 F5 调试 WCF 服务项目时,WCF 测试客户端将打开并显示在配置文件中定义的服务终结点的列表。 可以测试参数并启动服务,重复此过程以连续测试和验证您的服务。

若要了解有关 WCF 测试客户端的更多信息,请参见 WCF Test Client (WcfTestClient.exe)

在 Visual Studio 中访问 WCF 服务

Visual Studio 2008 简化了创建 WCF 客户端的任务,同时将针对使用**“添加服务引用”**对话框添加的服务自动生成代理和终结点。 所有必需的配置信息将添加到 app.config 文件中。大多数情况下,只需实例化该服务便可以使用它。

通过使用**“添加服务引用”**对话框,可以输入服务的地址或搜索在解决方案中定义的服务。 该对话框将返回由服务和这些服务提供的操作所组成的列表。 通过使用此对话框,还可以定义用于在代码中引用服务的命名空间。

通过使用**“配置服务引用”**对话框,可以自定义服务的配置。 可以更改服务地址,指定访问级别、异步行为和消息协定类型,以及配置类型重用。

相关主题

标题

说明

演练:创建和访问 WCF 服务

逐步演示了如何在 Visual Studio 中创建和使用 WCF 服务。

演练:在 Visual Studio 中创建和访问 WCF 数据服务

逐步演示了如何在 Visual Studio 中创建和使用 WCF 数据服务。

Using the WCF Development Tools

讨论如何在 Visual Studio 中创建和测试 WCF 服务。

如何:添加、更新或移除服务引用

描述如何从项目中添加、更新或移除 WCF 服务。

如何:添加、更新或移除 WCF 数据服务引用

讨论如何在 Visual Studio 中引用和使用 WCF 数据服务。

如何:添加对 Web 服务的引用

描述如何将对 XML (ASMX) Web 服务的引用添加到项目中。

如何:选择服务终结点

描述如何选择公开多个终结点的 WCF 服务的终结点。

如何:异步调用服务方法

描述如何异步调用 WCF 服务。

如何:绑定服务返回的数据

描述如何启用 WCF 服务数据绑定。

如何:将服务配置为重复使用现有类型

描述如何启用或禁用 WCF 服务的类型共享功能。

服务引用疑难解答

介绍服务引用可能发生的一些常见错误以及如何防止这些错误。

调试 WCF 服务

描述在调试 WCF 服务时可能会遇到的常见调试问题和技术。

Windows Communication Foundation 身份验证服务概述

描述如何使用 WCF 为网站提供角色服务。

Messaging in the .NET Compact Framework

描述 .NET Compact Framework 中对 WCF 消息处理层的支持。

演练:创建 N 层数据应用程序

提供分步说明,介绍如何创建类型化数据集,并将 TableAdapter 和数据集代码分离到多个项目中。

“添加服务引用”对话框

描述“添加服务引用”对话框的用户界面元素。

“配置服务引用”对话框

描述“配置服务引用”对话框的用户界面元素。

引用

System.ServiceModel

System.Data.Services