2011-03-02 152 views
13

我需要一個「實時」元素添加到我的Web應用程序。基本上,我需要檢測存儲在SQL Server表中的「更改」,並在發生更改時更新UI的各個部分。實時ASP.NET MVC Web應用程序

我目前通過輪詢這樣做。我每3秒向服務器發送一個ajax請求,要求做出任何新的更改 - 然後這些更改將被返回並處理。它可以工作,但我不喜歡它 - 這意味着對於每個瀏覽器我都會頻繁發出這些請求,並且服務器將一直忙於處理它們。總之,它不能很好地擴展。

是否有避免輪詢開銷任何聰明的選擇嗎?

編輯

在完整性的利益,我更新這個何況我們最終與去解決 - SignalR。它的操作系統來自微軟。它越來越受歡迎,我可以衷心推薦它,或者我們也看過的WebSync。

+0

http://stackoverflow.com/questions/4555462/reverse-ajax-with-iis-asp-net – 2011-03-02 13:18:04

回答

10

退房WebSync,彗星服務器專爲ASP.NET/IIS。

特別是,我會做的是使用SQL Dependency類,並且當您檢測到更改時,請使用RequestHandler.Publish("/channel", data);將信息發送給適當的偵聽客戶端。

應該工作得很好。

+2

應該工作得很好 - 說作者;-) – 2011-03-02 14:14:46

+1

公平,這是相當驚人的(WebSync) 。演示(尤其是地圖之一 - 你需要打開2個瀏覽器窗口)非常簡單,但很有教育意義 – 2011-03-02 14:34:50

+1

WebSync看起來非常酷,雖然理想情況下我想要一個免費的解決方案(或者說,客戶端會喜歡免費的解!)。 – 2011-03-02 15:05:01

1

看看this article

我在什麼地方讀(不記得在哪裏),使用此功能WCF使未消耗阻塞線程的方式宿主進程處理請求。

5

直接由的Jakub refernced鏈接(即)採取:

Reverse AJAX with IIS/ASP.NET

PokeIn on codeplex爲您提供了一個增強的JSON功能,使客戶端可用的服務器端對象。簡單地說,它是一個反向Ajax庫,可以很容易地從C#/ VB.NET調用JavaScript函數,並從JavaScript調用C#/ VB.NET函數。它具有許多功能,如事件排序,資源管理,異常處理,編組,Ajax上傳控制,單聲道兼容性,.NET Remoting集成和可擴展的服務器推送。 這個庫有一個免費的社區許可證選項,與其他許可選項相比,許可選項相當具有成本效益。

其實我已經用這個和社區版是相當特殊的。非常值得一看,因爲這種類型的技術將在未來幾個月/幾年開始主導景觀。 codeplex站點隨附asp.net mvc示例。

+0

您的鏈接已損壞... – 2011-03-02 13:46:30

+0

jakub -how奇怪,我實際上在不到10分鐘前訪問過那個鏈接 - 謝謝你的提升。已改爲直接codeplex項目鏈接 – 2011-03-02 13:50:06

+0

似乎從加拿大工作... – MikeJ 2011-03-02 14:05:18

5

無論如何:你總是被限制在HTTP(大部分)是單向街道的事實上。除非你在客戶端上實現了一些合理的代碼(比如監聽傳入的網絡請求),否則其他任何事情都會涉及到輪詢服務器的更新,不管別人會告訴你什麼。

我們有類似的要求:在我們的一個實時Web應用程序中有非常快的響應時間,爲每個Web服務器提供約400-500個客戶端。服務器需要幾乎在0.1秒內通知客戶端(電話號碼爲& VoIP)。我們實施了Async Handler。在每個輪詢請求中,我們將請求休眠5秒鐘,等待信號脈衝信號響應客戶端。如果5秒鐘結束,我們以「無事件」響應,客戶端將立即再次發送請求。這導致了非常快速的響應時間,並且我們從來沒有遇到任何問題,每臺機器最多可以有500個客戶端。不知道在輪詢請求可能會產生問題之前我們可以添加多少。

+0

這幾乎是我所做的。您最終會得到一個隊列,您可以根據需要輪詢並下拉事件。事實上,我確信堆棧溢出是如何工作的以及頁面頂部的「toast」是如何工作的。 – MikeJ 2011-03-02 14:04:26

+0

這聽起來像是一個非常好的常識方法來不確定的ping ..喜歡它+1 – 2011-03-02 14:36:36

1

根據您對應用程序的限制,您可以使用Silverlight執行此連接。您不需要爲Silverlight提供任何UI,但是您可以使用套接字具有接受服務器端數據推送的連接。

相關問題