In-process hosting runs an ASP.NET Core app in the same process as its IIS worker process. In-process hosting provides improved performance over out-of-process hosting because requests arent proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine.
ASP.NET Core InProcess Hosting Model
In this Video, I am going to discuss the ASP.NET Core InProcess Hosting Model in detail. Please read our previous Video before proceeding to this Video where we discussed the. As part of this Video, we are going to discuss the following pointers in detail.
- What are the Tasks performed by CreateDefaultBuilder() method?
- What is InProcess hosting in ASP.NET Core?
- How to Configure InProcess hosting in ASP.NET Core?
- How to host ASP.NET Core Application using InProcess hosting Model?
- What happens when we set the Hosting model as InProcess?
- How does the InProcess hosting work in ASP.NET Core?
- What is IIS Express?
- Why InProcess Hosting Gives Better Performance that the OutOfProcess Hosting Model?
We are going to work with the same application that we created in our previous Video. As we already discussed when we create an ASP.NET Core web application, then the ASP.NET Core framework creates the following Program class with the Main method for us.
When we execute an ASP.NET core application then the .NET Core runtime looks for the Main() method. The Main() method is the entry point for the .net core application to execute.
As you can see from the above image the Main() method of the Program class calls the static CreateHostBuilder() method. Then the CreateHostBuilder() method calls the static CreateDefaultBuilder()method on the Host class. The CreateDefaultBuilder() method sets the web host which will host our application with default preconfigured configurations.
What are the Tasks performed by CreateDefaultBuilder() method?
As part of setting the web host, the CreateDefaultBuilder() method does several things. Some of them are as follows
- Setting up the webserver (will discuss in this Video)
- Loading the host and application configuration from various configuration sources (will discuss in our upcoming Videos)
- Configuring logging (will discuss in our upcoming Videos)
Let us discuss what exactly the CreateDefaultBuilder() method does to configure and set up the webserver. From a hosting point of view, an ASP.NET core Web application can be hosted in two ways i.e. InProcess hosting or OutOfProcess hosting.
Here in this Video, we are going to discuss the InProcess hosting model and in a later Video, we will discuss the hosting model.
Note: When we create a new ASP.NET Core Web application by using any template, by default the project file is created with InProcess hosting which is used for hosting the application in IIS or IIS Express scenarios.
How to verify this?
In order to verify the same, open the project properties. Right-click on your project and select the properties option from the context menu. Once you open the properties window, then select the Debug and have a look at the value of the Hosting Model drop-down list as shown in the below image. The drop-down list contains three values i.e. Default (InProcess), InProcess, and Out Of Process. In our upcoming Videos, we will discuss the Out Of Process hosting model.
This Confirm that by default it uses In Process hosting model.
How to Configure InProcess hosting in ASP.NET Core?
To configure the InProcess hosting for ASP.NET Core Web application there is only one simple setting, just add the
Once you open the Application Project file then modify it as shown below. As you can see, here we add
What happens when we set the Hosting model as InProcess?
In case of InProcess hosting (i.e. when the CreateDefaultBuilder() sees the value as InProcess for the AspNetCoreHostingModel element in the project file), behind the scene the CreateDefaultBuilder() method internally calls the UseIIS() method. Then host the application inside the IIS worker process (i.e. w3wp.exe for IIS and iisexpress.exe for IISExpress).
From the performance point of view, the InProcess hosting model delivers significantly higher request throughput than the OutOfProcess hosting model. Why we will discuss this at the end of this Video.
The process name that will be used to execute the application is w3wp in the case of IIS. Similarly, if it is IIS Express then the process name will be iisexpress.
Lets Confirm this:
Now if you will run the application, then you will see the following hello world message in the browser.
You are getting the above message from the following Startup class
To display the process name in the browser you need to use the System.Diagnostics.Process.GetCurrentProcess().ProcessName within the Startup as shown below. In our upcoming Video, we will discuss the Startup class in detail. For now, just copy-paste code.
Now when we run the application from visual studio, and it should display the message in the browser as shown below.
This is because by default Visual Studio uses IISExpress when we run an application as shown in the below image.
What is IIS Express?
The IIS Express is a lightweight, self-contained version of IIS. It is optimized for web application development. The most important point that you need to remember is we use IIS Express only in development, not on production. In production we generally use IIS. In a later Video, we will discuss how to deploy an ASP.NET Core application on IIS.
Why InProcess Hosting Gives Better Performance that the OutOfProcess Hosting Model?
In the case of OutOfProcess hosting, there are 2 web servers
- An internal web server and
- One external web server.
The internal web server is called and the external web server can be IIS, Nginx, or Apache. With the InProcess hosting model, there is only one web server i.e. IIS. So, in the case of the InProcess hosting model, we do not have the performance penalty for navigating the requests between the internal and external web servers. This is the reason why the InProcess hosting model delivers significantly higher request throughput than the OutOfProcess hosting model.