这看起来可能是一个问题,您可以在MSDN上阅读答案,但我仍然想问关于这个场景的问题,因为我想解决业务问题。
我有一个托管在服务器上的服务,一个客户端进行服务调用。它目前使用netTCP绑定。当服务可用时,当服务器启动并运行时,一切都正常。现在,我需要处理服务器停机的场景。我使用客户机上的本地缓存文件在服务器停机的情况下为客户端请求提供服务。现在,我希望缓存服务器停机时发出的所有请求,并希望在服务器启动和运行后进行服务调用。
我正在考虑使用netMsmqBinding,因为我所读到的都表明它在断开连接的场景中运行良好。
编辑:场景是客户机-服务器。但每次打电话给客户我都得给你回复。客户端也是由我开发和维护的,所以我能够很好地实现最合适的解决方案。
请指导我,因为我不太擅长WCF。
发布于 2012-09-08 14:34:47
是的,您可以为此目的使用netMsmqBinding。我们这样做是为了运行在卫星链路上的服务,这些服务可能经常中断。
您需要考虑的一个重要限制是,所有调用都必须是一种方式,即基于队列的传输。如果需要获得请求的结果,则必须提供单独的响应机制(它可以是相反方向的类似队列)
发布于 2012-09-08 14:35:45
广告问题1:在服务可能并不总是启动和运行的情况下,使用MSMQ是非常好的。请注意,承载消息队列的服务器必须处于可访问状态,才能接收消息。但是,您还没有告诉我们关于您的场景的任何其他信息,特别是为什么您目前拥有NetTCP。之所以重要,是因为有一些事情您不能用MSMQ来做,例如,双工通信无法开箱即用。
广告问题2:另一种方法可能是在客户端实现逻辑(如果您是客户端软件的所有者,从这个问题上看并不清楚),如果某个服务(暂时)脱机,则有一个本地队列并在稍后重试消息。我猜您甚至可能在客户端上有一个代理MSMQ服务,在主服务结束后将消息中继到主服务。
广告问题3:是的,你可以用发现号来做这件事。当服务在线或离线时,该服务必须通知客户。最简单的例子是使用UdpAnnouncementEndpoint。在客户机中,您可以使用AnnouncementService类侦听在线或离线提供的服务,并保留可用服务的本地列表。或者(例如,当UDP广播不可行时),您可以在一个众所周知的位置创建一个发现代理服务,该位置侦听通知,客户端可以立即访问该通知,以了解他们需要的服务是否在线。
https://stackoverflow.com/questions/12330604
复制相似问题