窗口通信基础介绍






3.38/5 (11投票s)
介绍创建新 WCF 服务的基本信息和步骤
关于本文
我写这篇文章是为了解释 WCF 应用程序的基础知识。这里我解释了 VS 2010 IDE 提供的基本模板。
什么是 WCF?
Windows Communication Foundation (WCF) 是一个用于构建面向服务应用程序 (SOA) 的框架。顾名思义,WCF 为 .NET Framework 提供了编写代码以在组件、应用程序和系统之间进行通信的基础。它以前命名为“Indigo”。
为什么选择 WCF?
WCF 的设计遵循面向服务的原则。服务是您通过消息进行交互的代码片段。服务是被动的。它们在执行任何工作之前等待传入的消息。客户端是发起者。客户端发送消息给服务以请求工作。使用 WCF,我们可以使用下面的 .NET Framework 技术将数据作为异步消息从一个应用程序发送到其他应用程序。

如何创建 WCF?
我们将使用 Visual Studio IDE 学习如何创建基本的 WCF 应用程序。在深入应用程序之前,先了解应用程序中使用的一些基本术语。
术语 | 定义 |
address |
指定接收消息的位置。它被指定为一个统一资源标识符 (URI)。URI 的模式部分命名了用于到达地址的传输机制,例如 HTTP 和 TCP。URI 的分层部分包含一个唯一的位置,其格式取决于传输机制。 |
应用程序终结点 |
应用程序公开的终结点,它对应于应用程序实现的某个服务协定。 |
行为 |
行为是控制服务、终结点、特定操作或客户端的各种运行时方面的组件。行为根据范围进行分组:通用行为全局影响所有终结点,服务行为仅影响与服务相关的方面,终结点行为仅影响与终结点相关的属性,操作级别的行为影响特定的操作。 |
绑定 |
定义了用于与 WCF 服务通信的通信协议。它由一组称为绑定元素的组件构成,这些组件堆叠在一起以创建通信基础结构。请参阅终结点。 |
协定 |
协定是支持特定类型协定的规范。例如,服务协定是操作组的规范。在 WCF 中,协定具有一个层次结构,该层次结构反映在 `System.ServiceModel.Description` 命名空间中的描述对象中。服务协定是 WCF 中最大的协定范围。服务协定中的每个服务操作都有一个操作协定,该协定指定操作可以交换的消息——包括错误消息——以及交换的方向。操作中的每个消息都有一个消息协定,即 SOAP 消息封装结构的规范,每个消息协定都有一个数据协定,该数据协定指定消息中包含的数据结构。 |
数据协定 |
服务使用的数据类型必须在元数据中描述,以便其他人能够与服务进行互操作。数据类型的描述称为数据协定,并且这些类型可以在消息的任何部分中使用,例如作为参数或返回值。如果服务仅使用简单类型,则无需显式使用数据协定。 |
endpoint |
由地址、绑定和用于与 WCF 服务通信的协定组成。 |
终结点地址 |
使您能够为服务中的每个终结点创建唯一的终结点地址,或者在某些条件下跨终结点共享一个地址。 |
操作协定 |
操作协定定义了操作的参数和返回类型。在创建定义服务协定的接口时,可以通过将 `T:System.ServiceModel.OperationContractAttribute` 特性应用于构成协定的每个方法定义来指示操作协定。操作可以建模为接收单个消息并返回单个消息,或者接收一组类型并返回一个类型。在后一种情况下,系统会确定为该操作交换的消息的格式。 |
服务协定 |
服务协定将多个相关操作捆绑到一个功能单元中。协定可以定义服务级别的设置,例如服务的命名空间、相应的回调协定以及其他此类设置。在大多数情况下,协定是通过在您选择的编程语言中创建接口并将 `T:System.ServiceModel.ServiceContractAttribute` 特性应用于该接口来定义的。实际的服务代码是通过实现该接口而产生的。 |
步骤 1
使用 VS IDE 创建新的 WCF 项目。
语言 | Visual C# 或 Visual Basic |
目标框架 | .NET Framework 4 |
已安装模板 | WCF |
模板 | WCF 服务库 |
名称 | WCFPersonService |

第二步
删除现有的.cs 文件(IService.cs & Service.cs),然后创建两个新文件 `IPersonService` & `PersonService`。

IPersonService.cs 具有以下方法声明
Person CreatePerson(Person createPerson); //Method will create a new person
List <Person> GetAllPerson(); //Method will display all the persons in the list
Person GetAPerson(string id); //Method will display a person
Person UpdatePerson(string id, Person updatePerson); //Method will update a person
void DeletePerson(string id); //Method will delete a person
这些代码与普通 Web 服务类似,在 WCF 应用程序中,`IPersonService` 接口类和方法分别用 `[ServiceContract]` 和 `[OperationContract]` 装饰,并使用System.ServiceModel 命名空间。
`[ServiceContract]` - 服务协定指定了终结点与外部世界通信的内容,即只有用 `[ServiceContract]` 装饰的类对 WCF 客户端应用程序可见。
`[OperationContract]` - 指示一个方法定义了应用程序中服务协定的一个操作,即只有用 `[OperationContract]` 装饰的方法对 WCF 客户端应用程序可见,并且此方法的类必须用 `[ServiceContract]` 装饰。
IDE 创建的示例模板代码是
[ServiceContract]
public interface IPersonService
{
[OperationContract]
Person CreatePerson(Person createPerson);
[OperationContract]
List<Person> GetAllPerson();
[OperationContract]
Person GetAPerson(string id);
[OperationContract]
Person UpdatePerson(string id, Person updatePerson);
[OperationContract]
void DeletePerson(string id);
}
我们可以像编写 Web 服务一样编写类及其方法,但我们必须使用 `[ServiceContract]` & `[OperationContract]` 来装饰类和方法。
如何测试 WCF?
步骤 1
您可以运行应用程序,它将运行“WCF 服务主机”并运行 WCF 测试客户端应用程序。
或者,您可以使用 IDE 创建的模板来运行和测试应用程序。要测试 WCF 应用程序,您需要运行位于C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE 的WCFTestClient.exe,并提供应用程序 URL(例如 https:///demo/mex)。
WCFTestClient.exe https:///demo/mex

第二步
测试方法 `CreatePerson()`
- 在 WCT 测试客户端窗口中双击 `“CreatePerson()”` 方法。
- 在“请求”部分输入值。
- 单击“调用”按钮。
- 答案将显示在“响应”部分。

类似地,您可以调用 `GetAllPersion()`, `GetAPerson()`, `UpdatePerson()` & `DeletePerson()` 方法。
WCF 中的终结点是什么?
用于定位和识别 WCF 服务的 WCF 服务的地址称为终结点。
客户端应用程序(如 Remoting、WSE、ASMX、MSMQ 和 Enterprise Services)可以使用这些终结点与 WCF 服务进行通信。
终结点地址 - 与 Windows Communication Foundation (WCF) 服务的所有通信都通过其终结点进行。每个“ServiceEndpoint“包含一个Address
、一个Binding
和一个Contract
。通常称为 ABC。
地址
– 指定服务的位置绑定
– 指定如何与服务通信协定
– 指定可用的操作
创建服务终结点
步骤 1
在应用程序的解决方案资源管理器中,右键单击App.config 文件,然后在弹出菜单中单击“编辑 WCF 配置”项。

这将弹出 WCF 配置窗口。

配置文件中有三个终结点,保存并关闭后,这些更改将反映在app.config 文件中。

App.Cofig 文件有三个终结点
- Mex
- 地址=”mex”
- 绑定=”mexHttpBinding”
- 协定=”IMetadataExchange”
- Basic
- 地址=”basic”
- 绑定=”basicHttpBinding”
- 协定=”WCFPersonService.IPersonService”
- WS
- 地址=”ws”
- 绑定=”wsHttpBinding”
- 协定=”WCFPersonService.IPersonService”
在这些终结点中,Mex 终结点是强制性的;所有 WCF 应用程序都必须有它。Mex 向客户端应用程序公开元数据。
客户端可以使用其他两个终结点(Basic、WS)中的任何一个进行通信。
如何使用 WCF 服务?
在控制台应用程序中使用“添加引用…”菜单添加 WCF 服务引用,请参阅下面的代码以使用 WCF 服务。
ServiceReference1.Service1Client sc= new ServiceReference1.Service1Client("basic");
Person varPerson = sc.CreatePerson(objPerson); // This line creates a person using
// WCF application & returns that person to the client application
有关详细代码,请参阅附加的项目。
结论
希望本文能帮助您理解 WCF 应用程序的基础知识。请随时评论。
参考文献
- http://msdn.microsoft.com/en-us/library/dd560536.aspx
- http://msdn.microsoft.com/en-us/magazine/cc163647.aspx
- http://msdn.microsoft.com/en-us/library/ee958158.aspx
历史
- 2011年9月2日:初始版本