2016-02-25 183 views
55

什麼是kestrel web服務器,它與IIS/IIS Express有什麼關係?什麼是Kestrel(vs IIS/Express)

我來自在IIS Express上開發應用程序並將它們託管在IIS Web服務器上。使用ASP.NET Core我對Microsoft.AspNetCore.Server.Kestrel有依賴性,我的啓動有.UseServer("Microsoft.AspNetCore.Server.Kestrel")。但是當我運行我的網站時,我仍然在系統托盤中獲得IIS Express圖標。有人問我是否使用IIS Express或Kestrel,但我不知道該說什麼!

我沒有任何跨平臺的要求,因爲我在Azure上的個人電腦和主機上開發,所以如果我甚至need Kestrel,我感到困惑,但它似乎並沒有替代品 - 即使是最簡單的樣品使用Kestrel。

+0

當您對這項新技術有疑問時,請從相關項目的GitHub頁面開始,查看他們的Wiki。你可以通過這個[Servers wiki頁面](https://github.com/aspnet/Home/wiki/Servers)找到ASP.NET的repo。 – mason

+2

當然,那麼你遇到了像'這個文件現在已經過時的東西。有關最新的ASP.NET Core文檔,請訪問:http:// docs.asp.net'。哎呀。 – hacksalot

回答

56

什麼是紅隼

這是一個完全成熟的Web服務器。您可以使用Kestrel運行您的ASP.NET Core應用程序。

但是當我運行我的網站,我仍然得到IIS快遞圖標在系統托盤

在ASP.NET應用程序中,可能是在wwwroot目錄,你會看到一個網頁。配置包含此:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<system.webServer> 
    <handlers> 
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/> 
    </handlers> 
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/> 
</system.webServer> 
</configuration> 

這是HttpPlatformHandler。從本質上講,這是做什麼的,都是全部請求凱斯特雷爾。 IIS Express(和IIS)就不會再運行ASP.NET了。相反,他們將充當代理人,只是通過Kestrel來回傳遞請求和響應。還有使用IIS的優勢,特別是它給你的安全配置,內核級高速緩存等

+0

使用ASP.Net核心時,究竟是什麼發生了什麼的優秀介紹https://youtu.be/e2qZvabmSvo – user99513

+0

由於引入了ASP.NET Core Module(這個答案有點過時了,而不是HttpPlatformHandler)。我提供了更多故事和相關產品的備選答案。 –

1

從MS文檔在: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

紅隼是ASP一個跨平臺的Web服務器。 NET Core基於 libuv,一種跨平臺的異步I/O庫。 Kestrel是ASP.NET Core項目模板中默認包含的Web 服務器。

您可以單獨使用Kestrel或使用反向代理服務器,例如 IIS,Nginx或Apache。反向代理服務器接收到來自Internet的HTTP請求 ,並在處理了一些初步的 後,將它們轉發給Kestrel。

13

我想提供一個替代的答案,以及一些歷史記錄,以便您可以理解爲什麼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支持。

嗯,很長,但我希望我把所有必要的作品放在一起,你喜歡閱讀它。