2011-05-26 158 views
3

我正在開發一個簡單的陌生人聊天應用程序在MVC 2中使用長輪詢。它的工作正常在我的開發機器,如果我打開應用程序不同的瀏覽器..我的意思是如果我加載應用程序在IE和mozilla,它工作正常Ajax長輪詢不能正常工作

如果我在瀏覽器的兩個選項卡(例如:IE瀏覽器)的應用程序,長輪詢不會從兩個選項卡發射..我的意思是,有一個開始按鈕開始聊天消防長時間投票。我可以看到它在調試時調用動作..而我的問題是,當我點擊開始按鈕從選項卡一,它會發出一個ajax請求(長輪詢(這req等待在服務器上,直到另一個reqst來)),然後我點擊在第二個選項卡中啓動按鈕,直到從服務器返回第一個請求(超時後)纔會觸發ajax請求。

爲什麼會發生這種情況?我像瀏覽器讀取會阻止多個Ajax請求。這是一個原因嗎? ..它工作得很好,如果我使用不同的瀏覽器。問題只出現,如果我在同一瀏覽器中採取兩個標籤

+1

只是一個猜測,但你確信的響應不會與'Response.Cache.SetCacheability(HttpCacheability.NoCache)'緩存?我建議使用[fiddler](http://fiddler2.com)來調試是否正在創建請求。 – emfurry 2011-05-27 05:02:16

回答

5

我讀如瀏覽器將阻止多個ajax請求。

是的,如果您使用會話,ASP.NET將阻止來自同一會話的併發請求。從documentation報價:

訪問ASP.NET會話狀態是每個會話,這意味着 ,如果兩個不同的用戶做出 併發請求,訪問每個 單獨的會話被授予 同時 排斥。但是,如果兩個 併發請求是針對 同一會話(通過使用相同的 SessionID值)進行的,則第一個請求 將獲得對會話 信息的獨佔訪問權限。第二個請求 僅在第一個請求 完成後才執行。 (第二屆會議能因爲 第一請求超過鎖定 超時 還可以訪問,如果在信息獨佔鎖 被釋放。)如果@ Page指令中的EnableSessionState 值設置 到只讀,一請求 只讀會話信息不是 會導致對會話數據的獨佔鎖定。然而,對會話數據的只讀 請求可能仍然需要等待 對 的讀寫請求所設置的鎖定爲 清除。

另外請確保您禁用了緩存。例如,如果你使用jQuery使用cache: false選項時投票:

$.ajax({ 
    url: '/poll', 
    cache: false, 
    success: function(result) { 
     // ... 
    } 
});