构建排队 wcf 响应服务

构建排队 wcf 响应服务

ID:33989974

大小:117.00 KB

页数:14页

时间:2019-03-03

构建排队 wcf 响应服务_第1页
构建排队 wcf 响应服务_第2页
构建排队 wcf 响应服务_第3页
构建排队 wcf 响应服务_第4页
构建排队 wcf 响应服务_第5页
资源描述:

《构建排队 wcf 响应服务》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

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

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

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

4、一样,客户端会与代理进行交互,如图 1所示。由于已将代理配置为使用MSMQ绑定,因而该代理不会向任何特定服务发送WindowsCommunicationFoundation消息,而是将调用转换为MSMQ消息,然后将这些消息发布到端点地址所指定的队列中。图1 WCF排队调用体系结构(单击该图像获得较小视图)图1 WCF排队调用体系结构(单击该图像获得较大视图)在服务端,当具有排队端点的服务主机启动后,主机会安装队列侦听程序。队列侦听程序会检测到队列中的消息并使其出队,然后创建主机端以调度程序为终点的侦听器链。调度程序会照例调用服务实例。如果客户端向队列发布了多

5、个消息,侦听程序会随着消息的出队创建新的实例,最终以异步、非连接的并发调用结束。如果主机处于离线状态,消息将在队列中保持待处理状态。待下次主机上线时,消息会被转发给服务。面向队列进行的、可能处于非连接状态的调用不可能返回任何值,因为在将消息调度到队列时并未调用任何服务逻辑。此外,调用可能会在客户端应用程序停止运行后被调度给服务进行处理,而这时客户端根本无法处理返回的值。同样,调用也无法将任何服务端异常返回给客户端,而且也没有客户端用来捕获和处理异常。由于客户端不会因为调用操作而被封锁,更确切地说,客户端只有在将消息送去排队的片刻才才被封锁,因而从客户端的角度

6、来看,排队调用在本质上属于异步调用。这些是单向调用的典型特征。因此,由使用NetMsmqBinding的端点所提供的任何合约都只能具有单向操作。WindowsCommunicationFoundation会在加载服务和代理时对此进行验证://只能对排队合约执行单向调用[ServiceContract]interfaceIMyContract{[OperationContract(IsOneWay=true)]voidMyMethod();}由于与MSMQ的交互封装在绑定中,因而在服务调用代码或客户端调用代码中没有任何与调用排队相关的内容。服务代码和客户端代码

7、看起来与任何其他WindowsCommunicationFoundation客户端代码和服务代码都是一样的,如图 2所示。针对排队服务定义端点时,端点地址中必须包含队列名称和队列类型(公有或私有):最后,MSMQ是WindowsCommunicationFoundation的事务性资源管理器。如果队列是事务性的,则当客户端的事务中止时,客户端所发布的消息将会回滚。在服务端,从队列

8、中读取消息时会启动新的事务。如果服务参与并中止该事务

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。