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
Until ASP.NET Core 2.2, ASP.NET Core was hosted out-of-process in IIS, meaning we had two processes for an application:
w3wp.exe
, the IIS process; anddotnet.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:
CreateDefaultBuilder
method will call the appropriate method by itself; see https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2#enable-the-iisintegration-components