ASP.NET Core InProcess Hosting

ASP.NET Core InProcess Hosting Model

In this article, I am going to discuss the ASP.NET Core InProcess Hosting Model in detail. Please read our previous article before proceeding to this article where we discussed the ASP.NET Core Main method. As part of this article, we are going to discuss the following pointers in detail.

  1. What are the Tasks performed by CreateDefaultBuilder() method?
  2. What is InProcess hosting in ASP.NET Core?
  3. How to Configure InProcess hosting in ASP.NET Core?
  4. How to host ASP.NET Core Application using InProcess hosting Model?
  5. What happens when we set the Hosting model as InProcess?
  6. How does the InProcess hosting work in ASP.NET Core?
  7. What is IIS Express?
  8. 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 article. 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.

ASP.NET Core InProcess Hosting Model

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

  1. Setting up the webserver (will discuss in this article)
  2. Loading the host and application configuration from various configuration sources (will discuss in our upcoming articles)
  3. Configuring logging (will discuss in our upcoming articles)

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 article, we are going to discuss the InProcess hosting model and in a later article, we will discuss the OutOfProcess 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 articles, we will discuss the Out Of Process hosting model.

What are the Tasks performed by CreateDefaultBuilder() method?

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 <AspNetCoreHostingModel> element to the application project file with a value of InProcess. To do so, just right-click on your application from the solution explorer and then click on the “Edit Project File” option from the context menu as shown in the below code.

How to Configure InProcess hosting in ASP.NET Core?

Once you open the Application Project file then modify it as shown below. As you can see, here we add <AspNetCoreHostingModel> element and set its value to InProcess. The order possible value for this element is OutOfProcess.

What happens when we set the Hosting model as InProcess?

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 article.

The process name that will be used to execute the application is w3wp in the case of IISSimilarly, if it is IIS Express then the process name will be iisexpress.

Let’s Confirm this:

Now if you will run the application, then you will see the following hello world message in the browser.

ASP.NET Core InProcess Hosting Model

You are getting the above message from the following Startup class

ASP.NET Core InProcess Hosting Model

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 article, we will discuss the Startup class in detail. For now, just copy-paste code.

namespace FirstCoreWebApplication
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Worker Process Name : " + System.Diagnostics.Process.GetCurrentProcess().ProcessName);
                });
            });
        }
    }
}

Now when we run the application from visual studio, and it should display the message in the browser as shown below.

IIS Express in ASP.NET Core

This is because by default Visual Studio uses IISExpress when we run an application as shown in the below image.

What is IIS Express?

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 article, 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

  1. An internal web server and
  2. One external web server.

The internal web server is called Kestrel and the external web server can be IISNginx, 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.

Why InProcess Hosting Gives Better Performance that the OutOfProcess Hosting Model?

In the next article, I am going to discuss the Kestrel Web Server in ASP.NET Core application in detail. Here, in this article, I try to explain the ASP.NET Core InProcess Hosting in detail. I hope this  ASP.NET Core InProcess Hosting article will help you to understand the ASP.NET Core InProcess Hosting Model. 

5 thoughts on “ASP.NET Core InProcess Hosting”

Leave a Reply

Your email address will not be published. Required fields are marked *