2011-08-30 23 views
0

請告訴我爲什麼IHttpHandler需要實現IRequiresSessionState。沒有實現它,我們不能讀/寫任何會話變量? 不能像這樣直接訪問HttpContext.Current.session。 請解釋.......感謝關於使用IRequiresSessionState

public class MyHttpHandler : IHttpHandler, IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     var MyValue = context.Session["MyKey"] as String; 

     MyValue = "Hello World"; 

     context.Session["MyKey"] = MyValue; 
    } 

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

回答

2

會話狀態不是HTTP基礎結構的本地部分。這意味着請求將需要序列化/加載會話信息(來自內存或數據庫或另一臺服務器),以查找需要訪問會話並在完成時將其保存回來的請求。

HttpHandler是響應於對ASP.NET http runtime的請求而運行的過程(通常稱爲「端點」)。它用於處理您定義的特定類型的對象/類/資源。如果對該資源的處理不需要訪問會話,則該特定請求不需要不必要地加載/保存會話數據。所以,默認情況下,session不可用於HTTPhandlers,除非它是像頁面處理程序這樣的預定義處理程序。

要成功解析對Session對象的任何調用,運行時環境必須將會話狀態添加到正在處理的請求的調用上下文中,在此情況下爲IRequireSessionState

看看這個msdn鏈接瞭解更多詳情。

要回答你的問題,不,如果你沒有實現IRequireSessionState,你將無法訪問處理器類中的會話對象,因爲上述事實。

1

如果不實現這個接口,你不應該能夠成功地使用會話對象。你是假設爲如果你想訪問會話,使用這個接口,無論你如何訪問它。

它不應該沒有它。如果確實如此,那麼它就是一種僥倖,而不是依靠它。

1

除非使用IRequiresSessionState接口標記處理程序,否則ASP.NET SessionStateModule將不會填充上下文的會話屬性。