7.ASP.NET Core InProcess Hosting


這篇文章,我們一起學習ASP.NET Core InProcess Hosting.這篇文章主要討論下面幾個觀點:

  1. CreateDefaultBuilder方法執行什么任務?
  2. 什么是ASP.NET Core InProcess Hosting?
  3. 怎么使用InProcess hosting Model來托管ASP.NET Core應用程序
  4. InProcess Hosting在ASP.NET Core中是如何工作的

我們打開之前創建的空模板的ASP.NET Core項目,前面已經知道了ASP.NET Core創建了一個Program類,其中有一個Main方法。

image

當我們執行ASP.NET Core應用程序的時候,.NET運行時就會去尋找Main方法,Main方法是ASP.NET Core應用程序的入口。

在上面的圖片中,你可以發現,首先調用的是CreateHostBuilder方法,然后CreateHostBuilder調用Host類中靜態的CreateDefaultBuilder方法,也就是CreateDefaultBuilder方法創建了主機,托管了我們的ASP.NET Core 應用程序。

CreateDefaultBuilder方法做了哪些事情?

除了創建主機,CreateDefaultBuilder方法還做了下面幾件事情:

  1. 創建了Web服務器(后面文章會講到)
  2. 加載主機,並根據不同的配置資源,配置應用程序(后面馬上會講到)
  3. 配置日志(后面會說到)

我們來討論一下,CreateDefaultBuilder方法在配置創建web服務器的時候,做了哪些事情。從主機的觀點來看,一個ASP.NET Core應用程序可以有兩種托管方式,一種是InProcess托管,另外一種就是OutOfProcess托管。這篇文章將InProcess托管,后面會有文章講到OutOfProcess托管。

怎樣在ASP.NET Core中配置InProcess托管

為了配置InProcess托管,很簡單就是在項目文件中加上這個元素<AspNetCoreHostingModel>,並且寫上值【InProcess

image

當我們使用任何模板創建ASP.NET Core Web應用程序的時候,默認的就是在IIS中使用InProcess托管,或者IIS Express托管我們的程序。

從性能的的觀點來看,進程內托管模型比OutOfProcess托管模型提供了更高的請求吞吐量。在IIS中托管,使用的就是w3wp.如果使用IIS Express托管那么進程的名字就是iisexpress.

當我們運行程序,瀏覽器中看到的結果是:Hello World!

image

這是因為我們在Statrup中有下面的代碼:

image

為了能顯示進程的名字,需要這樣寫:System.Diagnostics.Process.GetCurrentProcess().ProcessName

image

然后運行,在瀏覽器中是這樣的:

image

這是因為我們默認使用Visual Studio運行程序的時候,選項是IISExpress

image

IIS Express是一個輕量級的,自托管的IIS,它簡化了Web應用程序的開發。最重要的一點需要記住:我們僅僅在開發階段使用IISExpress,在生產階段我們使用IIS。接下來的文章中,我將介紹如何在IIS中發布我們的ASP.NET Core應用程序。

OutOfProcess Hosting

在OutOfProcess hosting中有兩種web服務器:

  1. 一個是內部服務器
  2. 還有一個就是外部服務器

內部服務器就是Kestrel,外部服務器就是IISNginx或者Apache

在InProcess 托管模型中,僅僅只有一個web服務器,也就是IIS。所以在InProcess 托管模型中,我們不會存在在外部服務器和內部服務器之間通訊導致的性能損耗。這也就是InProcess模型比OutOfProcess模型高的多的請求吞吐量的原因。

InProcess-Hosting-in-ASP.NET-Core-768x320

在接下來的文章中,我將會講到ASP.NET Core應用程序中的 Kestrel Web服務器。這篇文章向大家解釋了ASP.NET Core InProcess Hosting托管模型。希望能幫到你!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM