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;
    }
}

在我的商务舱内,我有两种方法:

    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 为空。

我怎样才能做到这一点?

4

0 回答 0