web-dev-qa-db-ja.com

C#:Webサービスが稼働中であることをプログラムで確認する方法は?

一連のWebサービスが稼働しているかどうかを監視するC#アプリケーションを作成する必要があります。ユーザーはドロップダウンからサービス名を選択します。プログラムは、対応するサービスURLでテストし、サービスが実行されているかどうかを示す必要があります。それを行う最良の方法は何ですか?私が考えている1つの方法は、wsdlをダウンロードできるかどうかをテストすることです。 ISより良い方法がありますか?

注:このアプリケーションの目的は、ユーザーがサービス名のみを知る必要があることです。サービスの対応するURLを覚えておく必要はありません。

このC#アプリケーションのWebサイトバージョンとデスクトップアプリケーションバージョンが必要です。

注:既存のサービスはWCFを使用しています。しかし、将来、非WCFサービスが追加される可能性があります。

注:私のプログラムは、サービス内の操作を認識しません(または興味がありません)。したがって、サービス操作を呼び出すことはできません。

参照

  1. pingを使用せずにWebサービスが稼働しているかどうかを確認する方法?
  2. Cプログラム-Webサービスが実行されているかどうかを確認する方法
16
Lijo

これは機能を保証するものではありませんが、少なくともURLへの接続を確認できます。

var url = "http://url.to.che.ck/serviceEndpoint.svc";

try
{
    var myRequest = (HttpWebRequest)WebRequest.Create(url);

    var response = (HttpWebResponse)myRequest.GetResponse();

    if (response.StatusCode == HttpStatusCode.OK)
    {
        //  it's at least in some way responsive
        //  but may be internally broken
        //  as you could find out if you called one of the methods for real
        Debug.Write(string.Format("{0} Available", url));
    }
    else
    {
        //  well, at least it returned...
        Debug.Write(string.Format("{0} Returned, but with status: {1}", 
            url, response.StatusDescription));
    }
}
catch (Exception ex)
{
    //  not available at all, for some reason
    Debug.Write(string.Format("{0} unavailable: {1}", url, ex.Message));
}
34
paul

私は答えに遅すぎるかもしれませんが、このアプローチは私にとってはうまくいきます。 Socketを使用して、プロセスが接続できるかどうかを確認しました。接続を1〜3回確認しようとするとHttpWebRequestが機能しますが、24時間実行されるプロセスがあり、TimeOut Exceptionがスローされるため機能しなくなるWebサーバーの可用性を時々確認する必要がある場合。

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                var result = socket.BeginConnect("xxx.com", 80, null, null);
                bool success = result.AsyncWaitHandle.WaitOne(3000,false); // test the connection for 3 seconds
                var resturnVal = socket.Connected;
                if (socket.Connected)
                    socket.Disconnect(true);
                socket.Dispose();
                return resturnVal;
4
Victor