我想提供一個替代的答案,以及一些歷史記錄,以便您可以理解爲什麼Kestrel會來,即使您只使用Windows和IIS。
在ASP.NET開發的非常2000年初前年,很顯然,微軟創建了兩件承載ASP.NET Web窗體應用程序,
- 卡西尼,後來成爲ASP.NET開發服務器Visual Studio中。它是一個完全託管的Web服務器,用C#編寫,基於
HttpListener
。當然,由於它僅用於開發,許多功能從未實現過。當微軟公開提供卡西尼的源代碼時,有第三方派生代碼庫並增加了更多功能,這些功能啓動了卡西尼家族。
- IIS對IIS的支持(修訂版1)。由於當時IIS是4.0和5.0/5.1,它與應用程序池沒有任何關係,所以ASP.NET甚至有自己的工作進程(
aspnet_wp.exe
)。
因此,要開發一個Web應用程序,您使用Cassini,並部署您使用IIS。
引入在IIS 6應用程序池的需要上ASP.NET側一些變化,所以aspnet_wp.exe
變得過時並aspnet_isapi.dll
取代。這可以看作是IIS修訂版2上的ASP.NET支持。因此,ASP.NET應用程序被託管在IIS工作進程w3wp.exe
中。
在IIS 7及以上版本中引入集成管道需要進一步更改,它們將aspnet_isapi.dll
替換爲webengine4.dll
。這可以看作是IIS版本3上的ASP.NET支持。ASP.NET和IIS管道是統一的。
你可以看到ASP.NET已經成爲IIS更加複雜和緊密集成的,所以卡西尼開始顯現出它的年齡,並逐步由IIS快遞(用戶模式精簡版IIS)所取代。
因此,在很多情況下,當人們指責ASP.NET很慢時,他們應該將事實歸咎於ASP.NET。沒有ASP.NET的IIS本身是非常快速和穩定的,而ASP.NET並沒有考慮到足夠的性能指標(因爲WebForms關注很多生產力和RAD)。
然後在2014年11月,ASP.NET 5(後來更名爲ASP.NET Core)宣佈併成爲跨平臺技術。顯然,微軟無法將其綁定到IIS。因此,新設計必須考慮使用nginx/Apache或其他Web服務器的macOS和Linux。
我想很多人會同意微軟從NodeJS學到很多東西,然後設計和開發Kestrel(最初基於libuv
,但很快可能會轉向其他技術)。它最初是一個像Cassini這樣輕量級的Web服務器,但後來增加了更多功能(如另一個回答評論,更多的功能可以被視爲完整的Web服務器)。雖然完全託管(存在一些本地依賴),但它不再是像卡西尼這樣的玩具網絡服務器。
那麼爲什麼你不能只使用紅隼?爲什麼仍需要IIS Express和潛在的IIS,nginx或Apache?這主要是今天互聯網實踐的結果。大多數網站使用反向代理從Web瀏覽器接收請求,然後在後臺轉發到應用程序服務器。
- IIS快遞/ IIS/nginx的/阿帕奇是反向代理服務器
- 隼/的NodeJS/Tomcat和等都是應用服務器
另一個答案已經顯示一個鏈接到微軟的文檔,所以你可以看看。
微軟開發HttpPlatformHandler最初是爲了使IIS成爲一個足夠好的Java/Python反向代理等,因此計劃將其用於ASP.NET Core。問題在開發過程中開始出現,所以後來微軟專門爲ASP.NET Core製作了ASP.NET Core Module。這是IIS版本4上的ASP.NET支持。
嗯,很長,但我希望我把所有必要的作品放在一起,你喜歡閱讀它。
當您對這項新技術有疑問時,請從相關項目的GitHub頁面開始,查看他們的Wiki。你可以通過這個[Servers wiki頁面](https://github.com/aspnet/Home/wiki/Servers)找到ASP.NET的repo。 – mason
當然,那麼你遇到了像'這個文件現在已經過時的東西。有關最新的ASP.NET Core文檔,請訪問:http:// docs.asp.net'。哎呀。 – hacksalot