Kerkenez Nedir (IIS / Express'e Karşı)


159

Kerkenez web sunucusu nedir ve IIS / IIS Express ile ilişkisi nedir?

IIS Express üzerinde uygulamalar geliştirip bir IIS web sunucusunda barındırmaktan geliyorum. ASP.NET Core ile bağımlılığım var Microsoft.AspNetCore.Server.Kestrelve başlangıçta var .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Ancak web sitemi çalıştırdığımda hala sistem tepsisindeki IIS Express simgesini alıyorum. Birisi bana IIS Express mi Kestrel mi kullandığımı sordu ve ne diyeceğimi bilmiyordum!

Bir PC'de geliştirdiğim ve Azure'da barındırdığım için platformlar arası gereksinimlerim yok, bu yüzden needKestrel bile kafam karıştı , ancak bir alternatif gibi görünmüyor - en basit örnekler bile Kestrel kullanıyor.


Bu yeni teknoloji hakkında bir sorunuz olduğunda, söz konusu projeler için GitHub sayfasında başlayın ve Wikis'lerine bakın. ASP.NET deposu için bu Sunucular wiki sayfasında çalışırsınız.
mason

11
Tabii ki, sonra gibi şeylerle karşılaşıyorsunuz This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net. Hata.

Yanıtlar:


115

Kerkenez nedir

Tam gelişmiş bir web sunucusudur. ASP.NET Core uygulamanızı sadece Kestrel kullanarak çalıştırabilirsiniz.

Ancak web sitemi çalıştırdığımda hala sistem tepsisindeki IIS Express simgesini alıyorum

ASP.NET uygulamanızda, muhtemelen wwwrootdizinde, bunu içeren bir web.config görürsünüz:

<?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>

Bu HttpPlatformHandler. Esasen, tüm talepleri Kestrel'e iletmektir. IIS Express (ve bu konuda IIS) artık ASP.NET'i kendileri çalıştırmaz. Bunun yerine, Kestrel'den gelen talepleri ve yanıtları basitçe ileten vekiller olarak hareket edecekler. IIS kullanmanın hala avantajları vardır, özellikle güvenlik yapılandırması, çekirdek düzeyinde önbellekleme vb.


5
ASP.Net çekirdeğini kullanırken kapakların altında tam olarak neler olduğuna mükemmel bir giriş youtu.be/e2qZvabmSvo
user99513

4
Bu yanıt, ASP.NET Core Modülünün (HttpPlatformHandler yerine) kullanılmasından dolayı biraz güncel değil. Ben de daha fazla hikaye ve ilgili ürünler ile alternatif bir cevap sundu.
Lex Li

175

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.exeeski 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.dllile 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 ( libuvbaş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.exeASP.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.


1
Güzel cevap. Ancak kerkenezi IIS ile kullanmanın 'bugünün internet uygulamasının sonucu olduğunu' söyleyemezsiniz. Ters proxy kullanmanın birçok mantığı vardır. Burada birkaç söz iyi olurdu.
Nilay Vishwakarma

13
"Ters vekil kullanmanın birçok mantığı vardır" kendi soru ve cevabına aittir. Genellikle insanlar Google'a sorarak iyi kaynaklar bulabilir, bu yüzden bunu zaten yeterince uzun olan bu cevaba eklemedim.
Lex Li

12

Şu adresteki ms dokümanlarından: https://docs.microsoft.com/tr-tr/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel, çapraz platform asenkron I / O kütüphanesi olan libuv tabanlı ASP.NET Core için bir platformlar arası web sunucusudur. Kerkenez, ASP.NET Core proje şablonlarında varsayılan olarak bulunan web sunucusudur.

Kestrel'i tek başına veya IIS, Nginx veya Apache gibi bir ters proxy sunucuyla kullanabilirsiniz. Ters proxy sunucu, Internet'ten HTTP isteklerini alır ve bazı ön işlemlerden sonra bunları Kestrel'e iletir.


GÜNCELLEME: .net core 2.1, Kestrel libuv yerine yönetilen soketler kullanır

Asp.net core 2.1 belgelerinden: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration

ASP.NET Core 2.1'in piyasaya sürülmesiyle, Kestrel'in varsayılan aktarımı artık Libuv'a değil, yönetilen soketlere dayanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.