ASP.Net Web Programlama C# WinForms ve Mono GTK Console Sistem ve Servis Programlama Yazılım ve Sistem Güvenliği

Win Service Http Server

Windows servisi ile yerel bir web sunucusu oluşturmayı en basit haliyle paylaşıyorum.

public partial class Service1 : ServiceBase {
    HttpListener listener = new HttpListener();
    Thread td1=null;
    public Service1() {
        InitializeComponent();
    }

    protected override void OnStart(string[] args) {
        WriteFile("OnStart");
        td1 = new Thread(()=> {
            try {
                listener.Prefixes.Add("http://localhost:2000/");
                listener.Start();
                while(listener.IsListening) {
                    listener.BeginGetContext(new AsyncCallback(OnRequestReceive), listener);
                }
                listener.Stop();
            } catch(Exception exc) {
                WriteFile(JsonConvert.SerializeObject(exc));
            }
        });
        td1.Start();
    }

    protected override void OnStop() {
        listener.Stop();
        td1.Abort();
    }

    private void OnRequestReceive(IAsyncResult result) {
        try {
            HttpListener listener = (HttpListener)result.AsyncState;
            HttpListenerContext context = listener.EndGetContext(result);
            HttpListenerRequest request = context.Request;
            WriteFile(request.UserHostAddress + " \n");
            HttpListenerResponse res = context.Response;
            byte[] gonderilecek = Encoding.UTF8.GetBytes(DateTime.Now.ToString() + " - metinyakar.net");
            res.AddHeader("Content-Type", "application/json ; charset=utf-8");
            res.OutputStream.Write(gonderilecek, 0, gonderilecek.Length);
            context.Response.Close();
        } catch (Exception exc) { WriteFile(exc.Message); }
    }
}

Çalıştırmak için aşağıdaki komutlar kullanılabilir.

sc.exe delete "My Service"

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\

InstallUtil.exe /u C:\bin\Release\Monitoring.exe

InstallUtil.exe C:\bin\Release\Monitoring.exe

Servisi kurabilmek için installer dosyasına ihtiyaç olduğunu hatırlayalım. Aşağıdaki gibi bir class hazırlıyorum bunun için.

[RunInstallerAttribute(true)]
public class ProjectInstaller : Installer {
    private ServiceInstaller serviceInstaller1;
    private ServiceProcessInstaller processInstaller;

    public ProjectInstaller() {
        processInstaller = new ServiceProcessInstaller();
        serviceInstaller1 = new ServiceInstaller();
        processInstaller.Account = ServiceAccount.LocalSystem;
        serviceInstaller1.StartType = ServiceStartMode.Automatic;
        serviceInstaller1.ServiceName = "My Service";
        Installers.Add(serviceInstaller1);
        Installers.Add(processInstaller);
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir