从异步运行的WCF访问Application全局变量

时间:2013-12-04 11:09:00

标签: c# .net wcf web-services global-asax

我正在尝试从WCF访问global.asax应用程序变量,这至少是我的目标。我尝试了很多类型的解决方案,但我现在正在尝试使用静态变量。

我已经创建了一个StaticVariable.cs类,如下所示:

  public static class StaticVariables
    {
        private static string _Key = "name1";

        public static Object someInfo
        {
            get
            {    
                return HttpContext.Current.Application[_Key];
            }           
        } 
    }

Application [“name1”]在global.asax.cs中初始化。我可以在访问我的Web服务时阅读它,但不能在我的WCF服务中阅读。

在我的WCF中,我调用StaticVariables someInfo来检索数据,但我得到了:

System.Web.HttpContext.Current is null error

我的WCF以异步方式运行,并使用Task<int>.Factory.FromAsync从Web服务中调用。所以我假设问题是WCF不在主线程上运行,但我不确定。

所以似乎Static类在我的情况下不起作用,我想知道如何解决这个问题。感谢

1 个答案:

答案 0 :(得分:2)

为什么不简单地使用静态变量?

HttpContext依赖于ASP.NET管道。在与主机无关的模型(OWIN或自托管)中,您无权访问它。

HttpApplicationState中的应用程序存储仅在您需要访问当前HttpContext时才有用。如果没有必要,您应该只使用静态属性。

此外,HttpApplicationState最初是为了向后兼容经典ASP而创建的。

public static class StaticVariables
{
    public static object SomeInfo { get; set; }
}

另请参阅Singleton and HttpApplicationStatehttp://forums.asp.net/t/1574797.aspx