原文地址: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 排队调用体系结构