你可以在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个请求发生在一起足够近,导致一个人的数据在另一个人的会话。

所以我的问题是,我们做错了什么?在这里使用静态属性不是正确的方法吗?理想情况下,我们只需要一些与WCF中的请求相关联的东西,这样我们就可以在几个地方访问它,而不必一直传递数据。

你可以在WCF中使用一个静态方法来访问HttpContext.Current.Items吗?

如果您能提供任何帮助或建议,我将不胜感激。

可疑行为:

_CurrentRequest = request;

WCF消息检查器通常是单例的,因此实例变量实际上是静态的。设置这个,然后在类的其他地方从它读取头将导致你所看到的不确定性行为。