如何:使用 WCF 终结点交换排队消息
即使在通信时 Windows Communication Foundation (WCF) 服务不可用,队列也能确保客户端和该服务之间的可靠消息传输。下面的过程演示如何在实现 WCF 服务时使用标准排队绑定确保客户端和服务间的持久性通信。
本节介绍如何将 NetMsmqBinding 用于 WCF 客户端和 WCF 服务之间的排队通信。
在 WCF 服务中使用队列
使用用 ServiceContractAttribute 标记的接口定义服务协定。
用 OperationContractAttribute 来标记属于服务协定一部分的接口中的操作,并将它们指定为单向操作(因为不返回对该方法的任何响应)。下面的代码提供了示例服务协定及其操作定义。
当服务协定传递用户定义的类型时,您将需要为这些类型定义数据协定。下面的代码演示了示例数据协定。(请注意,定义该数据协定的类也定义了大量方法。这些方法不被视为数据协定的一部分。只有那些使用 DataMember 属性声明的成员才是数据协定的一部分。)
实现在类中接口中定义的服务协定的方法。
使用 System.Messaging 创建一个事务性队列。可以选择使用 Microsoft 消息队列 (MSMQ) Microsoft 管理控制台 (MMC) 来创建队列。如果这样,将确保创建事务性队列。
在指定服务地址并使用标准 NetMsmqBinding 绑定的配置中定义 ServiceEndpoint。有关 使用 WCF 配置的更多信息,请参见配置 Windows Communication Foundation 应用程序。
使用 ServiceHost 为 OrderProcessing 服务创建一个主机,该主机从队列读取消息并处理这些消息。
打开服务主机使服务处于可用状态。
关闭服务主机。
为排队服务创建客户端
使用 Svcutil.exe 工具创建 WCF 客户端。
在指定地址并使用标准 NetMsmqBinding 绑定的配置中定义 ServiceEndpoint。
创建一个要写入事务性队列的事务范围。
调用计算器操作。
关闭 WCF 客户端。