当我的服务执行时,许多类将需要访问User.Current(这是我自己的User类).我可以安全地将_currentUser存储在[ThreadStatic]变量中吗?WCF是否重用其线程?如果是这种情况,它什么时候会清理ThreadStatic数据?如果使用ThreadStatic不安全,我应该把数据放在哪里?在OperationContext.Current中有一个地方可以存储那种数据吗?
编辑12/14/2009:我可以断言使用ThreadStatic变量是不安全的.WCF线程位于线程池中,并且ThreadStatic变量从不重新初始化.
Dar*_*rov 87
有一个博客帖子这表明实施的IExtension<T>.您也可以看一下这个讨论.
这是一个建议的实现:
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 void Attach(OperationContext owner) { }
public void Detach(OperationContext owner) { }
}
Run Code Online (Sandbox Code Playgroud)
你可以这样使用:
WcfOperationContext.Current.Items["user"] = _currentUser;
var user = WcfOperationContext.Current.Items["user"] as MyUser;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20242 次 |
| 最近记录: |