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

Visual Studio 提供了用于使用 Windows Communication Foundation(WCF)和 WCF 数据服务的工具,Microsoft用于创建分布式应用程序的技术。 本主题从 Visual Studio 的角度介绍了服务。 有关完整文档,请参阅 WCF Data Services 4.5

什么是 WCF?

Windows Communication Foundation(WCF)是一个统一的框架,用于创建安全、可靠、事务化和可互作的分布式应用程序。 它取代了较旧的进程间通信技术,如 ASMX Web 服务、.NET 远程处理、企业服务(分布式组件对象模型(DCOM)和Microsoft消息队列(MSMQ)。 WCF 将所有这些技术的功能汇集在一个统一的编程模型中。 这简化了开发分布式应用程序的体验。

什么是 WCF 数据服务

WCF 数据服务是开放数据(开放数据协议(OData)协议标准的实现。 WCF 数据服务允许将表格数据公开为一组 REST API,允许使用标准 HTTP 谓词(如 GET、POST、PUT 或 DELETE)返回数据。 在服务器端,WCF 数据服务将被 ASP.NET Web API 取代,用于创建新的 OData 服务。 WCF Data Services 客户端库始终是通过 Visual Studio 在 .NET 应用程序中使用 OData 服务(Project>Add Service Reference)的理想选择。 有关详细信息,请参阅 WCF Data Services 4.5

WCF 编程模型

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

WCF 服务

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

[ServiceContract]
public interface IService1

定义 WCF 服务公开的函数或方法,方法是使用 OperationContractAttribute 特性标记它们。

[OperationContract]
string GetData(string value);

此外,还可以通过将复合类型标记为DataContractAttribute属性来公开序列化的数据。 这将在客户端中启用数据绑定。

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

WCF 服务通过所谓的 终结点公开供使用。 终结点提供与服务通信的唯一方法;无法像使用其他类一样通过直接引用访问服务。

终结点由地址、绑定和协定组成。 地址定义服务所在的位置;这可能是 URL、文件传输协议(FTP)地址或网络或本地路径。 绑定定义与服务通信的方式。 WCF 绑定提供了一种通用的模型,用于指定协议(如 HTTP 或 FTP、Windows 身份验证或用户名和密码等安全机制),等等。 协定包括 WCF 服务类公开的操作。

可以为单个 WCF 服务公开多个终结点。 这样,不同的客户端就可以以不同的方式与同一服务通信。 例如,银行服务可以为员工提供一个终结点,另一个终结点用于外部客户,每个终结点使用不同的地址、绑定和/或合同。

WCF 客户端

WCF 客户端由一个 代理 组成,使应用程序能够与 WCF 服务通信,以及与为服务定义的终结点匹配的终结点。 代理在客户端的app.config文件中生成,并包含有关服务公开的类型和方法的信息。 对于公开多个终结点的服务,客户端可以选择最符合其需求的服务,例如,通过 HTTP 进行通信并使用 Windows 身份验证。

创建 WCF 客户端后,可以在代码中引用服务,就像引用任何其他对象一样。 例如,若要调用 GetData 前面所示的方法,需要编写如下所示的代码:

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 提供了工具来帮助创建 WCF 服务和 WCF 客户端。 关于工具使用的演练,请参阅 演练:在 Windows 窗体中创建简单的 WCF 服务

创建和测试 WCF 服务

可以使用 WCF Visual Studio 模板作为基础快速创建自己的服务。 然后,可以使用 WCF 服务自动主机和 WCF 测试客户端来调试和测试服务。 这些工具联合起来提供快速便捷的调试和测试周期,并消除了在早期阶段确定托管模式的要求。

WCF 模板

WCF Visual Studio 模板提供用于服务开发的基本类结构。 “ 添加新项目 ”对话框中提供了多个 WCF 模板。 其中包括 WCF 服务库项目、WCF 服务网站和 WCF 服务项模板。

选择模板时,将为服务协定、服务实现和服务配置添加文件。 已添加所有必要的属性,创建简单的“Hello World”类型的服务,无需编写任何代码。 当然,你需要添加代码来为实际服务提供函数和方法,但模板提供了基本基础。

若要了解有关 WCF 模板的详细信息,请参阅 WCF Visual Studio 模板

WCF 服务主机

为 WCF 服务项目启动 Visual Studio 调试器(按 F5)时,WCF 服务主机工具会自动启动本地托管服务。 WCF 服务主机枚举 WCF 服务项目中的服务,加载项目的配置,并为它找到的每个服务实例化主机。

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

若要了解有关 WCF 服务主机的详细信息,请参阅 WCF 服务主机(WcfSvcHost.exe)。

WCF 测试客户端

使用 WCF 测试客户端工具可以输入测试参数,将该输入提交到 WCF 服务,并查看服务发送回的响应。 将它与 WCF 服务主机相结合时,它提供了方便的服务测试体验。 在 %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE 文件夹中查找该工具。

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

若要了解有关 WCF 测试客户端的详细信息,请参阅 WCF 测试客户端(WcfTestClient.exe)。

在 Visual Studio 中访问 WCF 服务

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

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

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

选择服务终结点

某些 Windows Communication Foundation (WCF) 服务公开多个终结点,客户端可以通过这些终结点与服务通信。 例如,服务可能会公开一个终结点,该终结点使用 HTTP 绑定和用户名和密码安全性,另一个终结点使用 FTP 和 Windows 身份验证。 第一个终结点可由从防火墙外部访问服务的应用程序使用,而第二个终结点可能在 Intranet 上使用。

在这种情况下,可以将服务引用的构造函数指定 endpointConfigurationName 为参数。

注释

本文中的说明说明了 Visual Studio 中提供的交互式开发体验(IDE)的最新版本。 您的计算机可能会显示某些用户界面元素的不同名称或位置。 你可能使用的是不同版本的 Visual Studio 或不同的环境设置。 有关详细信息,请参阅个性化设置 IDE

选择服务终结点

  1. 通过在 解决方案资源管理器 中右键单击项目节点并选择 “添加服务引用”来添加对 WCF 服务的引用。

  2. 在代码编辑器中,为服务引用添加构造函数:

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

    注释

    ServiceReference 替换为服务引用的命名空间,并将 Service1Client 替换为服务的名称。

  3. 将显示一个 IntelliSense 列表,其中包含构造函数的重载。 选择 endpointConfigurationName As String 重载。

  4. 在重载后键入 =ConfigurationName,其中 ConfigurationName 是要使用的终结点的名称。

    注释

    如果不知道可用终结点的名称,可以在 app.config 文件中找到它们。

查找 WCF 服务的可用终结点

  1. 解决方案资源管理器中,右键单击包含服务引用的项目 app.config 文件,然后选择“ 打开”。 该文件显示在代码编辑器中。

  2. 搜索文件中的 <Client> 标记。

  3. <Client> 标记下方搜索以开头 <Endpoint>的标记。

    如果服务引用提供多个终结点,将有两个或多个 <Endpoint 标记。

  4. 在标记中 <EndPoint> ,你将找到一个 name="SomeService" 参数(其中 SomeService 表示终结点名称)。 这是终结点的名称,可将其传递给服务引用的构造函数的 endpointConfigurationName As String 重载。

异步调用服务方法

Windows Communication Foundation (WCF) 服务中的大多数方法都可以同步或异步调用。 异步调用方法可使应用程序在通过慢速连接作时调用该方法时继续工作。

默认情况下,将服务引用添加到项目时,它将配置为同步调用方法。 可以通过在“配置服务引用”对话框中更改设置,使方法调用行为变为异步。

注释

此选项按服务设置。 如果服务中的一个方法是异步调用的,则必须异步调用所有的方法。

注释

本文中的说明说明了 Visual Studio 中提供的交互式开发体验(IDE)的最新版本。 您的计算机可能会显示某些用户界面元素的不同名称或位置。 你可能使用的是不同版本的 Visual Studio 或不同的环境设置。 有关详细信息,请参阅个性化设置 IDE

异步调用服务方法

  1. 解决方案资源管理器中,选择服务引用。

  2. “项目 ”菜单上,单击“ 配置服务引用”。

  3. 在“ 配置服务引用 ”对话框中,选中“ 生成异步作 ”复选框。

将服务返回的数据进行绑定

可以将 Windows Communication Foundation (WCF) 服务返回的数据绑定到控件,就像可以将任何其他数据源绑定到控件一样。 添加对 WCF 服务的引用时,如果服务包含返回数据的复合类型,它们将自动添加到 “数据源” 窗口。

将控件绑定到 WCF 服务返回的单个数据字段

  1. “数据 ”菜单上,单击“ 显示数据源”。

    此时会显示 “数据源 ”窗口。

  2. 在“数据源”窗口中,展开服务引用的节点。 这会显示服务返回的所有复合类型。

  3. 展开某个类型的节点。 这会显示该类型的数据字段。

  4. 选择一个字段,然后单击下拉列表箭头以显示可用于数据类型的控件列表。

  5. 单击要绑定到的控件的类型。

  6. 将字段拖到窗体上。 该控件与BindingSource组件和BindingNavigator组件一起添加到窗体中。

  7. 对要绑定的任何其他字段重复执行步骤 4 到 6。

将一个控件绑定到由 WCF 服务返回的复合类型

  1. “数据 ”菜单上,选择“ 显示数据源”。 此时会显示 “数据源 ”窗口。

  2. 在“数据源”窗口中,展开服务引用的节点。 这会显示服务返回的所有复合类型。

  3. 选择一个类型的节点,然后单击下拉列表箭头以显示可用选项的列表。

  4. 单击 DataGridView 以显示网格中的数据,或 “详细信息” 以在单个控件中显示数据。

  5. 将节点拖到窗体上。 控件与BindingSource组件和BindingNavigator组件一起被添加到窗体中。

配置服务以重用现有类型

将服务引用添加到项目时,会在本地项目中生成服务中定义的任何类型。 在许多情况下,当服务使用常见 .NET 类型或共享库中定义类型时,这会创建重复类型。

为了避免此问题,引用程序集中的类型默认是共享的。 如果要禁用一个或多个程序集的类型共享,可以在 “配置服务引用 ”对话框中执行此作。

在单个程序集中禁用类型共享

  1. 解决方案资源管理器中,选择服务引用。

  2. “项目 ”菜单上,单击“ 配置服务引用”。

  3. 在“配置服务引用”对话框中,选择重用指定引用程序集中的类型

  4. 选中要在其中启用类型共享的每个程序集的复选框。 若要禁用程序集的类型共享,请清除该复选框。

禁用所有程序集中的类型共享

  1. 解决方案资源管理器中,选择服务引用。

  2. “项目 ”菜单上,单击“ 配置服务引用”。

  3. 在“ 配置服务引用 ”对话框中,清除 引用程序集中的“重用类型 ”复选框。

标题 DESCRIPTION
演练:在 Windows 窗体中创建简单的 WCF 服务 提供在 Visual Studio 中创建和使用 WCF 服务的分步演示。
演练:使用 WPF 和实体框架创建 WCF 数据服务 提供有关如何在 Visual Studio 中创建和使用 WCF 数据服务的分步演示。
使用 WCF 开发工具 讨论如何在 Visual Studio 中创建和测试 WCF 服务。
如何:添加、更新或删除 WCF 数据服务引用
疑难解答服务参考 介绍服务引用中可能出现的一些常见错误以及如何防止这些错误。
调试 WCF 服务 介绍调试 WCF 服务时可能会遇到的常见调试问题和技术。
演练:创建 n 层数据应用程序 提供创建类型化数据集并将 TableAdapter 和数据集代码分隔为多个项目的分步说明。
“配置服务引用”对话框 描述 “配置服务引用 ”对话框的用户界面元素。

参考文献

另请参阅