簡體   English   中英

並發頁面處理/服務

[英]Concurrent page processing/serving

我創建了一個Web應用程序,該應用程序具有一個用於構建聯系人列表的子項。 該子項根據用戶提供的ID從聯系人數據庫中獲取電話號碼和電子郵件地址。 該應用程序以最快的速度每秒處理大約四個ID。 在任何給定時間使用200-300個ID,完成時間很長。

時間並不是真正的問題,它是最終用戶狀態的更新。 我創建了一個非常粗糙的Web服務,它在應用程序遍歷ID時讀取存儲在會話變量中的“ CurrentRecordNumber”。 我打算使用javascript定期從應用程序調用網絡方法以更新狀態。

我的問題是,在調試時,webmethod調用將成功完成,但要等到應用程序完成處理后才能完成。

這似乎是一個非常簡單的問題。 我不能使用正確的術語,因為我的結果似乎過於復雜。

我對ASP.NET的異步功能非常陌生,因此請原諒。 但是,我已經寫了一些包含多個線程的Winforms,因此我對線程有基本的了解。

這是由於ASP.NET處理會話的方式。 您沒有說是使用Web窗體還是MVC,但是MVC對此有一個快速的解決方法。

首先是問題:SessionState被設計為可以按服務器接收的順序一次被一個請求訪問。 可以將其視為只有一個銀行出納員的銀行排隊。 排在第一位的人是第一個被幫助的人(盡管這是基於每個會話,而不是每個用戶)。

ASP.NET鎖定所有其他需要SessionState的請求,直到上一個請求完成為止。

我沒有嘗試在Web表單中糾正此問題,但是我知道的最簡單的方法是在進度檢查中不需要SessionState。

在MVC中,有一個SessionState屬性可以應用於控制器或方法,指示沒有機會調用該方法來覆蓋SessionState。 只要您的調用是只讀的,就可以使控制器代碼使用此屬性來同時允許多個異步請求:

<SessionState(SessionStateBehavior.ReadOnly)>
Public Class MyController

暫無
暫無

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

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