Search code examples
asp.net-core-mvc

MVC Core - What is the difference between UseIIS and UseIISIntegration


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


Solution

  • Before 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: