首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET HttpContext项在服务器上消失

ASP.NET HttpContext项在服务器上消失
EN

Stack Overflow用户
提问于 2013-04-11 12:01:38
回答 2查看 1.2K关注 0票数 2

目前,我们在使用HttpContext.Current.Items时遇到了一个问题,在服务器环境中,开发人员的本地环境不显示任何问题(所有工作都如预期的那样),我们突然松掉了放置在其中的项(获取NullReferenceException)。

我在下面概述了一些代码和用法:

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

代码语言:javascript
运行
复制
protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Items["Key"] = new Factory();
}

BaseControl中,我们有一个属性可以轻松地检索工厂:

代码语言:javascript
运行
复制
public Factory Factory
{
    get { return HttpContext.Current.Items["Key"] as Factory; }
}

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

代码语言:javascript
运行
复制
protected void Page_Load(object sender, EventArgs e)
{
    Product p = Factory.CreateProduct();
}

环境信息:

  • 本地开发人员正在Windows 7和Windows 8上运行,使用IIS 7.5和8以及Sitecore 6.6
  • 服务器正在运行Windows 2008 R2,使用IIS7.5和Sitecore 6.6

对于所有本地开发人员(我们正在与6人合作这个项目),上面描述的代码没有问题。然而,一旦我们将代码部署到测试服务器,使用工厂中断的位置(ea,HttpContext.Current.Items为空)

EN

回答 2

Stack Overflow用户

发布于 2013-04-11 12:20:48

我可以想象只有一个场景,它的行为与您所描述的一样:在Global.asax文件中,测试服务器上的Inherits属性直接指向Sitecore.Web.Application,忽略了代码的执行。

您能否再次检查一下Global.asax文件是否以

代码语言:javascript
运行
复制
<%@Application Language='C#' Inherits="My.Assembly.Namespace.Global" %>

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-04-12 05:45:51

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

代码语言:javascript
运行
复制
public Factory Factory {}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15948262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档