1

私はBeginX()というサービスメソッドを持つRESTful WCFサービスを持っています

BeginX 内で、静的ヘルパー クラスで静的 Validate 関数を呼び出します。静的な Validate メソッド内で、WebOperationContext.Current.OutgoingResponse.StatusCode = blah を呼び出すことはできますか?

現在のコンテキストがサービスの静的メソッド内から呼び出された場合、どのような動作が予想されますか?

(プロトタイプを作成しようとしましたが、コンソール アプリで実行されるインプロセス WCF サービスから取得しようとすると、WebOperationContext を取得できないようです)

4

1 に答える 1

2

WebOperationContext.Currentは静的プロパティであり、メソッドがそのスレッドで実行されている限り、静的またはそれ以外の任意のメソッドで使用できます。

private static void CheckWebOperationContext()
{
   Trace.WriteLine(string.Format("CheckWebOperationContext: {0}", WebOperationContext.Current == null ? "WebOperationContext is null" : "WebOperationContext is not null"));

}

[OperationContract]
[WebInvoke]
public void DemonstrateWebOperationContext()
{
    Trace.WriteLine(string.Format("GetPlayerStatus: {0}", WebOperationContext.Current == null ? "WebOperationContext is null" : "WebOperationContext is not null"));
    CheckWebOperationContext();
    // Now call the same function on a different thread
    Action act = () =>
        {
            CheckWebOperationContext();
        };
    var iAsyncResult = act.BeginInvoke(null, null);
    iAsyncResult.AsyncWaitHandle.WaitOne();
}

これにより、次の出力が得られます。

GetPlayerStatus: WebOperationContext が null ではありません

CheckWebOperationContext: WebOperationContext が null ではありません

CheckWebOperationContext: WebOperationContext が null です

への最初の呼び出しCheckWebOperationContextは同じスレッド上にあるため、コンテキストを使用できます。2 番目の呼び出しは別のスレッド上にあるため、コンテキストは使用できません。

于 2011-11-03T23:27:55.853 に答える