Webサービスのメソッドが正常に機能しているかどうかを確認するにはどうすればよいですか? pingが使えません。クライアントによってWebサービスから呼び出されているあらゆる種類のメソッドを引き続き確認したいと思います。一般化するのは難しいと思いますが、何らかの方法があるはずです。
Webサービスメソッドが「正常」に機能しているかどうかを知る唯一の方法は、メソッドを呼び出して、結果が「正常」であるかどうかを評価することです。 「細かい」対時間の記録を保持したい場合は、評価の結果をログに記録できます。
これを行うための一般的な方法はこれ以上ありません。考えてみましょう:
最善の方法は、WCFトレース(場合によってはメッセージレベルのトレースを使用)を使用して、サービスで実際に何が起こっているか(良いか悪いか)をログに記録することです。次に、人間はログを見て、ログが「正常」であるかどうかを確認できます。
私はこの方法を使用し、それはうまくいきます:
public bool IsAddressAvailable(string address)
{
try
{
System.Net.WebClient client = new WebClient();
client.DownloadData(address);
return true;
}
catch
{
return false;
}
}
webサービスのメソッド内でtrycatchを使用して、例外をログファイルまたはイベントログに記録するだけです。例:
[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サービスが機能するか、コードが正しくないために機能しません。
Powershellは、Webサービスエンドポイントを「ping」する非常に簡単な方法です。
次の式を使用します。
Test-NetConnection -Port 4408 -ComputerName 192.168.134.1
存在しない、またはリッスンしていないポートの障害応答は次のとおりです。
WARNING: TCP connect to 192.168.134.1:4408 failed
ComputerName : 192.168.134.1
RemoteAddress : 192.168.134.1
RemotePort : 4408
InterfaceAlias : Ethernet0
SourceAddress : 192.168.134.1
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : False
アドレス/ポートがリッスンしていてアクセス可能である場合の成功結果は次のとおりです。
ComputerName : 192.168.134.1
RemoteAddress : 192.168.134.1
RemotePort : 4407
InterfaceAlias : Ethernet0
SourceAddress : 192.168.134.1
TcpTestSucceeded : True
あなたはあなた自身に小さなツールやウィンドウズサービス、あるいはあなたが必要とするものを書くことができます、そしてこれらの2つの記事を見てください:
C#: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;
}
}
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>
たくさんのオプションがあります。例は 'ネットで見つけることができます。