一連のWebサービスが稼働しているかどうかを監視するC#アプリケーションを作成する必要があります。ユーザーはドロップダウンからサービス名を選択します。プログラムは、対応するサービスURLでテストし、サービスが実行されているかどうかを示す必要があります。それを行う最良の方法は何ですか?私が考えている1つの方法は、wsdlをダウンロードできるかどうかをテストすることです。 ISより良い方法がありますか?
注:このアプリケーションの目的は、ユーザーがサービス名のみを知る必要があることです。サービスの対応するURLを覚えておく必要はありません。
このC#アプリケーションのWebサイトバージョンとデスクトップアプリケーションバージョンが必要です。
注:既存のサービスはWCFを使用しています。しかし、将来、非WCFサービスが追加される可能性があります。
注:私のプログラムは、サービス内の操作を認識しません(または興味がありません)。したがって、サービス操作を呼び出すことはできません。
参照
これは機能を保証するものではありませんが、少なくとも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));
}
私は答えに遅すぎるかもしれませんが、このアプローチは私にとってはうまくいきます。 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;