【发布时间】:2013-05-26 17:06:44
【问题描述】:
我有一个执行某些操作的 Web 服务。当事件发生时,我想通知客户。我遇到的问题是我能够从客户端连接到服务器,但不能反过来,因为客户端恰好位于 NAT(路由器)后面。目前,我每分钟都会请求检查通知。如果我有一种技术可以更快地通知客户,而不必提出这么多不必要的请求,那就太好了。
注意: 客户端是一个 c# 控制台应用程序,服务器是一个 asp.net 网站。
(请注意,如果服务器上发生事件,我会通知所有客户端)
【问题讨论】:
-
ASMX 是一项遗留技术,不应用于新开发。 WCF 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:Microsoft 已停用 MSDN 上的 ASMX Forum。最后,ASMX 没有能力通知。
-
阅读“长轮询”。本质上:您有一个轮询请求正在运行,它在服务器上等待直到超时(例如 30 秒)或事件。然后立即开始另一个投票。
-
看看这个:Comet
-
我建议看看微软自己的库。 SignalR 它抽象出服务器和客户端之间的实时数据通道,并使用 4 种可能的技术中最有效的传输协议(包括但不限于“长轮询”)