我们的 ASP.NET C# web 应用程序用于以下环境
- .NET 框架 4
- Silverlight 4 / PivotViewer
- IIS 7
- 视窗 2008
- Visual Studio 2010 .NET IDE
- C#
- HTTPS ( SSL )
我们的 Silverlight 4 / PivotViewer 控件显然嵌入在 ASP.NET 页面中。
在极少数情况下,我们在带有 IIS 7 的独立 Windows 2008 服务器上浏览承载 Silverlight 4 / PivotViewer 模块的 ASP.NET 页面时,会收到“对象引用未设置为对象的实例。错误。
此外,关于该错误还有许多非常奇怪的事情。首先,它有时仅在某些用户计算机上发生。详细地说,它通常只发生在用户第一次使用访问我们的 ASP.NET Web 应用程序的计算机时。
此外,一旦我们清除浏览器缓存,在托管我们的 Silverlight 4 / PivotViewer 模块的 ASP.NET 页面中导航时不会发生错误。
关于该错误的另一个有趣方面是,当它实际上部署到带有 IIS 7 的独立 Windows 2008 服务器时,它指的是错误堆栈跟踪中我本地开发计算机上的绝对路径。这真的很奇怪,因为在我部署到带有 IIS 7 的独立 Windows 2008 服务器,我确保 web.config 等文件中的所有配置参数均参考独立服务器环境。换句话说,我删除了对与我的本地开发计算机关联的配置参数值的任何引用。
因此,我很困惑为什么它在错误堆栈跟踪中引用我本地开发计算机上的绝对路径。
用户在使用网站时获得“未将对象引用设置为对象的实例。”将是糟糕的体验。此外,如果我们必须告诉用户清除他/她的浏览器,这将是糟糕的用户体验每次出现错误时缓存。
“/”应用程序中的服务器错误。你调用的对象是空的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[NullReferenceException: 对象引用未设置为对象的实例。] C:\VisualStudioWorkSpace\VisualCSharpProjects\PerlsPivot\PivotServer\SectionBasedRelatedModules\SectionBasedRelatedModules.aspx.cs:160 PivotServer.SectionBasedRelatedModules.SectionBasedPerlsViewer.tailorConfigurationDetailsOfPageElementsToFallInLineWithTutorialSelection() .Page_Load(Object sender, EventArgs e) in C:\VisualStudioWorkSpace\VisualCSharpProjects\PerlsPivot\PivotServer\SectionBasedRelatedModules\SectionBasedPerlsViewer.aspx.cs:146 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24 System.Web.UI.Control.LoadRecursive() +70 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +3063
版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.272
我查看了第 160 行,其中包含以下代码:
String coursename = HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"].ToString();
显然,这告诉我们在 HttpContext.Current.Session 中变量“courseNameAssociatedWithLoggedInUser”没有值。
但是,我在另一台计算机上采取了相同的步骤,但一切运行顺利。此外,我确信一旦用户登录,我就会为 HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"] 赋值。
HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"] 是否因某种原因损坏?如果是这样,为什么,我们如何防止它?
我应该使用 Page.Session 而不是 HttpContext.Current.Session 吗?那会有帮助吗?