2013-05-30 186 views
2

我有一个Web服务来执行一些操作。发生事件时,我想通知客户。我有的问题是,我能够从客户端连接到服务器,而不是其他方式,因为客户端恰好在NAT(路由器)后面。目前,我正在每分钟发出一次请求以检查通知。如果我可以有一种技术,我可以更快地通知客户,而无需提出太多不必要的请求,那将是一件好事。从ASP.Net服务器推送通知

注意: 客户端是一个c#控制台应用程序,服务器是一个asp.net网站。

(注意,如果一个事件我会想通知所有客户端的服务器上发生的)

+2

ASMX是一种过时的技术,并且不应该被用于新的开发。 WCF应该用于Web服务客户端和服务器的所有新开发。一个暗示:微软已经在MSDN上退役了[ASMX Forum](http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)。最后,ASMX无法通知。 –

+0

阅读“长期投票”。实质上:您有一个轮询请求正在运行,它会在服务器上等待,直到超时(例如30秒)或事件发生。然后立即开始另一轮民意调查。 –

+0

看看这个:[Comet](http://en.wikipedia.org/wiki/Comet_(编程)) –

回答

4

使用SignalR。这是微软用于抽象出实时服务器 - 客户端连接的新库,如果您的设置允许,它支持新的WebSockets协议。

Taken from asp.net website. The Client Code

var hubConnection = new HubConnection("http://www.contoso.com/"); 
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub"); 
stockTickerHubProxy.On<Stock>("UpdateStockPrice", 
    stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price)); 
await hubConnection.Start(); 
+0

SignalR很棒,但您需要考虑与不支持WebSockets的旧浏览器的向后兼容性。 – 2013-05-31 02:34:11

+2

@GregDzezinski微软的好人已经做到了。 [我会让另一个SOer解释...](http://stackoverflow.com/a/7874352/1808494) – Aron

+0

@GregDzezinski也OP表示,客户端是C#,因此不是浏览器。 – Aron