Web應用程序中如何使用Asp.Net核心託管模型?



Asp.net核心對託管模型進行了重大改進。期望在早期版本中通過代理Web服務器(例如Windows上的IIS,Apache或NGINX)託管Asp.net Core Web應用程序。但是,新的Asp.net core 2.2允許直接在IIS中的Windows中託管Asp.net應用程序,而無需外部服務器。因此,使用簡單的進程內託管機制可以提高吞吐量。

ASP.NET Core中的託管模型

ASP.NET是Microsoft的一項技術,可讓您在Web服務器端創建動態頁面。

託管ASP.NET與基於Windows的軟件以及操作系統本身完全集成。該技術被認為是非常安全可靠的,並且易於使用。它主要用於開發應用內產品。

ASP.NET Core中的託管模型有兩種類型,即進程內託管和進程外託管。在ASP.Net Core 2.2之前,只有一種託管模型,即進程外託管,但由於性能原因,引入了Asp.net core 2.2版本的進程內託管模型。

Asp.net Core中進程內託管模型的介紹

以前的ASP.NET Core版本需要使用通過IIS代理的進程外託管模型在IIS中託管應用程序。命中IIS或IIS Express的請求將轉發到Kestrel Web Server中運行的ASP.NET Core Web應用程序。但是,在新的進程內託管中,僅一台服務器用於託管,如IIS,Nginx或Linux。這意味著,不是將請求轉發到Kestrel,而是直接在IIS應用程序池內部託管了一個新的Web服務器實現(IISHttpServer),它將為請求提供服務。在ASP.NET Core 3.1中,每當您使用現有模板開發新應用程序時,進程內託管模型都將用作默認模型。

顯然,與“進程外”託管模型相比,此託管模型具有更高的吞吐量和性能增強。

進程外託管模型

在進程外託管模型中,您可以將Kestrel服務器直接用作面向用戶請求的服務器,也可以將應用程序部署到IIS中,IIS將充當代理服務器並將請求發送到內部Kestrel服務器。在這種託管模型中,您有兩個託管選項,即使用Kestrel和Proxy Server:

1.使用紅est

在這種情況下,Kestrel本身就充當邊緣服務器,它直接服務器用戶請求,這意味著只能將Kestrel服務器用於該應用程序。

2.使用代理服務器

由於Kestrel服務器的限制,因此不能在所有應用程序中使用它。在這種情況下,必須使用功能強大的服務器,例如IIS,Apache或NGINX。因此,在這種情況下,該服務器充當備用代理服務器,它將把每個請求重定向到運行應用程序的內部Kestrel服務器。在這裡,兩個服務器(例如IIS和Kestrel)正在運行。

對於在.NET Core 2.2早期版本中實現的所有應用程序,此託管模型是默認模型。使用這種類型的局限性之一,例如性能下降。

最後的想法:

根據事實,大多數ASP.Net Web開發公司當然都希望使用In-Process託管模型。由於它消耗較少的資源並提供良好的性能。由於不需要為Kestrel進行額外的處理,並且還避免了IIS與Kestrel之間的額外通信。但是,在某些情況下,您可能希望選擇進程外託管,例如在Windows和Linux中託管相同的Web應用程序。在談論在其他平台上託管應用程序時,Kestrel是用於處理所有平台上的HTTP請求的主要機制。

但是,除非對Kestrel有非常特定的要求,否則在IIS上運行In-Process是最好的方法。

主要圖片來源:Farzad Nazifi在Unsplash上​​拍攝的照片




評論 (0)

發表評論