2011-11-30 141 views
0

這裏是我的代碼ashx http處理程序,它根據請求向客戶端發送一些東西。如何開發可處理多個請求的http處理程序

public void ProcessRequest(HttpContext context) 
{ 
    string startQstring = context.Request.QueryString["start"]; 
    string nextQstring = context.Request.QueryString["next"]; 
    //null check 
    if ((!string.IsNullOrWhiteSpace(startQstring)) && 
    (!string.IsNullOrWhiteSpace(nextQstring))) 
    { 
     //convert string to int 
     int start = Convert.ToInt32(startQstring); 
     int next = Convert.ToInt32(nextQstring); 

     //setting content type 
     context.Response.ContentType = "text/plain"; 
     DataClass data = new DataClass(); 
     //writing response 
     context.Response.Write(data.GetAjaxContent(start, next)); 
    } 
} 

它正在工作,但我不確定它是否一次處理多個請求,例如1000次請求服務一次。如果不是,那麼告訴我以這種方式編寫代碼的最佳方式,它可以以高效的方式同時處理多個請求。謝謝

回答

1

看起來不錯,但是如果您的DataClass實例寫入任何共享狀態,則可能存在問題。

+0

不能提供小代碼示例,它顯示了這裏所說的任何內容,只是爲了使任何http處理程序能夠處理多個請求。謝謝 –

+0

你可以告訴我你試圖表示共享狀態......像會話變量或類似的東西嗎? –

1

一切都將取決於DataClassGetAjaxContent方法的實施。如果此方法不依賴於某些共享狀態並且它是線程安全的,那麼您的代碼應該能夠同時處理多個客戶端。由於您只使用局部變量(除了我們無法知道它做什麼的GetAjaxContent方法),您的代碼是線程安全的。

+0

不能給你一個小代碼示例,它顯示了這裏所說的任何東西,只是爲了讓任何http處理程序能夠處理多個請求。謝謝 –

+0

@ user750398,線程安全是一個很大的話題。基本上,您必須確保您使用的'DataClass'不依賴於靜態成員,或者它試圖訪問某些共享資源(例如文件),在這種情況下,您將需要使用適當的同步技術(這將取決於您的課程使用的共享資源)。我可以爲你提供一個保證總能正常工作的例子,這就是對context.Response.Write(「some value」);'進行硬編碼。您將需要提供有關DataClass的更多細節及其功能。 –

+0

@Darin Dimitrov,你不明白。看看user750398的個人資料,看看他發佈的以前的問題,看看他在評論中提出的問題,看看他的大部分問題發生了什麼。那麼,也許這將是有意義的。 –