【问题标题】:ASP.NET HttpContext Items vanish on serverASP.NET HttpContext 项在服务器上消失
【发布时间】:2013-04-11 12:01:38
【问题描述】:

我们目前看到使用 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中我们通过base属性来使用它:

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 人一起开展此项目),上述代码没有问题。但是,一旦我们将代码部署到测试服务器,使用 Factory break 的位置(即 HttpContext.Current.Items 为空)

【问题讨论】:

  • 可能是应用程序池重新启动?
  • @JPHellemons 如果是由于应用程序池重新启动,整个页面不应该呈现,只有使用工厂的组件会返回错误。
  • @IvanL 你试过Application_AcquireRequestState 吗?我怀疑 Application_BeginRequest 正在被所有请求调用(即使是 CSS、javascript 等),而 HttpContext.Current 在某些情况下可能不可用。 AquireRequestState 在管道中稍后发生,并且可以提供对HttpContext.Current.Items 的更可靠的访问。只是猜测......
  • @DerekHunziker 我会试一试,遗憾的是我们的时间紧迫,所以现在我们已经创建了一个解决方法
  • @IvanL 你找到解决这个问题的方法了吗?我遇到了完全相同的问题

标签: c# asp.net sitecore httpcontext


【解决方案1】:

当它的行为与您描述的一样时,我只能想象一种情况:在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 中删除。

【讨论】:

  • 我们验证了这一点:global.asax 文件继承是正确的,我们也做了一个 Sitecore.Diagnostics.Log.Info 并验证了代码正在执行。
  • 您可以尝试将字符串变量传递给Items 而不是Factory 实例吗?还尝试为BeginRequest 方法和Factory getter 记录Request.RawUrl
【解决方案2】:

我注意到您使用的属性名称与其类型相同:

public Factory Factory {}

也许这会引发一些意想不到的行为?

【讨论】:

  • 不,实际代码有不同的类-属性名称,显示的名称是简化的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2018-03-21
  • 2015-12-18
  • 2016-11-11
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多