你可以在WCF中使用一个静态方法来访问HttpContext.Current.Items吗?
本文关键字:访问 静态方法 一个 HttpContext Current Items WCF | 更新日期: 2023-09-27 18:05:43
我有一个拦截器,从WCF请求的消息头中挑选数据。见下文:
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
_CurrentRequest = request;
SetupSecurityPrincipal();
ThreadExtension.PersonID = GetIntHeader(HeaderKeys.PersonID);
return null;
}
ThreadExtension
(忽略名称,没有任何意义)是一个具有静态属性的类,它提供对HttpContext.Current
的get/set操作。见下文:
public class ThreadExtension
{
public static int? PersonID
{
get { return (int?)HttpContext.Current.Items["PersonID"]; }
set { HttpContext.Current.Items["PersonID"] = value; }
}
}
所以问题是从我们的web端到我们的WCF web服务的请求,有时在ThreadContext
的信息变化,如果我们有2个请求发生在一起足够近,导致一个人的数据在另一个人的会话。
可疑行为:
_CurrentRequest = request;
WCF消息检查器通常是单例的,因此实例变量实际上是静态的。设置这个,然后在类的其他地方从它读取头将导致你所看到的不确定性行为。