2011-02-02 108 views
0

我有以下情況,並希望得到一些澄清,如果可能的話。在asp.net中的異步web請求httphandler

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

我在質疑的是WaitHandle。我是否應該使用它,因爲處理程序在用戶操作之外運行,或者回調方法是否足夠?如果沒有調用保持當前線程直到它返回,那麼處理程序文件是否仍在監聽回調?如果我確實需要讓線程等待回調,我仍然可以獲得使ASYNC Web請求看到原始線程仍在等待或掛起的好處嗎?

我有點理解這是假設工作,但不能完全把它放在一起。

注意:句柄不用於攔截Web請求。我正在使用處理程序來處理ajax文章。我直接調用處理程序。

回答

0

我不會爲此使用異步處理程序。由於您沒有返回結果,因此爲此使用Async Handler是浪費的。在您正在執行的任務相對較長的情況下使用Aysnc處理程序,並且必須將此任務的結果作爲對等待線程和最終瀏覽器的響應發回。

在你的情況下,你應該使用輔助過程或MSMQ來完成工作。一個簡單的解決方案是將數據發佈到表中,並讓另一個進程處理這些記錄。 MSMQ對於這些情況非常適用,因爲排隊消息需要幾分之一秒的時間,處理這些消息的進程可以在不影響ASP.NET Web應用程序/站點的情況下自行實現甜蜜時間。你會像這樣獲得很多網站的可擴展性。

要回答你關於WaitHandle的問題(如果你想要走這條路線),不要使用waithandle,你應該使用它作爲一個真正的異步非阻塞處理程序。 WaitHandle會阻塞。

無法保證處理程序在整個過程中都處於活動狀態。您的工作進程可以在此期間重置。所有更多的理由不是將它作爲異步處理程序來執行,而是作爲「帶外」異步作業執行。我的意思是不在你的ASP.NET應用程序的同一個進程中。

+0

謝謝你的有用答覆。我將研究一個MSMQ解決方案。 – Raimone 2011-02-03 04:07:36