Bazı geçmişe sahip alternatif bir cevap sunmak istiyorum, böylece sadece Windows ve IIS kullansanız bile Kestrel'in neden geldiğini anlayabilirsiniz.
2000 yılından önce ASP.NET geliştirmenin en başında, açıkça Microsoft, ASP.NET WebForms uygulamalarını barındırmak için iki parça oluşturdu,
- Cassini, daha sonra Visual Studio'da ASP.NET Geliştirme Sunucusu oldu. C # ile yazılmış tamamen yönetilen bir web sunucusudur
HttpListener
. Tabii ki, sadece geliştirme amaçlı olduğu için, birçok özellik asla uygulanmadı. Microsoft, Cassini'nin kaynak kodunu herkes için kullanılabilir hale getirdiğinden, kod tabanını çatallandıran ve Cassini ailesini başlatan daha fazla özellik ekleyen üçüncü taraflar var.
- IIS üzerinde ASP.NET desteği (düzeltme 1). IIS 4.0 ve 5.0 / 5.1 olduğundan, uygulama havuzları gibi bir şeye sahip olmadığından, ASP.NET'in kendi çalışan işlemi (
aspnet_wp.exe
) bile vardır .
Bir web uygulaması geliştirmek için Cassini, dağıtmak için IIS kullanırsınız.
IIS 6'da uygulama havuzlarının kullanıma girmesi ASP.NET tarafında bazı değişiklikler yapılmasını gerektirdi, bu nedenle aspnet_wp.exe
eski ve yerini aldı aspnet_isapi.dll
. Bu, IIS revizyon 2'de ASP.NET desteği olarak görülebilir. Bu nedenle ASP.NET uygulamaları IIS çalışan işlemlerinde barındırılmaktadır w3wp.exe
.
İkame IIS 7 ve gerekli olan diğer değişiklikler yukarıda entegre boru hattı giriş aspnet_isapi.dll
ile webengine4.dll
. Bu, IIS revizyon 3'te ASP.NET desteği olarak görülebilir. ASP.NET ve IIS boru hatları birleştirilir.
ASP.NET'in IIS ile çok daha karmaşık ve sıkı bir şekilde bütünleştiğini görebilirsiniz, bu nedenle Cassini yaşını göstermeye başladı ve yerini yavaş yavaş IIS Express (kullanıcı modu lite IIS) aldı.
Bu nedenle, birçok durumda, insanlar IIS'nin yavaş olduğunu suçladığında, aslında ASP.NET'i suçlamalıdır. ASP.NET olmadan IIS'nin kendisi oldukça hızlı ve istikrarlıdır, ASP.NET ise yeterli performans metrikleri göz önünde bulundurularak geliştirilmemiştir (WebForms oldukça fazla üretkenliğe ve RAD'a odaklandığı için).
Daha sonra Kasım 2014'te ASP.NET 5 (daha sonra ASP.NET Core olarak yeniden adlandırıldı) duyuruldu ve platformlar arası bir teknoloji haline geldi. Microsoft'un Windows, macOS ve Linux'u desteklemek için IIS'nin yanı sıra tüm büyük web sunucularının, nginx / Apache'nin (veya diğer web sunucularının) dikkate alınması gereken yeni bir tasarıma ihtiyacı olduğu açıktır.
Birçok kişinin Microsoft'un NodeJS'den çok şey öğrendiğini ve sonra Kestrel'i tasarladığını ve geliştirdiğini düşünüyorum ( libuv
başlangıçta dayanarak yakında diğer teknolojilere geçebilir). Başlangıçta Cassini gibi hafif bir web sunucusudur, ancak daha sonra daha fazla özellik eklenmektedir (yorumlanan başka bir cevap gibi, çok daha fazla özellik tam bir web sunucusu olarak değerlendirilebilir). Tam olarak yönetilmesine rağmen (bazı yerel bağımlılıklar mevcuttur), artık Cassini gibi bir oyuncak web sunucusu değildir.
Öyleyse neden Kestrel'i kullanmıyorsun? Neden IIS Express ve potansiyel olarak IIS, nginx veya Apache hala gereklidir? Bu öncelikle günümüzün internet uygulamasının bir sonucudur. Çoğu web sitesi, web tarayıcılarınızdan istek almak ve ardından arka planda uygulama sunucularına iletmek için ters proxy'ler kullanır.
- IIS Express / IIS / nginx / Apache, ters proxy sunuculardır
- Kestrel / NodeJS / Tomcat ve benzeri uygulama sunucuları
Başka bir yanıt zaten Microsoft belgelerine bir bağlantı gösterdi, böylece bir göz atabilirsiniz.
Microsoft, IIS'yi Java / Python ve benzeri için yeterince iyi bir ters proxy yapmak için başlangıçta HttpPlatformHandler geliştirdi, bu yüzden ASP.NET Core için kullanmayı planladı. Geliştirme sırasında sorunlar ortaya çıkmaya başladı, bu nedenle daha sonra Microsoft ASP.NET Core Modülünü özellikle ASP.NET Core için yaptı. Bu IIS revizyon 4'teki ASP.NET desteğidir.
ASP.NET Core 2.2'den başlayarak, IIS için ASP.NET Core Modülü (sürüm 2), w3wp.exe
ASP.NET 2.x / 4.x'e oldukça benzer şekilde IIS alt işlemi ( ) içinde .NET Core ortamını barındırabilir . Bu moda "IIS işlem içi barındırma" adı verilir . IIS revizyon 5'te ASP.NET desteği olarak düşünülebilir.
Oldukça uzun, ama umarım gerekli tüm parçaları bir araya getirdim ve okumaktan zevk alıyorsunuz.