Share via


Migrate ASP.NET Applications to IIS 7 Integrated Mode

Introduction

There has been a lot of discussion on how to make your application compatible with [[Internet Information Services|IIS]] 7 Integrated mode. To know how to make your application compatible with IIS7 integrated mode, you first need to understand what the integrated mode is and why we want to use it.

IIS7 released with two modes, Classic mode and the Integrated mode. The former (Classic) is compatible with previous versions of the IIS. While the later is the enhanced mode that supports many features.

This article explains the “Request is not available in this context” exception.

The “Request is not available in this context” exception is one of the more common errors you may receive when moving ASP.NET applications to Integrated mode on IIS 7.0/7.5. This exception happens in your implementation of the Application_Start method in the global.asax file when you attempt to access the HttpContext of the request. It looks something like this:

Server Error in '/' Application.


Request is not available in this context

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Request is not available in this context

Source Error:

 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

 

 

As ASP.NET applications were always started by the first request to the application; it used to be possible to get to the request context through the static HttpContext.Current field. In the Classic mode the request context is used to available.

But because of the design change in the IIS7 Integrated Pipeline, makes the request context unavailable in the Application_Start event.

So what if you want to access the request context in the Application_Start event,

  1. Either you can move the application to the Classic mode which is not recommended, Or
  1. You can change your application accordingly.

If your choice is to change your application, then you first need to remove the references to HttpContext.Current from the Application_Start.

Firstly if you are using the HttpContext.Current.Request for getting the application path you don’t need to user the request, use HttpRuntime.AppDomainAppVirtualPath instead.

See the code below;

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

Both will return the same thing.

 

 

Or if you want to access the first Request information, here is the sample code if you want to access the request information in Application_Start event:

void Application_BeginRequest(object sender, EventArgs e)  
{ 
    HttpApplication application = (HttpApplication)sender; 
    HttpContext context = application.Context; 
    // Initialize your first request here...
} 

Get the context and then do you first initialization steps.

On next blog we will be discovering more about "Migrating ASP.NET Applications to IIS 7 Integrated Mode".

Other Languages

This article is also available in the following languages:

Russian (ru-RU)

See Also