這篇文章,我們一起學習ASP.NET Core InProcess Hosting.這篇文章主要討論下麵幾個觀點:CreateDefaultBuilder方法執行什麼任務?什麼是ASP.NET Core InProcess Hosting?怎麼使用InProcess hosting Model來托管... ...
這篇文章,我們一起學習ASP.NET Core InProcess Hosting.這篇文章主要討論下麵幾個觀點:
- CreateDefaultBuilder方法執行什麼任務?
- 什麼是ASP.NET Core InProcess Hosting?
- 怎麼使用InProcess hosting Model來托管ASP.NET Core應用程式
- InProcess Hosting在ASP.NET Core中是如何工作的
我們打開之前創建的空模板的ASP.NET Core項目,前面已經知道了ASP.NET Core創建了一個Program類,其中有一個Main方法。
當我們執行ASP.NET Core應用程式的時候,.NET運行時就會去尋找Main方法,Main方法是ASP.NET Core應用程式的入口。
在上面的圖片中,你可以發現,首先調用的是CreateHostBuilder方法,然後CreateHostBuilder調用Host類中靜態的CreateDefaultBuilder方法,也就是CreateDefaultBuilder方法創建了主機,托管了我們的ASP.NET Core 應用程式。
CreateDefaultBuilder方法做了哪些事情?
除了創建主機,CreateDefaultBuilder方法還做了下麵幾件事情:
- 創建了Web伺服器(後面文章會講到)
- 載入主機,並根據不同的配置資源,配置應用程式(後面馬上會講到)
- 配置日誌(後面會說到)
我們來討論一下,CreateDefaultBuilder方法在配置創建web伺服器的時候,做了哪些事情。從主機的觀點來看,一個ASP.NET Core應用程式可以有兩種托管方式,一種是InProcess托管,另外一種就是OutOfProcess托管。這篇文章將InProcess托管,後面會有文章講到OutOfProcess托管。
怎樣在ASP.NET Core中配置InProcess托管
為了配置InProcess托管,很簡單就是在項目文件中加上這個元素<AspNetCoreHostingModel>,並且寫上值【InProcess】
當我們使用任何模板創建ASP.NET Core Web應用程式的時候,預設的就是在IIS中使用InProcess托管,或者IIS Express托管我們的程式。
從性能的的觀點來看,進程內托管模型比OutOfProcess托管模型提供了更高的請求吞吐量。在IIS中托管,使用的就是w3wp.如果使用IIS Express托管那麼進程的名字就是iisexpress.
當我們運行程式,瀏覽器中看到的結果是:Hello World!
這是因為我們在Statrup中有下麵的代碼:
為了能顯示進程的名字,需要這樣寫:System.Diagnostics.Process.GetCurrentProcess().ProcessName
然後運行,在瀏覽器中是這樣的:
這是因為我們預設使用Visual Studio運行程式的時候,選項是IISExpress
IIS Express是一個輕量級的,自托管的IIS,它簡化了Web應用程式的開發。最重要的一點需要記住:我們僅僅在開發階段使用IISExpress,在生產階段我們使用IIS。接下來的文章中,我將介紹如何在IIS中發佈我們的ASP.NET Core應用程式。
OutOfProcess Hosting
在OutOfProcess hosting中有兩種web伺服器:
- 一個是內部伺服器
- 還有一個就是外部伺服器
內部伺服器就是Kestrel,外部伺服器就是IIS、Nginx或者Apache。
在InProcess 托管模型中,僅僅只有一個web伺服器,也就是IIS。所以在InProcess 托管模型中,我們不會存在在外部伺服器和內部伺服器之間通訊導致的性能損耗。這也就是InProcess模型比OutOfProcess模型高的多的請求吞吐量的原因。
在接下來的文章中,我將會講到ASP.NET Core應用程式中的 Kestrel Web伺服器。這篇文章向大家解釋了ASP.NET Core InProcess Hosting托管模型。希望能幫到你!