Migration Issues with IIS 7's Integrated Pipeline Mode
IIS 7 offers two pipeline modes. Due to the integration between the ASP.NET runtime and IIS, the default integrated pipeline mode handles all requests through a unified pipeline. This design allows code greater access to various points in the request process.
IIS 7's classic mode behaves in the same manner as IIS 6 and uses two pipelines to process requests, one for native-code application components and the other for managed code application components.
The default pipeline mode for new IIS 7 hosting accounts is integrated. This option can be changed in your Hosting Control Center.
For an overview of migrating ASP.NET applications to IIS 7 integrated mode, see ASP.NET Migration with IIS 7.
To run as intended, legacy code may require classic mode. The following areas are affected by upgrading from classic to integrated mode:
Configuration
Web.config files may need the following entry to disable migration error message:
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
HttpRuntime change notification parameters are ignored for web.config files
Certain configuration error conditions in web.config files result in IIS configuration errors, not ASP.NET configuration errors
Authentication and authorization
Integrated mode does not provide user principal/impersonation token until PostAuthenticateRequest
Impersonate identity is not correct using FormsAuthentication
Different windows identity exists for form-based authentication
FileAuthorizationModule.CheckFileAccessForUser always returns 'True'
Large, valid forms auth tickets (length <= 4096 bytes) in query string are rejected
PassportAuthentication is not supported
URL validation
The "+" character is rejected in URL
Headers
IIS rejects new lines in response headers, even when ASP.NET enableHeaderChecking is set to false
Content-type empty response is no longer surpressed
ASP.NET request timeout is applied multiple times during the request, allowing the request to execute longer
General
Application queues are not used
HttpContext.Rewrite performs a child request in Integrated mode
DefaultHttpHandler is not supported. Applications relying on sub-classes of DefaultHttpHandler will not be able to serve requests.
Trace settings are not transfered to Server.Transfer target page
It is possible to write to response an EndRequest after an exception has been formatted and written to the response
Modules, handlers and events
Both Sychnronous and asynchronous events fire for each module before the next module executes
Response headers are removed in Integrated mode after calling ClearHeader in a custom IHttpModule
The ordering of modules is reversed for PreSendRequestHeaders and PreSendRequestContent
A broken link is added to the page when Response.Transmit sends an empty file with image type
Default Authentication_OnAuthenticate event does not raise in Integrated mode