WCF的基本编程 设计服务协定 如何:创建请求-答复协定
本主题演示了创建使用请求-答复协定的方法所需的基本步骤。这些方法调用 Windows Communication Foundation (WCF) 服务上的操作并期待答复。必须根据此协定的条款发送答复并与请求相关联。即使相关方法返回的是 void,基础结构也将创建并发送一条空消息,以向调用方指示该方法已返回内容。取消创建和调度答复消息的唯一方法是对操作使用单向协定。
有关 如何指定操作协定的更多信息,请参见 OperationContractAttribute 类,尤其是 IsOneWay 属性。
有关 创建用于双工协定的客户端应用程序的更多信息,请参见如何:使用单向和请求-答复协定访问 WCF 服务。
创建请求-答复协定
-
通过将 ServiceContractAttribute 类应用到定义服务将要实现的方法的接口,创建服务协定。
-
通过将 OperationContractAttribute 类应用到相应的方法,指示客户端可以调用接口中的哪些方法。
-
IsOneWay 属性的值指示操作是否返回答复消息。如果操作有一个请求-答复协定,则将此属性设置为 false。如果操作有一个单向协定,则将此属性设置为 true。默认情况下,所有使用 OperationContractAttribute 类的操作都满足请求-答复协定,原因是默认情况下 IsOneWay 属性为 false。因此,将 attribute 属性的值为 false 是可选的。
示例
下面的示例为提供 Add 和 Subtract 方法的计算器服务定义一个协定。通过使用此协定,客户端可调用 Add 和 Subtract 方法,并分别等待返回和与差。Multiply 方法不是协定的一部分,因为它没有通过 OperationContractAttribute 类进行标记,因此不可以由客户端访问。
using System.ServiceModel; [ServiceContract] public interface ICalculator { [OperationContract] // It would be equivalent to write explicitly: // [OperationContract(IsOneWay=false)] int Add(int a, int b); [OperationContract] int Subtract(int a, int b); int Multiply(int a, int b) } |
- 通过使用 ServiceContractAttribute 类标记服务协定接口并使用 OperationContractAttribute 类标记服务协定接口的方法,可以在部署服务之后,自动生成使用 Web 服务描述语言 (WSDL) 的服务协定定义、客户端协定和代码。
- 一旦将服务作为标准 WSDL 文档(用于指定操作以及各自的输入和输出)进行部署,就可以访问 WCF 服务协定的外部可见定义。通过将 ?wsdl 查询追加到服务的 HTTP 基址,并让浏览器指向生成的统一资源标识符 (URI),可显示 WSDL。