2009-08-04 20 views
1

ASP.net汎用ハンドラファイル(.ashx) セッションはデフォルトで有効になっていません。セッションコレクションは何も関係なく空です。 インターフェイスはどのように機能を実装していますか?

しかし、単に「ISessionHandler」を実装することで、セッションはセッションコレクションけれども突然アクセス可能です

...

私は本当に私の頭の中でbecuaseのインターフェイスは他のもの何のメソッド、プロパティを語っ以外の何かをdoesntのことを理解しない

それは持っている必要があります。

どのように動作するか知っていますか?

ありがとうございます。

+0

@Moulde:あなたが参照しているインタフェースの完全な名前を教えてください。それは 'System.Web.ISessionHandler'ですか? –

答えて

1

これらのインターフェイスは、HttpContextによって単純に使用されます。キービットされた状態で

set 
    { 
     this._handler = value; 
     this.RequiresSessionState = false; 
     this.ReadOnlySessionState = false; 
     this.InAspCompatMode = false; 
     if (this._handler != null) 
     { 
      if (this._handler is IRequiresSessionState) 
      { 
       this.RequiresSessionState = true; 
      } 
      if (this._handler is IReadOnlySessionState) 
      { 
       this.ReadOnlySessionState = true; 
      } 
      Page page = this._handler as Page; 
      if ((page != null) && page.IsInAspCompatMode) 
      { 
       this.InAspCompatMode = true; 
      } 
     } 
    } 

:あなたは、リフレクタでそのハンドラのプロパティを見れば、あなたは次のように表示されます

if (this._handler is IReadOnlySessionState) 
    { 
     this.ReadOnlySessionState = true; 
    } 

他の人は、彼らがするのHttpContextが使用するマーカー・インターフェースであると述べてきたようにそれが持つべき能力を確立する。

IHttpHandlerのProcessRequestは、HttpContextを取ります。したがって、2つの間の関係です。

3

インターフェイスは実際に何も実装していません。彼らはたぶんタイプをチェックし、それに基づいて異なった動作をしています。

例:

public ISession Session 
{ 
    get { if (this is ISessionHandler) return theSession; else return null; } 
} 
5

これらのインタフェースは、私はマーカーインタフェース、それらの "マーク" を目的と呼ばれると信じています。リフレクション(つまり、クラスがインタフェースを実装しているかどうかをチェックする)またはクラスxがタイプIInterfaceである場合には、特定の機能を有効にすることができます。

編集:はここIRequiresSessionStateインターフェイスのドキュメントから、対象の詳細一部(これは、Javaについてです、しかし関連)

link text

0

です:

は、そのターゲットは、HTTPを指定しますハンドラ には、セッション状態値 に対する読み取りと書き込みアクセス権が必要です。これはマーカー インターフェイスであり、方法はありません。

0

マーカインタフェースは非難されていますが、代わりにアトリビュートを使用する必要がありますが、理由は分かりません。マーカインタフェースでは、はるかに安全ではるかに洗練されたセマンティクスであり、

+0

私はまったく同意します.. – Moulde

関連する問題