1

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

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

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

  • Q.1 我可以使用 netMsmq 来处理这种情况吗?
  • Q.2 如果不是,那么我可以采用的另一种方法来解决这个问题吗?
  • Q.3 如果服务器宕机发现客户端调用无法联系到服务,我可以使用 WS-Discovery 吗?

编辑:场景是客户端-服务器。但我确实需要在每次致电客户时做出回应。客户端也仅由我开发和维护,因此我可以很好地实施最合适的解决方案。

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

4

2 回答 2

1

是的,您可以netMsmqBinding用于此目的。我们正在为运行在经常出现故障的卫星链路上的服务这样做。

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

于 2012-09-08T14:34:47.183 回答
1

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

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

广告问题 3:是的,您可以为此使用 Discovery。该服务必须在上线或下线时向客户宣布。最简单的示例是使用UdpAnnouncementEndpoint。在客户端中,您可以使用AnnouncementService类来监听在线离线服务,并保留可用服务的本地列表。或者(例如,当 UDP 广播不可行时)您可以在众所周知的位置创建一个发现代理服务来监听通知,客户端可以访问该服务以即时了解他们需要的服务是否在线

于 2012-09-08T14:35:45.307 回答