Özgür Adem Işıklı

#6 Windows Servisi Olarak Web API Geliştirme

12 April 2017

Bu bir kendime not yazısıdır. Daha sonradan unutma ihtimalime karşın kendimce notlar alıyorum.

Giriş

Windows Hizmetleri, Windows işletim sistemi üzerine koşan ve Hizmetlet ekranı aracılığı ile yönetebildiğimiz bir ekran. Arka planda çalışan ve bir arayüze sahip olmayan bu uygulamaları, dilerseniz el yordamıyla, dilerseniz otomatik olarak başlatabiliyorsunuz.

Benim de bir ihtiyaç üzerine arka planda sürekli olarak çalışacak bir REST API çalıştırma zaruretim oluştu. Bu notu da üzerinde unutmamak adına alıyorum.

Gereksinimler

Söz konusu Windows Servisi olduğu için, Windows işletim sistemine sahip olan bir bilgisayar ve Visual Studio gereksinimlerimizi oluşturuyor.

Uygulama



private HttpSelfHostServer server;
private HttpSelfHostConfiguration config;

protected override void OnStart(string[] args)
{
    config = new HttpSelfHostConfiguration("http://localhost:9191");
    config.Routes.MapHttpRoute(
        "DefaultApi",
        "api/{controller}/{action}"
    );
    config.Formatters.Remove(config.Formatters.XmlFormatter);

    server = new HttpSelfHostServer(config);
    server.OpenAsync().Wait();
}

protected override void OnStart(string[] args)
{
    server.CloseAsync().Wait();
    server.Dispose();
}

public class ServiceController: ApiController
{

    [HttpGet]
    public Dictionary<string, dynamic> Information()
    {
        return new Dictionary<string, dynamic>()
        {
            { "name", "MyService" },
        };
    }
}

Olası Hatalar

Bağımlılığı bulunan Newtonsoft.Json paketinin sürümü biraz olarak geliyor. Ben derleme aşamasında bu nedenle ciddi sıkıntılar yaşadım. Newtonsoft.Json paketinin sürümü yükselttiğinizde olası sorunları ortadan kaldırabilirsiniz.

Sonuç

Her ne kadar Windows'u sevmesem de, işim gereği bu tarz geliştirmeler yapmak zorunda kalabiliyorum. Eğer olur da Windows üzerinde bir hizmet olarak Web API çalıştırmak isterseniz, bu yöntemi kullanabilirsiniz.