构建排队 WCF 响应服务.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
构建排队 WCF 响应服务

构建排队 WCF 响应服务 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 消息,然后将这些消息发布到端点地址所指定的队列中。 图 1?WCF 排队调用体系结构 (单击该图像获得较小视图) 图 1?WCF 排队调用体系结构 (单击该图像获得较大视图) 在服务端,当具有排队端点的服务主机启动后,主机会安装队列侦听程序。队列侦听程序会检测到队列中的消息并使其出队,然后创建主机端以调度程序为终点的侦听器链。调度程序会照例调用服务实例。如果客户端向队列发布了多个消息,侦听程序会随着消息的出队创建新的实例,最终以异步、非连接的并发调用结束。 如果主机处于离线状态,消息将在队列中保持待处理状态。待下次主机上线时,消息会被转发给服务。 面向队列进行的、可能处于非连接状态的调用不可能返回任何值,因为在将消息调度到队列时并未调用任何服务逻辑。此外,调用可能会在客户端应用程序停止运行后被调度给服务进行处理,而这时客户端根本无法处理返回的值。同样,调用也无法将任何服务端异常返回给客户端,而且也没有客户端用来捕获和处理异常。由于客户端不会因为调用操作而被封锁,更确切地说,客户端只有在将消息送去排队的片刻才才被封锁,因而从客户端的角度来看,排队调用在本质上属于异步调用。这些是单向调用的典型特征。因此,由使用 NetMsmqBinding 的端点所提供的任何合约都只能具有单向操作。Windows Communication Foundation 会在加载服务和代理时对此进行验证: //只能对排队合约执行单向调用 [ServiceContract] interface IMyContract { [OperationContract(IsOneWay = true)] void MyMethod(); } 由于与 MSMQ 的交互封装在绑定中,因而在服务调用代码或客户端调用代码中没有任何与调用排队相关的内容。服务代码和客户端代码看起来与任何其他 Windows Communication Foundation 客户端代码和服务代码都是一样的,如图?2 所示。 针对排队服务定义端点时,端点地址中必须包含队列名称和队列类型(公有或私有): endpoint address = net.msmq://localhost/private/ MyServiceQueue

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档