2011-08-17 8 views
1

私は、WCFリクエストでメッセージヘッダからデータを取り出すインターセプタを持っています。以下を参照してください:HttpContext.Current.ItemsにアクセスするWCFで静的メソッドを使用できますか?

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
{ 
    _CurrentRequest = request; 
    SetupSecurityPrincipal(); 
    ThreadExtension.PersonID = GetIntHeader(HeaderKeys.PersonID); 
    return null; 
} 

ThreadExtension(何を意味する、名前を無視して)HttpContext.Currentに設定GETを提供/静的プロパティを持つクラスです。以下を参照してください:

public class ThreadExtension 
{ 
    public static int? PersonID 
    { 
     get { return (int?)HttpContext.Current.Items["PersonID"]; } 
     set { HttpContext.Current.Items["PersonID"] = value; } 
    } 
} 

私たちは別の1人のデータが得られ、一緒に十分近く起こる2つの要求を持っているのであれば、問題は、私たちのWCFのWebサービスへの当社ウェブ端からの要求、ThreadContextの変更で、時々の情報にあります人のセッション。

私の質問は何ですか?静的プロパティの使用は適切なアプローチではありませんか?理想的には、WCFの要求に結びついているものだけが必要なので、いつでもデータを渡すことなく数箇所で取得できます。

ご提供いただけるアドバイスやアドバイスをいただければ幸いです。

+0

なぜそのプロパティはセッションに依存しているのでしょうか? – Yahia

+0

私たちは、すべての呼び出しで値を渡すことなく、その1人の呼び出しの生存期間にわたってこれらの値にアクセスしようとしています。私はこの間違いを考えているかもしれませんが、私の印象は静的なプロパティはHttpContextへのパススルーです。より良い方法がありますか? –

+1

WCFでセッションを使用していますか(netTCPバインディングなど)? 「PersonID」を通話中にどのように関連づけていますか? 'HttpContext.Current.Items [" PersonID "]'を直接使用しない理由は何ですか? – Yahia

答えて

2

疑わしいラインである:インスタンス変数が有効に静的であるよう

_CurrentRequest = request; 

WCFメッセージ検査官は通常シングルトンです。これを設定し、クラス内の他の場所からヘッダーを読み込むと、あなたが見ている非決定的な振る舞いにつながります。

+2

うん、それはうまくいきました。ランダムな見知らぬ人ありがとう...ありがとうございます。 –

関連する問題