這篇文章中,我將詳細介紹ASP.NET Core OutOfProcess Hosting模型。強烈推薦你去看看我之前寫的ASP.NET Core InProcess以及ASP.NET Core中的 Kestrel Web伺服器。這篇文章我將向大家詳細介紹下麵幾個問題:怎樣在ASP.NET Core... ...
這篇文章中,我將詳細介紹ASP.NET Core OutOfProcess Hosting模型。強烈推薦你去看看我之前寫的ASP.NET Core InProcess以及ASP.NET Core中的 Kestrel Web伺服器。這篇文章我將向大家詳細介紹下麵幾個問題:
- 怎樣在ASP.NET Core中配置OutOfProcess Hosting?
- 什麼是OutOfProcess Hosting?
- ASP.NET Core中OutOfProcess Hosting是如何工作的?
- 我們能否,不使用內置的Kestrel Web伺服器來運行ASP.NET Core應用程式?
- 如果Kestrel本身可以作為web伺服器使用,可以直接處理傳入的HTTP請求,那麼我們為什麼需要反向代理伺服器呢?
在開始學習OutOfProcess Hosting之前,我們先回顧一下InProcess Hosting。
ASP.NET Core InProcess Hosting
在前面的文章中,已經瞭解到,為了配置InProcess Hosting,我們需要在項目文件中加入下麵的代碼:
在ASP.NET Core的InProcess Hosting模型下,我們的應用程式是托管在IIS工作進程下的(也就是w3wp.exe,如果是使用IIS的話,如果使用的是IIS Express那麼工作進程就是iisexpress.exe).你需要牢記的一點就是:在InProcess 模型下,我們只有一個Web伺服器,也就是IIS 伺服器。
怎樣在ASP.NET Core中配置OutOfProcess Hosting?
我們可以有兩種方式,來配置OutOfProcess Hosting
方式一:
在項目文件下,添加一個AspNetCoreHostingModel節點,值填寫OutOfProcess,:
方式二:
預設的Hosting方式就是OutOfProcess hosting,這也就意味著,你去掉AspNetCoreHostingModel節點,預設就是OutOfProcess Hosting了。
在ASP.NET Core中OutOfProcess Hosting
在OutOfProcess Hosting模型中,有兩種Web伺服器:
- 內置的web伺服器就是Kestrel
- 另外的外部伺服器就是IIS、Apache、以及Nginx
您需要記住的最重要的一點是,取決於您如何使用OutOfProcess托管模型運行應用程式,外部web伺服器可能會被使用,也可能不會被使用。
我們已經知道Kestrel web伺服器是一個跨平臺的web伺服器,並且是嵌入到ASP.NET Core的應用程式中的。所以當你使用OutOfProcess 托管模型的時候,Kestrel可能有以下幾種方式使用:
方式一:
我們可以使用Kestrel Web伺服器作為面向internet的Web伺服器,它將直接處理傳入的HTTP請求。在這個場景中,只有Kestrel伺服器被使用了,也就是外部伺服器沒有被使用。所以當我們使用.NET Core CLI運行ASP.NET Core應用程式的時候,僅僅只有Kestrel伺服器被使用了,用來處理HTTP請求。
方式二:
Kestrel Web伺服器還可以與反向代理伺服器(如IIS、Apache或Nginx)組合使用。那麼你肯定有這樣的疑問:如果Kestrel本身可以作為web伺服器使用,可以直接處理傳入的HTTP請求,那麼我們為什麼需要反向代理伺服器呢?
這是因為反向代理伺服器提供了一個額外的配置和安全層,這是Kestrel伺服器無法提供的。同樣反向代理伺服器,還維護著負載均衡。所以使用Kestrel伺服器和反向代理伺服器是一個很好的選擇。
因此,當我們使用Kestrel伺服器和反向代理伺服器時,反向代理伺服器將接收來自客戶機的傳入HTTP請求,然後將該請求轉發到Kestrel伺服器進行處理。一旦Kestrel伺服器處理了該請求,它就會將響應發送回反向代理伺服器,然後反向代理伺服器通過internet將響應發送回被請求的客戶機,如下圖所示。
在後面的文章中,我將介紹我們怎麼把ASP.NET Core應用程式發佈到IIS,並且把IIS作為一個反向代理伺服器。
當我們直接,在Visual Studio中運行程式的時候,Visual Studio,預設使用的是IIS Express。現在我們可以改變項目文件:
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
由於我們已經配置了進程外托管模型,現在IIS Express充當反向代理伺服器,而Kestrel充當內部web伺服器。
現在,IIS Express接收傳入的HTTP請求,然後將其轉發到Kestrel Web伺服器進行處理。Kestrel Web伺服器處理請求並將響應發送回IIS Express,而IIS Express又將響應發送回客戶機,即瀏覽器。
現在運行應用程式,您將看到工作進程為dotnet。因此,當您使用Out of Process Hosting模型時,Kestrel Web伺服器將托管應用程式並處理請求,而不管您是否使用反向代理伺服器。
還有一個很重要的需要記住:當你使用.NET Core CLI運行程式的時候,然後在預設情況下,它會忽略你在應用程式的項目文件中指定的主機設置,即csproj文件。在這種情況下,AspNetCoreHostingModel元素的值將被忽略。
.NET Core CLI總是使用OutOfProcess托管模型,並且Kestrel是web伺服器,它將會托管ASP.NET Core應用程式,並且處理HTTP請求。
我們可以不使用內置的Kestrel伺服器運行ASP.NET Core應用程式麽?
答案是肯定可以的,當我們使用InProcess hosting模型的時候,應用程式是托管在IIS進程中的也就是w3wp.exe或者iisexpress.exe中。這也就是意味著,在InProcess模型中,我們是沒有使用Kestrel伺服器的。
在下麵的文章中,我將帶領大家學習ASP.NET Core中的 launchSetting.json文件。這篇文章中,我已經詳細介紹了OutOfProcess 托管模型,希望能幫到你。