簡體   English   中英

ASP.NET MVC和Ajax,並發請求?

[英]ASP.NET MVC and Ajax, concurrent requests?

AJAX新手在這里!
在我的ASP.NET MVC Web應用程序中,我的AJAX請求似乎正在進行批處理或排隊,我不確定。
在上一個請求完成之前,似乎沒有任何請求完成。
我如何獲得獨立返回的請求?
我不一定希望有人給我答案,但可能有一些鏈接指向可能有用的好教程或資源。 謝謝

我正在擴展Lachlan Roche的答案,這是正確的。

ASP.NET框架將“單線程”處理Session范圍 (全局資源)的請求,以防止一個請求干擾另一個請求。 在WebForms中,我認為您可以使用Page指令指定各個頁面不使用Session,因此不需要像這樣同步處理。

問題是在ASP.NET MVC中所有請求都使用Session ,因為它用於實現TempData。 您可以完全禁用會話狀態,正如Lachlan Roche指出的那樣,或者您可以根據具體情況處理此問題。

一個可能的解決方案可能是啟動您自己的后台線程來處理任何長時間運行的代碼,以便初始請求盡快“完成”。

ASP.NET將按會話順序處理請求,除非會話通過pages元素上的enableSessionState屬性配置為禁用或僅在web.config中讀取。

由於這是一個頁面設置,這不會影響MVC控制器,它們仍然會受到串行請求處理。

奇怪的是,即使禁用會話或設置為只讀,我們仍然可以讀取和寫入會話數據。 它似乎只影響導致串行請求處理的會話鎖定。

<system.web>
    <pages enableSessionState="ReadOnly"/>
</system.web>

Pages也可以具有enableSessionState屬性,但這與MVC視圖無關。

<%@ Page EnableSessionState="True" %>

隨着ASP.MVC 3的發布,您現在可以向控制器添加一個屬性,將Session標記為只讀,這允許從同一客戶端同時調用操作。

無會話控制器支持:

Sessionless Controller是ASP.NET MVC 3中另一個很棒的新功能。使用Sessionless Controller,您可以輕松控制控制器的會話行為。 例如,您可以將HomeController的Session設置為Disabled或ReadOnly,從而允許單個用戶執行並發請求。 有關詳細信息,請參閱ASP.NET MVC中的並發請求MVC3中的HowTo:無會話控制器 - 什么&為什么?

- 來自這篇DZone文章

通過將SessionState(SessionStateBehaviour.Disabled)添加到控制器,運行時將允許您從同一瀏覽器會話同時調用多個操作。

不幸的是,我不認為有一種方法可以標記一個動作,以便只在調用該動作時禁用會話,所以如果你的控制器有一些需要會話的動作而其他動作不需要,你需要將那些沒有的那些移動到一個單獨的控制器中。

在ASP MVC的更高版本中,您可以使用SessionStateAttribute修飾單個控制器類

[System.Web.Mvc.SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : Controller 
{
}

自.NET Framework v3.0發布以來,您可以在SessionStateAttribute中使用“SessionStateBehavior”枚舉:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : BaseController { }

好的並發請求更多依賴於瀏覽器,如果你開始假設10個並發請求到一個動作在Mozilla中使用AJax並且使用IE 8那么你會發現Mozilla有樣式來觸發一個請求等待它的響應然后再觸發第二個等等on ...對於這是一個接一個的基礎,而在IE *這一次大約6個並發請求一次到服務器。

因此,並發請求也取決於瀏覽器類型。

我建議使用jQuery來滿足你對asp.net mvc的ajax需求,我已經專門使用它,它非常容易。

至於教程,我會看一下: http//docs.jquery.com/Ajax

有很多選項可以使用,我還建議下載firebug,這樣你就可以異步地觀察從你的頁面發出的請求,看看它們是否開火以及它們返回的內容等。

和其他人一樣,AJAX請求是異步的,不會排隊等待它們在完成時都會獨立返回,所以如果你在firebug中觀看,很容易看到幕后發生了什么,在調試器獲得之前擊中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM