.Net Core 2.0 Sunucu Yapıları

 .net core 2.0 ile kullanabildiğimiz web server yapıları ile ilgili bilgiler paylaşmaya çalışacağım.
Asp.net core uygulama ihtiyacına göre yapısında bazı web sunucuları barındırır. Bunlar ; Kestrel, Asp.Net Core Modules  ve Http.sys (.net core 1.0 da Web Listener). Asp.net core kendi içerisinde web sunucu bulundurarak cross-platform çalışabilmekte, farklı web sunucuları kullanabilmekte ve self hosting uygulamalar geliştirebilmemize olanak sağlamaktadır.

Kestrel Nedir ?

Kestrel Asp.net core için cross-platform çalışabilen web sunucusudur. Kestrel web server HTTPS, Web socket ve Unix socket ‘leri özellikleri desteklemektedir. Web sunucu olarak kestreli yalnız başına veya Apache, Nginx ve IIS ile reverse proxy olarak kullanabiliriz. Kısaca ayrık bir web sunucu uygulaması kullanıyorsak reverse proxy ile kestrel’e request gönderilir.
Kestrel olmadan IIS, Nginx veya Apache kullanılamaz! Asp.Net Core kendi süreçlerini çalıştırabilecek şekilde tasarlanmış ve cross platformlarda bu şekilde tutarlı bir biçimde çalışmaktadır. IIS, Nginx veya Apache web sunucuları işlemleri çalıştırma yöntemleri vardır Asp.net Core her birine adapte olmak yerine Kestrel gibi asp.net Core işlemleri için tasarlanmış bir web sunucu kullanarak farklı platformlara uyumluluğu sağlanmıştır.
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("testCert.pfx", "testPassword");
});
})
.Build();
Kestrel bu şekilde Maksimum Client bağlantısı, Maksimum istek boyutu  ve minumum istek hızı gibi özelliklerini ve kısıtlamalarını ayarlayabilirsiniz.

Asp.Net Core Module

IIS içerisinde (pipeline) yerel bir moduldür ve gelen trafiği Asp.Net Core uygulamasına yönlendirir. Windows authentication gibi bir çok modulünde çalıştırabilir. ANCM bir istek için kontrolü sağlar ve bu uygulamanın web.config dosyasında tanımlanır.
Web den gelen istekler, birincil port(80) veya SSL port(443) üzerinden IIS içerisine yönlediren Http.sys kernel mode ulaşır.ANCM istekleri 80/443 numaralı bağlantısı olmayan uygulama için ayarlanmış HTTP bağlantı noktasındaki Asp.Net Core uygulamasına iletir.
Kestrel ANCM den gelen trafiği dinler. ANCM başlangıçta ortam değişkenini kullanarak bağlantı noktasını belirtir ve UseIISIntegration methodu sunucuyu http://localhost:{port} üzerinde dinleyecek şekilde ayarlar.
Kestrel ANCM’den gelen istekleri alır ve onları ASP.NET Core middleware(ara katman) pipeline gönderir ve sonra istekleri  işler. Sonrasında  Uygulama mantığına bağlı olarak istekleri HttpContext örnekleri olarak iletir.  Daha sonra istekleri başlatan HTTP istemcisine doğru response geri gönderir.

HTTP.sys Nedir ?

Eğer Asp.Core Windows üzerinde çalıştırıyorsanız HTTP.sys Kestrelin bir alternatifidir.Kestrelin desteklemediği HTTP.sys özelliklerine ihtiyacınız olduğunda internete açtığınız uygulmalarınızda kullanabilirsiniz.HTTP.sys IIS veya IIS Express ile kullanılamaz. Çünkü Asp.Net Core Module ile uyumlu değildir.
Kestreli yapılandırdığımız gibi HTTP.sys’i de yapılandırabiliriz. Sadece UseHttpSys(options) methodunu kullanmamız gerekmektedir.

Sonuç olarak;

Asp.Net Core içerisinde diğer web sunuculardan bağımsız kendi web sunucu özelliklerini barındırmaktadır. Bu sayede platform bağımsız ve self hosting uygulamalar geliştirmemiz için kolaylık sağlamaktadır. Özellikle uygulamalarımızı microservice’ler şeklinde geliştirmek istiyorsak bizim için büyük bir kolaylık olacaktır.
Murat Güven avatarı