繁体   English   中英

初始化 default.aspx 时获取“请求在此上下文中不可用”

[英]Getting “Request is not available in this context” when initializing default.aspx

长话短说,我得到了标题中提到的异常,仅在部署此版本的 7 台服务器中的一台上引发了异常。 通过向主默认页面发出请求来启动 Web 应用程序时会发生这种情况。 这台发生故障的服务器 - 我们称之为 F -,正在运行 IIS 8.5。 其他有效的我不确定所有这些,但至少其中三个在 IIS 8.0 上运行。

这是发生这种情况时的堆栈。

System.TypeInitializationException: The type initializer for 'Innova._8R00.cUrls' threw an exception. ---> System.Web.HttpException: Request is not available in this context
    at System.Web.HttpContext.get_Request()
    at Innova._8R00.cUrls..cctor()
    --- End of inner exception stack trace ---
    at RequestPortal.BasePage..ctor(String callerMember, String callerPath)
    at RequestPortal._Default..ctor()
    at ASP.default_aspx..ctor() in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\requestportal\fbdfb9ed\97c3a4b\App_Web_rguuv5sc.2.cs:line 0
    at __ASP.FastObjectFactory_app_web_rguuv5sc.Create_ASP_default_aspx() in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\requestportal\fbdfb9ed\97c3a4b\App_Web_rguuv5sc.3.cs:line 0
    at System.Web.Compilation.BuildResultCompiledType.CreateInstance()

如您所见,这是一个实例化 Web 应用程序默认页面的请求。 它将调用 BasePage 构造函数,该构造函数依次尝试实例化一个名为cUrl的结构,我将在下面发布一个片段。

public struct cUrls
{
...
        public static string URL_PAGE = HttpContext.Current.Request.Url.AbsoluteUri;
        public static string PROTOCOL = HttpContext.Current.Request.Url.Scheme;
        public static string FQDN = HttpContext.Current.Request.Url.Host;
        public static string APP_PATH = HttpContext.Current.Request.ApplicationPath;
...
}

我在 Internet 上做了很多研究,我知道这主要与 IIS 7 相关,并试图从 Application_Start 使用 HttpContext。 正如您所看到的,情况并非如此。 有代码在 Application_Start 中使用 cUrl.APP_PATH 但这似乎没问题,而且这在 IIS 8.5 上崩溃了,记住在其他几台机器上也能正常工作。

我是说它必须与环境、machine.config 中的设置或 F 机器上的其他不同内容有关。 有任何想法吗?

简短的回答:它被证明是一个暂时的环境问题。 是的,异常可能是由于某些配置更改而暂时引起的。

长答案:在等待批准访问 IIS 配置时,我们又尝试了一次该应用程序,令我们惊讶(或者可能以预期的方式)这次它起作用了。 也不例外,一帆风顺。 与此同时,我们可以访问发生故障的 F 服务器/环境,以便能够检查 IIS 配置并将其与工作环境进行比较,但现在为时已晚,我们可能永远不知道是什么原因造成的。 我们仍然检查,但配置是相同的。

我在原帖中说的这些服务器(总共 7 个)是 local(1)、DEV(1)、QA(2)、UAT(1) 和 PROD(2) 环境,总共 7 个,只有一个失败了 - UAT。 我不知道它何时重新开始工作,因为除非我们处于 UAT 阶段,否则它不会被大量使用。

作为结论,我知道在那个阶段在 HttpContext 实例中没有可用的 Request 对象是没有意义的,而在 ASP.Net 页面的构造函数中却发生了。 结果证明代码很好,不需要剖析。 这完全是由于环境(这是一个企业环境,有时在我们不知情的情况下在这些服务器上发生更新和更改)。 我只是希望其他人以前经历过这种情况并且会认识到这种模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM