ASP.NET Core'de web sunucusu uygulamaları
Tom Dykstra, Steve Smith, Stephen Halterve Chris Chris Tarafından
Bir ASP.NET Core, işlem sırasında HTTP sunucusu uygulamasıyla çalışır. Sunucu uygulaması HTTP isteklerini dinler ve bunları bir içinde oluşan bir dizi istek özelliği olarak uygulamaya HttpContext gösterir.
ASP.NET Core aşağıdakilerle birlikte birlikte:
- Kestrel sunucusu varsayılan, platformlar arası HTTP sunucusu uygulamasıdır. Kestrel en iyi performansı ve bellek kullanımını sağlar, ancak bu hizmette bazı gelişmiş özelliklere HTTP.sys. Daha fazla bilgi için Kestrel sonraki bölümde HTTP.sys karşılaştırması bölümüne bakın.
- IIS HTTP Sunucusu, IIS için işlem sırasındaki bir sunucudur.
- HTTP.sys, Windows çekirdek sürücüsüne ve HTTP Sunucusu API'siniHTTP.sys yalnızca bir HTTP sunucusudur.
IIS veya IIS Express uygulamaşu şekilde çalışır:
- IIS HTTP Sunucusu ile IIS çalışan işlemi (işlem içinde barındırma modeli)ile aynı işlemde. süreç içinde önerilen yapılandırmadır.
- sunucusuyla IIS çalışan işleminden (işlem dışındabarındırma modeli) ayrı bir Kestrel işlemde.
ASP.NET Core Modülü, IIS ile işlem sırasındaKI IIS HTTP Sunucusu veya arasında yerel IIS isteklerini işlemeye yönelik yerel bir IIS Kestrel modülüdür. Daha fazla bilgi için bkz. ASP.NET Core Modülü.
Kestrel vs. HTTP.sys
Kestrel aşağıdaki avantajlara sahiptirHTTP.sys:
- Daha iyi performans ve bellek kullanımı.
- Platformlar arası
- Çeviklik, işletim sistemi bağımsız olarak geliştirilmiş ve düzeltme eki uygulamalıdır.
- Programlı bağlantı noktası ve TLS yapılandırması
- PPv2 ve alternatif taşımalar gibi protokollere olanak sağlayan genişletilebilirlik.
Http.Sys, kestrel'in sahip olduğu aşağıdaki özelliklerle paylaşılan çekirdek modu bileşeni olarak çalışır:
- Bağlantı noktası paylaşımı
- Çekirdek modu Windows kimlik doğrulaması. Kestrel yalnızca kullanıcı modu kimlik doğrulamasını destekler.
- Kuyruk aktarımları aracılığıyla hızlı ara sunucu
- Doğrudan dosya iletimi
- Yanıtları Önbelleğe Alma
Barındırma modelleri
İşlem içinde barındırmayı kullanan ASP.NET Core, IIS çalışan işlemiyle aynı işlemde çalışır. İstekler, giden ağ trafiğini aynı makineye geri döndüren bir ağ arabirimi olan geri döngü bağdaştırıcısı üzerinden ara sunucuya bağlı olmaması nedeniyle işlem içinde barındırma, işlem dışında barındırmaya göre daha iyi performans sağlar. IIS, Windows Etkinleştirme Hizmeti (WAS) ile işlem yönetimini ele almaktadır.
İşlem dışında barındırmayı kullanarak, ASP.NET Core IIS çalışan işleminden ayrı bir işlemde, modül ise işlem yönetimini ele almaktadır. Modül, ilk istek ASP.NET Core uygulamanın işlemini başlatır ve kapandığında veya kilitleniyorsa uygulamayı yeniden başlatır. Bu temelde, Windows Process Activation Service (WAS) tarafından yönetilen işlem içinde çalıştıran uygulamalarla görülen davranıştır.
Daha fazla bilgi ve yapılandırma kılavuzu için aşağıdaki konulara bakın:
Kestrel
Kestrel sunucusu varsayılan, platformlar arası HTTP sunucusu uygulamasıdır. Kestrel en iyi performansı ve bellek kullanımını sağlar, ancak bu hizmette bazı gelişmiş özelliklere HTTP.sys. Daha fazla bilgi için bu Kestrel belgede HTTP.sys karşılaştırması.
Kestrelkullanın:
Doğrudan İnternet dahil olmak üzere bir ağdan gelen uç sunucu işleme istekleri olarak tek başına.

Internet Information Services (IIS), Nginxveya Apache gibi bir ters ara sunucu ile. Ters ara sunucu, İnternet'den HTTP isteklerini alır ve bu istekleri adresine Kestrel iletir.

Bir ters ara — sunucu ile veya bu sunucu olmadan barındırma yapılandırması de — destekler.
Yapılandırma Kestrel kılavuzu ve ters ara sunucu yapılandırmasında ne zaman Kestrel kullanıla hakkında bilgi için KestrelASP.NET Core'de web sunucusu uygulaması bkz. .
ASP.NET Core aşağıdakilerle birlikte birlikte:
- Kestrel sunucusu varsayılan, platformlar arası HTTP sunucusudur.
- HTTP.sys, Windows çekirdek sürücüsüne ve HTTP Sunucusu API'siniHTTP.sys yalnızca bir HTTP sunucusudur.
IIS veya IIS Expresskullanırken, uygulama sunucusuyla IIS çalışan işleminden (işlem dışında) ayrı bir işlemde Kestrel çalışır.
Uygulama ASP.NET Core IIS çalışan sürecinden ayrı bir işlemde çalıştırıla olduğundan, modül işlem yönetimini ele almaktadır. Modül, ilk istek ASP.NET Core uygulamanın işlemini başlatır ve kapandığında veya kilitleniyorsa uygulamayı yeniden başlatır. Bu temelde, Windows Process Activation Service (WAS) tarafından yönetilen işlem içinde çalıştıran uygulamalarla görülen davranıştır.
Aşağıdaki diyagramda IIS, ASP.NET Core Modülü ve işlem dışında barındırılan bir uygulama arasındaki ilişki göstermektedir:

İstekler web'den çekirdek modu sürücüye HTTP.sys gelir. Sürücü, istekleri web sitesinin yapılandırılan bağlantı noktası üzerinden IIS'ye (genellikle 80 (HTTP) veya 443 (HTTPS) yönlendirmektedir. Modül, istekleri uygulamanın 80 veya 443 bağlantı noktası olmayan rastgele bir bağlantı noktasına Kestrel iletir.
modülü, başlatma sırasında bir ortam değişkeni aracılığıyla bağlantı noktasını belirtir ve IIS Tümleştirme Ara Yazılımı sunucuyu üzerinde dinleyecek şekilde yapılandırmaktadır. http://localhost:{port} Ek denetimler gerçekleştirilir ve modülden kaynaklanmazsa istekler reddedilir. Modül HTTPS iletmeyi desteklemez, bu nedenle istekler HTTPS üzerinden IIS tarafından alınsa bile HTTP üzerinden iletiliyor.
Modülden isteği alan istek, bir Kestrel ara yazılım işlem hattına ASP.NET Core olur. Ara yazılım işlem hattı isteği işler ve uygulamanın HttpContext mantığına örnek olarak iletir. IIS Tümleştirmesi tarafından eklenen ara yazılım, isteği adresine iletmeyi hesaba katacak şemayı, uzak IP'yi ve yol tabanını Kestrel günceller. Uygulamanın yanıtı IIS'ye geri geçirerek isteği başlatan HTTP istemcisine geri iter.
IIS ve ASP.NET Core Modülü yapılandırma kılavuzu için aşağıdaki konulara bakın:
Nginx ile Kestrel
Linux üzerinde Nginx'i için ters proxy sunucusu olarak kullanma hakkında bilgi için Kestrel bkz. ngınx ile Linux üzerinde ana bilgisayar ASP.NET Core .
Ile Apache Kestrel
Linux üzerinde Apache'yi için ters proxy sunucusu olarak kullanma hakkında bilgi için Kestrel bkz. Apache ile Linux üzerinde ASP.NET Core barındırma .
HTTP.sys
Uygulama ASP.NET Core bir Windows HTTP.sys alternatif olarak Kestrel kullanılabilir. Kestrel , uygulamanın içinde HTTP.sys gerektirdiği sürece uygulamanın üzerinde kullanılması Kestrel önerilir. Daha fazla bilgi için bkz. ASP.NET Core Web sunucusu uygulamasını HTTP.sys.

HTTP.sys, yalnızca bir iç ağa açık uygulamalar için de kullanılabilir.

Yapılandırma HTTP.sys için bkz. ASP.NET Core Web sunucusu uygulamasını HTTP.sys .
ASP.NET Core sunucusu altyapısı
IApplicationBuilderyönteminde Startup.Configure kullanılabilir, türünün ServerFeatures özelliğini ortaya IFeatureCollection çıkarır. Kestrel ve HTTP.sys her biri yalnızca tek bir özelliği açığa çıkarır, ancak farklı IServerAddressesFeature sunucu uygulamaları ek işlevleri ortaya çıkarır.
IServerAddressesFeature , sunucu uygulamasının çalışma zamanında bağlı olduğu bağlantı noktasını bulmak için kullanılabilir.
Özel sunucular
Yerleşik sunucular uygulamanın gereksinimlerini karşılamıyorsa özel bir sunucu uygulaması oluşturulabilir. .Net Için açık Web arabirimi (OWıN) Kılavuzu , nowintabanlı bir uygulamanın nasıl yazılacağını gösterir IServer . Yalnızca uygulamanın kullandığı Özellik arabirimleri, en azından IHttpRequestFeature ve IHttpResponseFeature desteklenmesi gereken uygulama gerektirir.
Sunucu başlatma
Tümleşik geliştirme ortamı (IDE) veya düzenleyici uygulamayı başlattığında sunucu başlatılır:
- Visual Studio: başlatma profilleri, uygulamayı ve sunucuyu IIS Express / ASP.NET Core modülü ya da konsolu ile başlatmak için kullanılabilir.
- Visual Studio Code: uygulama ve sunucu omnisharptarafından başlatılır ve bu, coreclr hata ayıklayıcısını etkinleştirir.
- Mac için Visual Studio: uygulama ve sunucu Mono Soft-Mode hata ayıklayıcısıtarafından başlatılır.
Uygulamanın, projenin klasöründeki bir komut isteminden başlatılması sırasında DotNet Run uygulamayı ve sunucuyu başlatır ( Kestrel yalnızca HTTP.sys). Yapılandırma -c|--configuration seçeneğiyle belirtilir, Debug (varsayılan) veya olarak ayarlanır Release .
Dosya launchSettings.js dotnet run , Visual Studio gibi araç halinde yerleşik bir hata ayıklayıcı ile veya bir uygulama başlatırken yapılandırma sağlar. Başlatma profilleri dosyasında bir launchSettings.js varsa, --launch-profile {PROFILE NAME} komutuyla seçeneğini kullanın dotnet run veya Visual Studio profili seçin. Daha fazla bilgi için bkz. DotNet Run ve .NET Core Distribution paketleme.
HTTP/2 desteği
HTTP/2 aşağıdaki dağıtım senaryolarında ASP.NET Core desteklenir:
- Kestrel
- İşletim sistemi
- Windows Server 2016/Windows 10 veya üzeri†
- OpenSSL 1.0.2 veya üzerini içeren Linux (örneğin, Ubuntu 16,04 veya üzeri)
- HTTP/2, gelecek sürümlerde macOS 'ta desteklenecektir.
- Hedef Framework: .NET Core 2,2 veya üzeri
- İşletim sistemi
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef Framework: HTTP.sys dağıtımlar için geçerli değildir.
- IIS (işlem içi)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Hedef Framework: .NET Core 2,2 veya üzeri
- IIS (işlem dışı)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Herkese açık uç sunucu bağlantıları HTTP/2 kullanır, ancak ters proxy bağlantısı Kestrel http/1.1 'yi kullanır.
- Hedef Framework: IIS işlem dışı dağıtımlar için geçerli değildir.
†KestrelWindows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı destek içerir. Bu işletim sistemlerinde kullanılabilir olan desteklenen TLS şifre paketlerinin listesi sınırlı olduğundan destek sınırlıdır. TLS bağlantılarının güvenliğini sağlamak için Eliptik Eğri dijital Imza algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekli olabilir.
- Kestrel
- İşletim sistemi
- Windows Server 2016/Windows 10 veya üzeri†
- OpenSSL 1.0.2 veya üzerini içeren Linux (örneğin, Ubuntu 16,04 veya üzeri)
- HTTP/2, gelecek sürümlerde macOS 'ta desteklenecektir.
- Hedef Framework: .NET Core 2,2 veya üzeri
- İşletim sistemi
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef Framework: HTTP.sys dağıtımlar için geçerli değildir.
- IIS (işlem içi)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Hedef Framework: .NET Core 2,2 veya üzeri
- IIS (işlem dışı)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Herkese açık uç sunucu bağlantıları HTTP/2 kullanır, ancak ters proxy bağlantısı Kestrel http/1.1 'yi kullanır.
- Hedef Framework: IIS işlem dışı dağıtımlar için geçerli değildir.
†KestrelWindows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı destek içerir. Bu işletim sistemlerinde kullanılabilir olan desteklenen TLS şifre paketlerinin listesi sınırlı olduğundan destek sınırlıdır. TLS bağlantılarının güvenliğini sağlamak için Eliptik Eğri dijital Imza algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekli olabilir.
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef Framework: HTTP.sys dağıtımlar için geçerli değildir.
- IIS (işlem dışı)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Herkese açık uç sunucu bağlantıları HTTP/2 kullanır, ancak ters proxy bağlantısı Kestrel http/1.1 'yi kullanır.
- Hedef Framework: IIS işlem dışı dağıtımlar için geçerli değildir.
Bir HTTP/2 bağlantısı, uygulama katmanı protokol anlaşması (ALPN) ve TLS 1,2 veya üstünü kullanmalıdır. Daha fazla bilgi için, sunucu dağıtım senaryolarınıza ait konulara bakın.
Ek kaynaklar
- KestrelASP.NET Core'de web sunucusu uygulaması
- ASP.NET Core Modülü
- IIS ASP.NET Core Windows konak konakları
- ASP.NET Core uygulamalarını Azure App Service dağıtma
- ngınx ile Linux üzerinde ana bilgisayar ASP.NET Core
- Apache ile Linux üzerinde ASP.NET Core barındırma
- ASP.NET Core Web sunucusu uygulamasını HTTP.sys