2

私はwcfサービスを持っています。私はスレッドセーフなグローバル変数にこのクラスを使用しています:

public class WcfOperationContext : IExtension<OperationContext> {
private readonly IDictionary<string, object> items;

private WcfOperationContext() {
    items = new Dictionary<string, object>();
}

public IDictionary<string, object> Items {
    get { return items; }
}

public static WcfOperationContext Current {
    get {
        WcfOperationContext context = OperationContext.Current.Extensions.Find<WcfOperationContext>();
        if (context == null) {
            context = new WcfOperationContext();
            OperationContext.Current.Extensions.Add(context);
        }
        return context;
    }
}

ビジネス クラス内には、次の 2 つのメソッドがあります。

    public async Task<...> Method1(...){
       string refID = WcfOperationContext.Current.Items["RefID"].ToString();
       Method2();
...
    }

public async Task<int> Method2(){
    string refID = WcfOperationContext.Current.Items["RefID"].ToString();
...
}

Method1 では、WcfOperationContext から refID を取得できます。しかし、Method2 では、(常にではありませんが) 時々、次の行でエラーが発生します。

WcfOperationContext context = OperationContext.Current.Extensions.Find<WcfOperationContext>();

OperationContext.Current が null であるためです。

どうすればこれを達成できますか?

4

0 に答える 0