Özgür Adem Işıklı Özgür Adem Işıklı Software Developer Resume Contact

Software Developer

Not #6 - Windows Servisi Olarak Web API Geliştirme

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

  • Visual Studio ile yeni proje oluşturma ekranınan Windows Service seçilir.
  • ASP.NET Web API Self Host paketi Nuget üzerinden kurulur.
  • OnStart bölümü aşağıdaki şekilde güncellenerek Web API’nin ayağa kalkması sağlanır;


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();
}
  • OnStop metodu aşağıdaki şekilde güncellerek durdurma anında Web API’nin de durması sağlanır;

protected override void OnStart(string[] args)
{
    server.CloseAsync().Wait();
    server.Dispose();
}
  • Bu adımdan sonra aşağıdaki gibi Controller dosyaları oluşturarak Web API geliştirebilirsiniz;

public class ServiceController: ApiController
{

    [HttpGet]
    public Dictionary<string, dynamic> Information()
    {
        return new Dictionary<string, dynamic>()
        {
            { "name", "MyService" },
        };
    }
}
  • installutil MyService.exe komutu verilerek ilgili uygulamanın Hizmetler bölümüne kaydı gerçekleştirilir.
  • installutil /u MyService.exe komutu ile dilendiği zaman uygulamanın Hizmetler üzerindeki kaydı silinir.

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.

What About Comments?

I do not use any comment system such as Disqus because of user's privacy. If you want to discuss something about this post, you may open an issue on the repo.

You may check what is the problem with Disqus;