2009-12-12 143 views
1

似乎異步HTTP處理程序比同步HTTP處理程序縮放更好。但是,然後可以通過異步處理程序處理.aspx頁面?如果是這樣,怎麼樣?還是有人需要使用Ajax實現相同?異步.aspx頁面

回答

2

異步HttpHandlers的可以從入站IIS/ASP.NET進程線程,以便有效地產生一個異步處理程序(或使用異步ASP之一當不佔用ASP.NET請求隊列斷開.NET頁機制)。這對於同時處理大量請求的大量網站非常有用。

異步處理程序適用於IO綁定操作(調用Web服務,等待SQL Server運行長查詢),其中應用程序只等待結果返回。但是,如果您的aysnc任務是CPU密集型的,CPU負載不會從機器中卸載,那麼對您而言,它不會有太大的幫助。如果您的異步任務需要很長時間才能運行,因爲請求只是顯示爲掛起狀態,它們也不能很好地工作。對於操作需要一段時間的更多交互式UI,AJAX和輪詢是首選方法 - 或者讓用戶知道任務已完成(電子郵件或基於應用程序的通知)的其他回調機制。

對於CPU密集型任務卸載,您必須構建一個應用服務器類型體系結構,您可以將處理卸載到另一臺計算機並查詢進度,或使用其他通知機制讓您知道進度並返回最終結果。

我這裏這兩種方法的一些幻燈片和例子(異步只針對網頁,通過樣品提供自定義組件卸載):

http://www.west-wind.com/Weblog/posts/543251.aspx (去朝後下方的「與龍運行的請求處理ASP.NET「

1

異步HTTP處理程序可以在您運行I/O綁定任務(從網絡,磁盤,數據庫,Web服務等獲取某些內容)相對較長的時間內提供可伸縮性,並且您不希望擁有線程池線程在等待這些任務完成時被阻塞。在其他情況下,他們不會提供幫助。他們不會神奇地讓你的應用程序更快。您通過實現IHttpAsyncHandler接口來創建異步處理程序。

1

Page對象(其處理.aspx頁面)HttpHandler。您可以通過在Page指令中設置Async屬性來將其配置爲使用異步。然後按照代碼背後的其中一個異步代碼模式。例如:

protected void Page_Load(object sender, EventArgs e) 
{ 
    PageAsyncTask pat = 
     new PageAsyncTask(BeginAsync, EndAsync, null, null, true); 
    this.RegisterAsyncTask(pat); 
}