ASP.. NET HttpContext项在服务器上消失
本文关键字:服务器 消失 NET HttpContext ASP | 更新日期: 2023-09-27 18:08:52
我们目前看到一个使用HttpContext.Current.Items
的问题,在服务器环境中,开发人员的本地环境显示没有问题(所有工作如预期),我们突然丢失了放置在里面的项目(获得NullReferenceException
)。
我在下面画了一些代码和用法:
全球。当我们初始化工厂在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();
}
环境信息:- 本地开发者在Windows 7和8上运行,使用IIS 7.5和8和Sitecore 6.6
- 服务器正在运行Windows server 2008 R2,使用IIS 7.5和Sitecore 6.6
对于所有本地开发人员(我们有6个人在这个项目上工作),上面描述的代码没有问题。然而,一旦我们将代码部署到测试服务器,使用工厂分隔符的位置(如果HttpContext.Current.Items
为空)
我可以想象只有一个场景,当它的行为像你所描述的:在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
中删除。
我注意到你的属性使用相同的名称,因为它的类型:
public Factory Factory {}
也许这会引发一些意想不到的行为?