如何使用netMsmqbinding - 与服务器连接的方案

时间:2012-09-08 12:08:17

标签: c# wcf

这可能看起来像你可以在MSDN上阅读答案的问题,但我仍然想问一下这个场景,因为我想解决业务问题。

我在服务器上托管服务,客户端进行服务调用。它目前使用netTCP绑定。当服务可用时,服务器启动并运行时,一切正常。现在,我需要处理服务器故障情况。在服务器故障情况下,我使用客户端上的本地缓存文件来提供客户端请求。现在,我希望缓存服务器关闭时发出的所有请求,并希望在服务器启动并运行后进行服务调用。

我正在考虑使用netMsmqBinding,因为我读过的所有内容都表明它在断开连接的场景中运行良好。

  • Q.1我可以使用netMsmq来处理这种情况吗?
  • Q.2如果没有,那么我可以采用哪种方法来解决这个问题?
  • Q.3如果服务器停机,我可以使用WS-Discovery查找客户端呼叫无法联系该服务吗?

编辑:该方案是客户端 - 服务器。但我确实需要对每次打电话给客户做出回应。客户也是由我开发和维护的,所以我能够很好地实施最合适的解决方案。

请指导我,因为我对WCF不太好。

2 个答案:

答案 0 :(得分:1)

是的,您可以将netMsmqBinding用于此目的。对于通过卫星链路运行的服务,我们正在这样做。

您需要考虑的一个重要限制是所有调用必须是一种方式,即基于队列的传输。如果您需要获取请求的结果,则必须提供单独的响应机制(它可以是相反方向的类似队列)

答案 1 :(得分:1)

广告问题1:使用MSMQ非常适合服务可能无法始终启动和运行的情况。请注意,承载消息队列的服务器必须已启动并且可以访问以接收消息。但是,您没有告诉我们有关您的方案的任何其他信息,特别是您目前拥有NetTCP的原因。重要的原因是因为有些事情你无法做MSMQ,例如双工通信无法开箱即用。

广告问题2:替代方案可能是在客户端中实现逻辑(从问题中不清楚,如果您是客户端软件的所有者)具有本地队列,如果服务是(暂时)则稍后重试消息离线。我猜你甚至可能在客户端上有一个代理MSMQ服务,一旦它上线就将消息转发给主服务。

广告问题3:是的,您可以使用Discovery来实现此目的。该服务必须在线上或离线时向客户公布。最简单的例子是使用UdpAnnouncementEndpoint。在客户端中,您可以使用AnnouncementService类来收听来自onlineoffline的服务,并保留可用服务的本地列表。或者(例如,当UDP广播不可行时),您可以在众所周知的位置创建一个discovery proxy服务,该服务可以监听公告,客户可以访问这些公告,以便即时了解他们所需的服务是否在线< / p>