Web サービスのメソッドが正常に動作しているかどうかを確認するにはどうすればよいですか? ピングが使えません。クライアントによって Web サービスから呼び出されるあらゆる種類のメソッドをチェックしたいと考えています。一般化するのは難しいことはわかっていますが、何らかの方法があるはずです。
8 に答える
Web サービス メソッドが「正常」に機能しているかどうかを知る唯一の方法は、メソッドを呼び出してから、結果が「正常」かどうかを評価することです。「良い」対時間の記録を残したい場合は、評価の結果をログに記録できます。
これを行うためのより一般的な方法はありません。検討:
- サービス エンドポイントへの HTTP 接続を作成するコードを作成することもできますが、成功したからといって、メッセージを送信した直後にサービスが例外をスローするかどうかはわかりません。
- 接続して無効なメッセージを送信することはできますが、それではあまりわかりません。
- 接続して有効なメッセージを送信し、結果をチェックして有効であることを確認できます。これにより、実際のクライアントが直後にサービスを呼び出すと、実際のクライアントは有効な結果を期待するはずであるというかなり良い考えが得られます。
- サービスがそれをクラッシュの機会と見なさない限り、あなたを怒らせるだけです!
最善の方法は、WCF トレース (おそらくメッセージ レベルのトレースを使用) を使用して、サービスで実際に何が起きているか (良いことも悪いことも) をログに記録することです。その後、人間はログを見て、それらが「問題ない」かどうかを確認できます。
試してみてくださいcurl
。これは Linux ツールであり、Cygwin にもあるはずです。
$ curl http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
多くのオプションがあります。例は「ネット」で見つけることができます。
ちょっとしたツールや Windows サービスなど、必要なものを自分で作成してから、次の 2 つの記事を参照してください。
C#:Webサービスが稼働中であることをプログラムでチェックする方法は?
Web サービスが稼働しているかどうかを確認する - 効率的に
編集:これは、呼び出しが行われる前に毎回外部サービスがまだ存在するかどうかを知る必要がある同様のシナリオでの私の実装でした:
bool IsExternalServiceRunning
{
get
{
bool isRunning = false;
try
{
var endpoint = new ServiceClient();
var serviceUri = endpoint.Endpoint.Address.Uri;
var request = (HttpWebRequest)WebRequest.Create(serviceUri);
request.Timeout = 1000000;
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
isRunning = true;
}
#region
catch (Exception ex)
{
// Handle error
}
#endregion
return isRunning;
}
}
Web サービスのメソッド内で try catch を使用し、例外をログ ファイルまたはイベント ログに記録するだけです。例:
[OperationContract]
public bool isGUID(string input)
{
bool functionReturnValue = false;
try
{
Guid guid;
functionReturnValue = Guid.TryParse(input, guid);
}
catch (Exception ex)
{
Log.WriteServerErrorLog(ex);
}
return functionReturnValue;
}
Web サービスに ping を実行する必要はありませんが、代わりにウォッチドッグ サービスなどを使用してサーバーに ping を実行します。Web サービスを「ping」する必要はありません。また、とにかくこれを行う必要はないと思います。Web サービスが機能するか、悪いコードが原因で機能しないかのどちらかです。
トレースを使用することもできます。