65.9K
CodeProject 正在变化。 阅读更多。
Home

将 ASP.NET 应用程序迁移到 IIS 7 集成模式

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2013 年 10 月 11 日

CPOL

2分钟阅读

viewsIcon

15302

简介:关于如何使您的应用程序与 IIS7 集成模式兼容,已经有很多讨论。 要了解如何使您的

引言

关于如何使您的应用程序与 IIS7 集成模式兼容,已经有很多讨论。 要了解如何使您的应用程序与 IIS7 集成模式兼容,您首先需要了解集成模式是什么以及我们为什么要使用它。

IIS7 发布了两种模式,经典模式和集成模式。 前者与以前版本的 IIS 兼容。 而后者是增强的版本,支持许多功能。

在本博客中,我将解释关于“在此上下文中,请求不可用”异常。

当您将 ASP.NET 应用程序移动到 IIS 7.0/7.5 上的集成模式时,“在此上下文中,请求不可用”异常是您可能收到的更常见的错误之一。 当您尝试访问请求的 HttpContext 时,此异常发生在 global.asax 文件中 Application_Start 方法的实现中。 它看起来像这样

服务器在 '/' 应用程序中发生错误。


在此上下文中,请求不可用

说明:在执行当前 Web 请求期间,发生了未处理的异常。 请检查堆栈跟踪,以获取有关该错误以及代码中错误的来源的更多信息。

异常详细信息:System.Web.HttpException: 在此上下文中,请求不可用

源错误:

 

在执行当前 Web 请求期间,生成了未处理的异常。 有关异常的来源和位置的信息可以使用下面的异常堆栈跟踪来识别。

 


由于
ASP.NET 应用程序始终由对应用程序的第一个请求启动; 因此,过去可以通过静态 HttpContext.Current 字段获取请求上下文。 在经典模式下,请求上下文可用于可用。

但是由于 IIS7 集成管道中的设计更改,使得请求上下文在 Application_Start 事件中不可用。

那么如果您想在 Application_Start 事件中访问请求上下文,该怎么办?

  1. 您可以将应用程序移动到不推荐使用的经典模式,或者
  2. 您可以相应地更改您的应用程序。

如果您的选择是更改应用程序,那么您首先需要从 Application_Start 中删除对 HttpContext.Current 的引用。

首先,如果您使用 HttpContext.Current.Request 获取应用程序路径,则不需要使用请求,而是使用 HttpRuntime.AppDomainAppVirtualPath。

请参见下面的代码;

Response.Write(HttpRuntime.AppDomainAppVirtualPath);
Response.Write(HttpContext.Current.Request.ApplicationPath);

两者将返回相同的结果。

 

或者,如果您想访问第一个请求信息,以下是如果您想在 Application_Start 事件中访问请求信息的示例代码

void Application_BeginRequest(object sender, EventArgs e) 
{
    HttpApplication application = (HttpApplication)sender;
    HttpContext context = application.Context;
    // 在此处初始化您的第一个请求..
}

获取上下文,然后执行您的第一个初始化步骤。

在下一篇博客中,我们将发现更多关于“将 ASP.NET 应用程序迁移到 IIS 7 集成模式”的信息。
© . All rights reserved.