2

我们目前看到HttpContext.Current.Items在服务器环境中使用开发人员的本地环境没有问题(所有工作都按预期工作)的问题,我们突然丢失了放置在里面的项目(得到一个NullReferenceException)。

我草绘了一些代码并在下面使用:

Global.asax 我们在 BeginRequest 初始化工厂:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Items["Key"] = new Factory();
}

在内部,BaseControl我们有一个属性可以轻松检索工厂:

public Factory Factory
{
    get { return HttpContext.Current.Items["Key"] as Factory; }
}

UserControl我们通过基本属性使用它:

protected void Page_Load(object sender, EventArgs e)
{
    Product p = Factory.CreateProduct();
}

环境信息:

  • 本地 DEV 使用 IIS 7.5 和 8 以及 Sitecore 6.6 在 Windows 7 和 8 上运行
  • 服务器正在使用 IIS 7.5 和 Sitecore 6.6 运行 Windows Server 2008 R2

对于所有本地开发人员(我们正在与 6 人一起进行此项目),上述代码没有问题。但是,一旦我们将代码部署到测试服务器,使用工厂中断的位置(HttpContext.Current.Items即为空)

4

2 回答 2

0

I noticed you use the same name for your property as it's type:

public Factory Factory {}

Maybe this initiates some unexpected behavior?

于 2013-04-12T05:45:51.800 回答
0

当它的行为与您描述的一样时,我只能想象一种情况:在Global.asax文件中Inherits,测试服务器上的属性指向Sitecore.Web.Application直接省略您的代码执行。

您能否仔细检查Global.asax文件是否以

<%@Application Language='C#' Inherits="My.Assembly.Namespace.Global" %>

如果Global.asax在您的开发环境中更改但尚未部署到测试环境,则可能会发生这种情况。

如果这不是问题,请尝试检查是否Application_BeginRequest在测试服务器上执行。它会给你一个答案,无论Factory是从不添加HttpContext.Current.Items还是Items在请求处理期间从 中删除。

于 2013-04-11T12:20:48.920 回答