簡體   English   中英

ASP.NET httphandler中的異步Web請求

[英]Async web request in asp.net httphandler

我有以下情況,如果可能的話,我想澄清一下。

我有一個JavaScript函數,可對處理程序(.ashx)文件進行ajax調用。 javascript函數不需要返回值。 處理程序將發布一些數據並完成操作。 處理程序文件向Bitly,Facebook和Twitter發出ASYNC Web請求(不按此順序)。 我的想法解決方案是使處理程序對Bitly(bit.ly)進行ASYNC調用,獲取結果,然后在彼此獨立的不同線程上同時發布到Twitter和Facebook。

我要問的是WaitHandle。 因為處理程序在用戶操作之外運行,我應該使用它還是回調方法足夠? 如果沒有調用來保持當前線程直到返回,則處理程序文件是否仍在偵聽回調? 如果確實需要讓線程等待回調,我是否仍然可以通過發出ASYNC Web請求而看到原始線程仍在等待或掛斷的好處?

我有點理解這是如何工作的,但不能完全將其組合在一起。

注意:該句柄不用於攔截Web請求。 我正在使用處理程序來處理ajax發布。 我直接打電話給處理程序。

我不會為此使用異步處理程序。 由於您沒有返回結果,因此為此目的使用異步處理程序很浪費。 在您正在執行的任務運行時間較長的情況下,必須使用Aysnc處理程序,並且必須將該任務的結果作為對等待線程以及最終瀏覽器的響應發送回去。

在您的情況下,您應該使用輔助過程或MSMQ來完成工作。 一個簡單的解決方案是將數據發布到表中,然后由另一個進程處理這些記錄。 MSMQ在這些情況下確實非常有效,因為對消息進行排隊僅需一秒鍾的時間,並且處理這些消息的過程可能會花費自己的美好時光,而對ASP.NET Web應用程序/站點沒有任何不良影響。 這樣,您將獲得很多網站可伸縮性。

要回答有關WaitHandle的問題(如果您不願意使用此方法),不,您不應該使用waithandle,而應將其用作真正的異步非阻塞處理程序。 WaitHandle將阻止。

不能保證處理程序在整個過程中都可以運行。 您的工作進程可以在這段時間內重置。 更有理由不將其作為異步處理程序,而是將其作為“帶外”異步作業來執行。 帶外是指與ASP.NET應用程序不在同一個過程中。

暫無
暫無

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

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