如何:创建双工协定
本主题演示了创建使用双工(双向)协定的方法所需的基本步骤。双工协定使得客户端和服务器可以独立地相互通信,这样双方都可以启动对另一方的呼叫。双工协定是可供 Windows Communication Foundation (WCF) 服务使用的三种消息模式之一。另外两种消息模式是单向模式和请求-答复模式。双工协定由客户端和服务器之间的两个单向协定组成,并且不需要方法调用是相关的。当服务必须向客户端查询更多信息或在客户端上显式引发事件时,可使用这种协定。有关 创建用于双工协定的客户端应用程序的更多信息,请参见如何:使用双工协定访问服务。有关可运行的示例,请参见Service Contract: Duplex示例。
创建双工协定
创建组成双工协定的服务器方的接口。
将 ServiceContractAttribute 类应用到该接口。
在接口中声明方法签名。
将 OperationContractAttribute 类应用于每个方法签名,该方法签名必须是公共协定的一部分。
创建回调接口以定义服务可以在客户端上调用的操作组。
在回调接口中声明方法签名。
将 OperationContractAttribute 类应用于每个方法签名,该方法签名必须是公共协定的一部分。
通过将主接口中的 CallbackContract 属性设置为回调接口的类型,将两个接口链接到一个双工协定中。
在客户端上调用方法
在主协定的服务实现中,声明回调接口的变量。
将变量设置为通过 OperationContext 类的 GetCallbackChannel 方法返回的对象引用。
调用由回调接口定义的方法。
示例
下面的代码示例演示双工通信。服务的协定包含用于向前移动和向后移动的服务操作。客户端的协定包含用于报告其位置的服务操作。
- 应用 ServiceContractAttribute 和 OperationContractAttribute 属性允许自动生成使用 Web 服务描述语言 (WSDL) 的服务协定定义。
- 使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 检索 WSDL 文档和(可选)代码以及客户端的配置。
- 公开双工服务的终结点必须是安全的。当服务接收双工消息时,它会查看传入消息中的 ReplyTo,以确定要发送答复的位置。如果通道不安全,则不受信任的客户端可能使用目标计算机的 ReplyTo 发送恶意消息,从而导致目标计算机发生拒绝服务。对于常规的规则请求-答复消息,这不是问题,因为将会忽略 ReplyTo 并在传入原始消息的通道上发送响应。
另请参见
任务
如何:使用双工协定访问服务
如何:定义 Windows Communication Foundation 服务协定
参考
ServiceContractAttribute
OperationContractAttribute