WCF排队调用由NetMsmqBinding支持
创始人
2024-06-23 16:10:29
0

在WCF中,有一种叫做WCF排队调用的操作技术,可以帮助我们在程序开发中实现一些特定分功能。那么在这里,我们就会对此做一个详细的介绍,以方便大家在实际应用中能够获得一些帮助。#t#

Windows Communication Foundation 使用 NetMsmqBinding 来支持WCF排队调用。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 消息,然后将这些消息发布到端点地址所指定的队列中。

在服务端,当具有排队端点的服务主机启动后,主机会安装队列侦听程序。队列侦听程序会检测到队列中的消息并使其出队,然后创建主机端以调度程序为终点的侦听器链。调度程序会照例调用服务实例。如果客户端向队列发布了多个消息,侦听程序会随着消息的出队创建新的实例,最终以异步、非连接的并发调用结束。

如果主机处于离线状态,消息将在队列中保持待处理状态。待下次主机上线时,消息会被转发给服务。

面向队列进行的、可能处于非连接状态的调用不可能返回任何值,因为在将消息调度到队列时并未调用任何服务逻辑。此外,调用可能会在客户端应用程序停止运行后被调度给服务进行处理,而这时客户端根本无法处理返回的值。同样,调用也无法将任何服务端异常返回给客户端,而且也没有客户端用来捕获和处理异常。由于客户端不会因为调用操作而被封锁,更确切地说,客户端只有在将消息送去排队的片刻才才被封锁,因而从客户端的角度来看,WCF排队调用在本质上属于异步调用。这些是单向调用的典型特征。因此,由使用 NetMsmqBinding 的端点所提供的任何合约都只能具有单向操作。Windows Communication Foundation 会在加载服务和代理时对此进行验证:

 

  1. //只能对排队合约执行单向调用  
  2. [ServiceContract]  
  3. interface IMyContract  
  4. {  
  5. [OperationContract(IsOneWay = true)]  
  6. void MyMethod();  

由于与 MSMQ 的交互封装在绑定中,因而在服务调用代码或客户端调用代码中没有任何与调用排队相关的内容。服务代码和客户端代码看起来与任何其他 Windows Communication Foundation 客户端代码和服务代码都是一样的,如图 2 所示。

针对排队服务定义端点时,端点地址中必须包含队列名称和队列类型(公有或私有):

 

  1. < endpoint 
  2. address = "net.msmq://localhost/private/  
  3. MyServiceQueue"  
  4. binding = "netMsmqBinding" 
  5. ...  
  6. /> 

***,MSMQ 是 Windows Communication Foundation 的事务性资源管理器。如果队列是事务性的,则当客户端的事务中止时,客户端所发布的消息将会回滚。在服务端,从队列中读取消息时会启动新的事务。如果服务参与并中止该事务(可能因异常而导致),消息会回滚到队列中等待下一次重试。Windows Communication Foundation 提供了完善的故障检测和病毒消息处理支持功能。

以上就是我们为大家介绍的WCF排队调用的相关内容。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...