Welcome

首页 / 软件开发 / .NET编程技术 / 基础:构建排队WCF响应服务

基础:构建排队WCF响应服务2010-08-18 MSDN Juval Lowy原文地址:http://msdn.microsoft.com/zh- cn/magazine/cc163482.aspx

目录

排队调用

响应服务

设计响应服务合约

使用消息 头

ResponseContext 类

客户端编程

服务端编程

响 应服务编程

结束语

Windows Communication Foundation (WCF) 使 客户端与服务之间能够以非连接方式进行通信。客户端将消息发布给队列,服务 稍后再对这些消息进行处理。这种交互方式造就了一种不同于默认的请求/响应模 式的编程模型,从而有望更好地平衡负载、提高可用性、进行补偿工作,为用户 带来诸多好处。本专栏首先简要介绍 Windows® Communication Foundation 的排队调用功能,然后提出“如何从排队的调用获取结果”这样一个 有趣的问题,接着通过一些超酷的 Windows Communication Foundation 编程技 术以及我为此所编写的助手类来找到解决办法。

排队调用

Windows Communication Foundation 使用 NetMsmqBinding 来支持排队调用。Windows Communication Foundation 在传输消息时不是通过 TCP 或 HTTP,而是通过 Microsoft® 消息队列 (MSMQ)。客户端也不是将 Windows Communication Foundation 消息发送到某个在线服务,而是发送到 MSMQ 队列。所有客户端所面 向和交互的对象是队列,而非服务端点。因此,调用在本质上是异步的、是不连 接的。直到服务在将来某一时刻处理消息时,这些调用才得以执行。

请注 意,Windows Communication Foundation 消息并不直接映射到 MSMQ 消息。一个 MSMQ 消息可以包含一个或多个 Windows Communication Foundation 消息,具体 个数视合约会话模式而定。对于必需会话模式,多个 Windows Communication Foundation 调用可共存于一个 MSMQ 消息中;而对于允许或不允许会话模式(由 单调用和单例式服务使用),每个 Windows Communication Foundation 调用将 位于单独的 MSMQ 消息中。

如同各 Windows Communication Foundation 服务一样,客户端会与代理进行交互,如图 1 所示。由于已将代理配置为使用 MSMQ 绑定,因而该代理不会向任何特定服务发送 Windows Communication Foundation 消息,而是将调用转换为 MSMQ 消息,然后将这些消息发布到端点地 址所指定的队列中。

图 1WCF 排队调用体系结构