2013-05-30 185 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