MVC Core - What is the difference between UseIIS and UseIISIntegration

desmati picture desmati · Apr 14, 2019 · Viewed 8.5k times · Source

Looking at the codes, they have the same comments, suggesting that they do the same thing:

/// <summary>
/// Configures the port and base path the server should listen on when 
/// running behind AspNetCoreModule. The app will also be configured 
/// to capture startup errors.
/// </summary>

UseIIS is in Microsoft.AspNetCore.Server.IIS package, while UseIISIntegration is in Microsoft.AspNetCore.Server.IISIntegration.

What is the difference between the two? When do you need to use one versus the other? (or maybe both?)

UPDATE: There is a similar question on github, But there is no helpful answer there: https://github.com/aspnet/AspNetCore/issues/6197

Answer

Micka&#235;l Derriey picture Mickaël Derriey · Apr 15, 2019

Until ASP.NET Core 2.2, ASP.NET Core was hosted out-of-process in IIS, meaning we had two processes for an application:

  1. w3wp.exe, the IIS process; and
  2. dotnet.exe, the ASP.NET Core process, where the Kestrel web server was started.

This means that IIS and Kestrel were communicating between those two processes.

For this scenario, you would use UseIISIntegration.


ASP.NET Core 2.2 introduced in-process hosting, where your ASP.NET Core app is ran inside of the IIS w3wp.exe process, removing the need for the Kestrel web server, in which case you want to use UseIIS.

Notes: