Explain InProcess and OutOfProcess ASP.NET Core Hosting?

In general, there are two modes in which an ASP.NET Core application can run, when deployed in IIS.

In-Process model:

  • The application is hosted inside the IIS process and all the functioning happens from here. This is similar to any other general website deployed in IIS (through binaries).

Out-Of-Process model:

  • The application resides within the Kestrel Shell layer, and the IIS server acts as a reverse-proxy - all the requests travel from within the IIS Web server which is available to the outside internet, and the proccessing happens within the Kestrel.

How do you specify?

  • To explicitly specify the mode we want our application to run, we provide it inside our Web project CSPROJ file. It can look something like this
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
  </PropertyGroup>

  .... other config ....
</Project>
  • If we don't specify the type of hosting model we're into, the ASP.NET Core bundle hosts the application in an In-Process manner.