WindowsとIISのみを使用している場合でも、Kestrelが登場する理由を理解できるように、いくつかの履歴を含む別の答えを提供したいと思います。
2000年より前のASP.NET開発の最初の段階で、MicrosoftはASP.NET WebFormsアプリをホストするための2つの要素を作成しました。
- Cassiniは、後にVisual StudioのASP.NET開発サーバーになりました。これは、に基づいてC#で記述された完全に管理されたWebサーバーです
HttpListener
。もちろん、それは開発専用であるため、多くの機能が実装されることはありませんでした。マイクロソフトがCassiniのソースコードを一般に公開したため、コードベースを分岐してより多くの機能を追加したサードパーティが存在し、Cassiniファミリーが始まりました。
- IISでのASP.NETサポート(リビジョン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と緊密に統合されているので、Cassiniはその古さを示し始め、次第にIIS Express(ユーザーモードライトIIS)に置き換わりました。
したがって、多くの場合、IISが遅いと非難するときは、実際にはASP.NETを非難する必要があります。ASP.NETのないIIS自体はかなり高速で安定していますが、ASP.NETは十分なパフォーマンスメトリックを考慮して開発されていません(WebFormsはかなりの生産性とRADに焦点を当てているため)。
その後、2014年11月にASP.NET 5(後でASP.NET Coreに名前が変更されました)が発表され、クロスプラットフォームテクノロジーになりました。明らかに、Microsoftは、Windows、macOS、およびLinuxをサポートする新しい設計を必要としており、IIS以外のすべての主要なWebサーバー、nginx / Apache(または他のWebサーバー)を検討する必要があります。
MicrosoftがNodeJSからかなりのことを学び、Kestrelを設計および開発したことに多くの人が同意すると思います(libuv
最初はベースでしたが、すぐに他のテクノロジーに移行する可能性があります)。最初はカッシーニのような軽量のWebサーバーですが、後になってより多くの機能が追加されます(別の回答がコメントしたように、はるかに多くの機能があるため、完全なWebサーバーとして扱うことができます)。完全に管理されていますが(いくつかのネイティブな依存関係が存在します)、CassiniのようなおもちゃのWebサーバーではなくなりました。
では、なぜKestrelを使用できないのでしょうか。IIS ExpressおよびIIS、nginx、Apacheがまだ必要なのはなぜですか?これは主に、今日のインターネット慣行の結果です。ほとんどのWebサイトは、リバースプロキシを使用してWebブラウザーから要求を受け取り、バックグラウンドでアプリケーションサーバーに転送します。
- IIS Express / IIS / nginx / Apacheはリバースプロキシサーバーです
- Kestrel / NodeJS / Tomcatなどがアプリケーションサーバーです。
別の回答には、Microsoftのドキュメントへのリンクがすでに示されているので、見てみることができます。
Microsoftは、最初にHttpPlatformHandlerを開発して、IISをJava / Pythonなどの十分なリバースプロキシにするため、ASP.NET Coreで使用することを計画しました。開発中に問題が発生し始めたため、Microsoftは後にASP.NET Core専用のASP.NET Coreモジュールを作成しました。これは、IISリビジョン4でのASP.NETサポートです。
ASP.NET Core 2.2以降、IIS用ASP.NET Coreモジュール(バージョン2)はw3wp.exe
、ASP.NET 2.x / 4.xと非常によく似たIISワーカープロセス()内で.NET Core環境をホストできます。このモードは「IISインプロセスホスティング」と呼ばれます。IISリビジョン5でのASP.NETサポートと見なすことができます。
まあ、かなり長いですが、私は必要なすべての作品をまとめて、あなたがそれを楽しんでくれることを願っています。