2018-09-15

[ASP.NET] 使用 HttpListener monitor Windows Service

  最近接到一個需求,需要監視某個 Remote Server 上面的 Windows Service 是否正常運作,只要無回應代表可能已停止,就通知相關人員。



  Google 了一下,大都建議使用 ServiceController 或 WMI,但是因為兩者都需要 Remote Server 較高的執行權限才行,因無權限而放棄。尋問同事後,告知可以使用 HttpListener 來代替,也是另一個不錯的方法,做法如下:

Remote Server
// Remote Server 自定義一組 Port 供監視
string listenerURL = "http://192.168.1.10:2222";
HttpListener = listener = new HttpListener();
listener.Prefixes.Add(listenerURL);
listener.Start();

// 固定回傳OK給詢問者
Thread listenerThread = new Thread(HandleRequest);
listenerThread.Start();

...

private void HandleRequest()
{
    while (listener.IsListening)
    {
        HttpListenerContext context = listener.GetContext();
        HttpListenerResponse response = context.Response;

        byte[] buffer = Encoding.UTF8.GetBytes("OK");
        response.ContentLength64 = buffer.Length;
        Stream st = response.OutputStream;
        st.Write(buffer, 0, buffer.Length);
        context.Response.Close();
    }
}

Client
// 可配合 Timer 定時 Request Remote Server HttpListener
using (WebClient wc = new WebClient())
{
    wc.Encoding = Encoding.UTF8;
    string result = wc.DownloadString("http://192.168.1.10:2222");
    ...
}


參考連結:Peggy Yang - 恩典之路

沒有留言:

張貼留言