2012-05-29 16 views
10

我一直在使用Ashx以及jQuery。我已閱讀msdn,我正在談論IHttpHandler.IsReusable屬性。什麼時候是一個通用的HttpHandler(一個ashx,IHttpHandler接口)可重用?

獲取一個值,該值指示是否有其他請求可以使用IHttpHandler實例的 實例。

它們是什麼意思「the IHttpHandler instance.」?他們是否試圖讓所有人都可以看到並使用它?static?它是否可重複使用相同的什麼? (查詢字符串,餅乾等?)

如果我這樣寫:

public class MyHttpHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
     context.Response.Write(DateTime.Now.Ticks.ToString());  
     } 

     public bool IsReusable 
     { 
     get { return true; } 
     } 
    } 

似乎每個請求會得到其自己跟上時代的 - Datetime值。

回答

12

在你的例子中,你不管理任何狀態。任何人都可以在同一個實例上多次調用ProcessRequest,他們將得到一個新的DateTime。

但是,如果你這樣做:

private DateTime _dateTime = DateTime.Now; 

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.Write(_dateTime); 
} 

現在,你每次都獲得相同的響應處理程序實例實例化後。除非ASP.NET每次都生成一個新的。

IsReusable可以指示您的處理程序類是否管理可以在不同請求之間共享的任何狀態。如果它管理的狀態不是可以共享的,那麼它不可能是外部冪等的 - 或者甚至可能不是線程安全的。使用相同的輸入條件調用ProcessRequest可能不會產生相同的輸出,因爲您的特定處理程序實現還有一些實例級變量,它們在確定輸出時不能共享。 (事實上​​,從技術上講,你目前的實施就是這樣的一個例子)。在這些情況下,實例可能不是「可重用的」 - ASP.NET需要每次都生成一個新實例以確保可預測性。

因此,如果您不管理狀態,或者在狀態「顯而易見」的情況下您有非常簡單的處理程序(例如我們在此處的示例),則IsResuable看起來可能毫無意義。但是,如果你有一個非常複雜的處理程序 - 可能會保留一些初始化成本昂貴但可以共享的狀態 - 你可能想向ASP.NET表明可以重用它以達到性能。

+2

我永遠無法找到這一個合適的MSDN文檔:/ – IrishChieftain

+0

@IrishChieftain也爲這個問題該問香港專業教育學院(,並沒有得到任何好asnwer)-lousy MSDN documenetation ... http://stackoverflow.com/questions/8298843/registerclientscriptblock-parameters-usages-in-real-scenarios –

+0

請看這裏的Branislav的迴應:http://stackoverflow.com/questions/1507572/streaming-databased-images-using-httphandler – IrishChieftain

0

如果你在那裏有一個實例變量,我想你會發現它是在衆多調用中共享的,所以如果你的日期時間被設置爲一個實例變量,並且你只是在processrequest中返回它,我認爲它會返回相同的值,而如果isreusable = false,則不會,因爲它會創建處理程序的新實例。

1

對不起,剛剛張貼的鏈接答案,但IsReusable的很好的解釋:

IsReusable blog post

本質上打開它,如果你的代碼是完全線程安全的,離開它,如果它不是。那麼這就是我從它收集的。

0

顯然,這將處理程序保存在內存中,並且能夠處理多個請求。當設置爲false時,它必須爲每個傳入請求創建一個處理程序的新實例。

public bool IsReusable 
{ 
    get 
    { 
     return true; 
    } 
} 
+0

是的......我知道這一點。問題標題是「真正使用...」 –

+0

我們之間的語言難度Royi,你能不能再重複它,因爲我不確定你的意思是什麼:) – IrishChieftain

+0

當然...... :)我已經知道屬性的含義。 ....但即時通訊尋找一個真實的場景(樣本),我必須決定是否真假...... –

相關問題