2017-06-18 152 views
0

我有兩個網頁。在一個頁面中,我正在上傳一些文件並處理需要花費很多時間才能完成的數據。而在其他頁面上,我只是在數據庫上渲染數據。 我已經在c#mvc中實現了這個應用程序。 我的要求是,一旦用戶上傳文件,文件處理在後臺開始,用戶將能夠導航其他頁面。異步控制器

我們可以通過異步控制器來實現嗎?

回答

0

你在說處理數據需要很長時間。使用異步控制器,您將釋放Web服務器以處理其他請求,但請求將在與同步調用時同時完成。 (來源:https://msdn.microsoft.com/en-us/library/ee728598%28v=vs.100%29.aspx

如果您不希望用戶等待,請向您的堆棧中添加作業隊列,告訴用戶您已接受該文件並正在處理該文件,並在操作完成時通知他。

.NET中有很多可用的作業隊列實現,具體的建議將取決於您是在「完整的」.NET還是在.NET Core上運行。

+0

用戶能夠導航其他頁面,同時請求正在通過異步控制器實現進行處理嗎?我對此有疑問。根據我的理解,如果用戶將導航到其他頁面,那麼它會碰到另一個控制器的另一個操作方法,因此處理將從異步控制器中停止。 –

+1

正確。你想做的事情不能用異步控制器來完成。某種類型的工作隊列是一種選擇,或者馬特上面提到的有關另一項服務檢查文件夾/數據庫內容和進程的內容,這將實際上是一種工作隊列。 –

0

使用異步控制器不會做你想在這裏,雖然你仍然應該使用它們作爲第一步。異步控制器將釋放服務器線程,以便可以處理更多的請求,而不使用異步,任何長時間運行的操作都將阻止正在使用的線程,並停止處理其他請求。如果有足夠長的運行線程,則其他客戶端請求將被拒絕。

您還需要查看不同的機制來處理文件,例如,API操作可以將文件放在一個文件夾中,另一個(非Web服務)進程可以監視該文件夾並拿起新文件進行處理。另外,您可以查看排隊或消息總線技術,這增加了更多的複雜性,但也爲您提供了有關排隊處理的安全性。

要考慮的另一件事是如何向上傳客戶端報告驗證問題或錯誤,您可以在API操作中進行一些檢查,但您可能仍需要考慮在發生錯誤時如何通知客戶端處理文件。你最好如何做到這一點將取決於你的系統。

+0

是的,您是對的,我可以使用其他非Web服務進一步處理。但如果可能的話,我正在尋找其他任何選項。請讓我知道,如果你可以在同一個網絡項目的網絡mvc建議任何其他實施。此外,要回答你的問題,我將如何通知用戶有關錯誤的是,如果錯誤和成功,我正在向用戶發送郵件 –