私は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 であるためです。
どうすればこれを達成できますか?