我有一个 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;
}
}
在我的商务舱内,我有两种方法:
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 为空。
我怎样才能做到这一点?