ASP.NET Core'de web sunucusu uygulamaları
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Yayınlayanlar Tom Dykstra, Steve Smith, Stephen Halter ve Chris Ross
Bir ASP.NET Core uygulaması, bir işlem içi HTTP sunucusu uygulamasıyla çalışır. Sunucu uygulaması HTTP isteklerini dinler ve bunları bir HttpContext içinde oluşturulan istek özellikleri kümesi olarak uygulamaya sunar.
ASP.NET Core aşağıdakilerle birlikte gelir:
- Kestrel sunucu varsayılan, platformlar arası HTTP sunucusu uygulamasıdır. Kestrel en iyi performansı ve bellek kullanımını sağlar, ancak HTTP.sys'daki bazı gelişmiş özelliklere sahip değildir. Daha fazla bilgi için Windows sekmesindeki HTTP.sys karşılaştırması bölümüne bakın.Kestrel
- IIS HTTP Sunucusu, IIS için işlem içi bir sunucudur.
- HTTP.sys sunucusu, HTTP.sys çekirdek sürücüsü ve HTTP Sunucusu API'sine dayalı yalnızca Windows HTTP sunucusudur.
IIS veya IIS Express kullanırken uygulama şu şekilde çalışır:
- IIS HTTP Sunucusu ile IIS çalışan işlemiyle (işlem içi barındırma modeli) aynı işlemde. İşlem içi, önerilen yapılandırmadır.
- Kestrel sunucusu ile IIS çalışan işleminden (işlem dışı barındırma modeli) ayrı bir işlemde.
ASP.NET Core Modülü, IIS ile işlemdeki IIS HTTP Sunucusu veya Kestrel arasında yerel IIS isteklerini işleyen yerel bir IIS modülüdür. Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).
Kestrel ve HTTP.sys
Kestrel HTTP.sys’ye göre aşağıdaki avantajlara sahiptir:
- Daha iyi performans ve bellek kullanımı.
- Platformlar arası
- Çeviklik, işletim sisteminden bağımsız olarak geliştirilir ve yama uygulanır.
- Programlı bağlantı noktası ve TLS yapılandırması
- PPv2 ve alternatif aktarımlar gibi protokollere olanak tanıyan genişletilebilirlik.
Http.Sys, aşağıdaki özelliklere kestrel sahip olmayan paylaşılan çekirdek modu bileşeni olarak çalışır:
- Bağlantı noktası paylaşma
- Ç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 oluşturma
- Doğrudan dosya iletimi
- Yanıtları Önbelleğe Alma
Barındırma modelleri
Çeşitli barındırma modelleri mevcuttur:
Kestrel kendi kendine barındırma: Kestrel Web sunucusu, IIS veya HTTP.sys gibi başka bir dış web sunucusu gerektirmeden çalışır.
HTTP.sys kendi kendine barındırma, için Kestrelbir alternatiftir. Uygulama, Kestrel içinde bulunmayan özellikler gerektirmedikçe, HTTP.sys üzerinden Kestrel önerilir.
IIS işlem içi barındırma: ASP.NET Core uygulaması, IIS çalışan işlemiyle aynı işlemde çalışır. IIS işlem içi barındırma, isteklerin aynı makineye giden ağ trafiğini geri döndüren bir ağ arabirimi olan geri döngü bağdaştırıcısı üzerinden proksid olmadığı için IIS işlem içi barındırma, IIS işlem dışı barındırmaya göre geliştirilmiş performans sağlar. IIS işlem yönetimini Windows İşlem Etkinleştirme Hizmeti (WAS) ile işler.
IIS işlem dışı barındırma: ASP.NET Core uygulamaları IIS çalışan işleminden ayrı bir işlemde çalıştırılır ve modül işlem yönetimini işler. İlk istek geldiğinde modül ASP.NET Core uygulaması için işlemi başlatır ve uygulama kapanırsa veya kilitlenirse uygulamayı yeniden başlatır. Bu temelde, Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından yönetilen, işlem içinde çalıştırılan uygulamalarda görünen davranışla aynıdır. Ayrı bir işlem kullanmak aynı uygulama havuzundan birden fazla uygulama barındırmayı da sağlar.
Daha fazla bilgi için, aşağıdakilere bakın:
Kestrel
Kestrel sunucu varsayılan, platformlar arası HTTP sunucusu uygulamasıdır. Kestrel en iyi performansı ve bellek kullanımını sağlar, ancak HTTP.sys'daki bazı gelişmiş özelliklere sahip değildir. Daha fazla bilgi için, Kestrel ve HTTP.sys belgesine bakın.
Kestrel kullanın:
İnternet dahil olmak üzere doğrudan bir ağdan gelen istekleri işleyen bir uç sunucu olarak tek başına.
Internet Information Services (IIS), Nginx veya Apache gibi bir ters ara sunucu ile. Ters ara sunucu İnternet'ten HTTP istekleri alır ve bunları Kestrel adresine iletir.
Ters ara sunucu içeren veya içermeyen barındırma yapılandırması desteklenir.
Yapılandırma Kestrel yönergeleri ve ters ara sunucu yapılandırmasında ne zaman kullanılacağı Kestrel hakkında bilgi için bkz Kestrel . ASP.NET Core'da web sunucusu.
ASP.NET Core aşağıdakilerle birlikte gelir:
- Kestrel sunucu varsayılan, platformlar arası HTTP sunucusudur.
- HTTP.sys sunucusu, HTTP.sys çekirdek sürücüsü ve HTTP Sunucusu API'sine dayalı yalnızca Windows HTTP sunucusudur.
IIS veya IIS Express kullanıldığında, uygulama Kestrel sunucusuyla IIS çalışan işleminden ayrı bir işlemde (işlem dışı) çalıştırılır.
ASP.NET Core uygulamaları IIS çalışan işleminden ayrı bir işlemde çalıştırıldığından, işlem yönetimini modül gerçekleştirir. İlk istek geldiğinde modül ASP.NET Core uygulaması için işlemi başlatır ve uygulama kapanırsa veya kilitlenirse uygulamayı yeniden başlatır. Bu temelde, Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından yönetilen, işlem içinde çalıştırılan uygulamalarda görünen davranışla aynıdır.
Aşağıdaki diyagramda IIS, ASP.NET Core Modülü ve işlem dışında barındırılan uygulama arasındaki ilişki gösterilir:
Web'den çekirdek modundaki HTTP.sys sürücüsüne istekler gelir. Sürücü istekleri web sitesinin yapılandırılmış bağlantı noktası üzerinden (genellikle 80 (HTTP) veya 443 (HTTPS)) IIS'ye yönlendirir. Modül istekleri uygulama için 80 veya 443 olmayan rastgele bir bağlantı noktası üzerinden Kestrel'e iletir.
Modül bağlantı noktasını başlatma sırasında bir ortam değişkeni aracılığıyla belirtir ve IIS Tümleştirme Ara Yazılımı sunucuyu http://localhost:{port}
üzerinden dinleyecek şekilde yapılandırır. Ek denetimler gerçekleştirilir ve modülden kaynaklanmayan istekler reddedilir. Modül HTTPS iletmeyi desteklemez, dolayısıyla IIS tarafından HTTPS üzerinden alınan istekler bile HTTP üzerinden iletilir.
Kestrel isteği modülden aldıktan sonra, istek ASP.NET Core ara yazılım işlem hattına gönderilir. Ara yazılım işlem hattı isteği işler ve bir HttpContext
örneği olarak uygulamanın mantığına geçirir. IIS Tümleştirmesi tarafından eklenen ara yazılım, isteği Kestrel'e iletme işlemini gerçekleştirmek için şemayı, uzak IP'yi ve yol tabanını güncelleştirir. Uygulamanın yanıtı IIS'ye geri geçirilir ve IIS de bunu geriye, isteği başlatan HTTP istemcisine gönderir.
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 Kestrel öğesinin ters ara sunucu olarak nasıl kullanılacağı hakkında bilgi için, bkz. Nginx ile Linux üzerinde ASP.NET Core barındırma.
HTTP.sys
ASP.NET Core uygulamaları Windows üzerinde çalıştırılıyorsa, HTTP.sys, Kestrel için bir alternatiftir. Uygulama, Kestrel içinde bulunmayan özellikler gerektirmedikçe, HTTP.sys üzerinden Kestrel önerilir. Daha fazla bilgi için, bkz. ASP.NET Core'da HTTP.sys web sunucusu uygulamaları.
HTTP.sys yalnızca iç ağa açık uygulamalar için de kullanılabilir.
HTTP.sys yapılandırma kılavuzu için, bkz. ASP.NET Core'da HTTP.sys web sunucusu uygulama.
ASP.NET Core sunucu altyapısı
Startup.Configure
yönteminde bulunan IApplicationBuilder, IFeatureCollection türünün ServerFeatures özelliğini ortaya çıkarır. Kestrel ve HTTP.sys, IServerAddressesFeature öğesinin her biri için yalnızca tek bir özellik sunar, ancak farklı sunucu uygulamaları ek işlevsellik gösterebilir.
IServerAddressesFeature
, sunucu uygulamasının çalışma zamanında hangi bağlantı noktasına bağlı olduğunu 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 (OWIN) kılavuzu, Nowin tabanlı IServer bir uygulama yazmayı gösterir. Yalnızca uygulamanın kullandığı özellik arabirimleri uygulama gerektirir, ancak en azından IHttpRequestFeature ve IHttpResponseFeature öğelerinin desteklenmesi gerekir.
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ü veya konsoluyla başlatmak için kullanılabilir.
- Visual Studio Code: Uygulama ve sunucu, CoreCLR hata ayıklayıcısını etkinleştiren Omnisharp tarafından başlatılır.
- Mac için Visual Studio: Uygulama ve sunucu Mono Soft-Mode Hata Ayıklayıcısı tarafından başlatılır.
Uygulamayı projenin klasöründeki bir komut isteminden başlatırken, dotnet run uygulamayı ve sunucuyu başlatır (Kestrel ve yalnızca HTTP.sys). Yapılandırma -c|--configuration
seçeneği tarafından belirtilir ve bu seçenek Debug
(varsayılan) veya Release
olarak ayarlanır.
Bir launchSettings.json
dosyası, Visual Studio gibi araçlarda yerleşik olarak bulunan bir hata ayıklayıcı ile dotnet run
veya uygulaması başlatılırken yapılandırma sağlar. Başlatma profilleri bir launchSettings.json
dosyasında varsa, dotnet run
komutuyla --launch-profile {PROFILE NAME}
seçeneğini kullanın veya Visual Studio'da profili seçin. Daha fazla bilgi için, bkz. dotnet çalıştırma ve .NET Core dağıtım paketleme.
HTTP/2 desteği
Aşağıdaki dağıtım senaryolarında ASP.NET Core ile birlikte HTTP/2 desteklenir:
- Kestrel
- İşletim Sistemi
- Windows Server 2016/Windows 10 veya üzeri†
- OpenSSL 1.0.2 veya üzeri yüklü Linux (örneğin, Ubuntu 16.04 veya üzeri)
- macOS 10.15 veya üzeri
- Hedef çerçeve: .NET Core 2.2 veya üzeri
- İşletim Sistemi
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef çerçeve: 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 çerçeve: .NET Core 2.2 veya üzeri
- IIS (işlem dışı)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
- Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.
†Kestrel, Windows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı desteğe sahiptir. Bu işletim sistemlerinde kullanılabilen desteklenen TLS şifreleme 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 İmza Algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekebilir.
- Kestrel
- İşletim Sistemi
- Windows Server 2016/Windows 10 veya üzeri†
- OpenSSL 1.0.2 veya üzeri yüklü Linux (örneğin, Ubuntu 16.04 veya üzeri)
- HTTP/2, gelecek bir sürümde macOS'ta desteklenecektir.
- Hedef çerçeve: .NET Core 2.2 veya üzeri
- İşletim Sistemi
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef çerçeve: 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 çerçeve: .NET Core 2.2 veya üzeri
- IIS (işlem dışı)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
- Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.
†Kestrel, Windows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı desteğe sahiptir. Bu işletim sistemlerinde kullanılabilen desteklenen TLS şifreleme 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 İmza Algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekebilir.
- Kestrel
- İşletim Sistemi
- Windows Server 2016/Windows 10 veya üzeri†
- OpenSSL 1.0.2 veya üzeri yüklü Linux (örneğin, Ubuntu 16.04 veya üzeri)
- HTTP/2, gelecek bir sürümde macOS'ta desteklenecektir.
- Hedef çerçeve: .NET Core 2.2 veya üzeri
- İşletim Sistemi
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef çerçeve: 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 çerçeve: .NET Core 2.2 veya üzeri
- IIS (işlem dışı)
- Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
- Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
- Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.
†Kestrel, Windows Server 2012 R2 ve Windows 8.1 üzerinde HTTP/2 için sınırlı desteğe sahiptir. Bu işletim sistemlerinde kullanılabilen desteklenen TLS şifreleme 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 İmza Algoritması (ECDSA) kullanılarak oluşturulan bir sertifika gerekebilir.
- HTTP.sys
- Windows Server 2016/Windows 10 veya üzeri
- Hedef çerçeve: 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
- Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır, ancak Kestrel için ters ara sunucu bağlantısı HTTP/1.1 kullanır.
- Hedef çerçeve: IIS işlem dışı dağıtımları için geçerli değildir.
HTTP/2 bağlantısı Uygulama Katmanı Protokolü Anlaşması (ALPN) ve TLS 1.2 veya sonraki sürümleri kullanmalıdır. Daha fazla bilgi için sunucu dağıtım senaryolarınızla ilgili konulara bakın.
Ek kaynaklar
ASP.NET Core