- PR -

WEBサービスのタイムアウトについて

1
投稿者投稿内容
ポテチ
ベテラン
会議室デビュー日: 2003/03/28
投稿数: 69
投稿日時: 2004-04-30 14:47
WEBサービスを使ったアプリケーションを作成してます。
WEBサービスを提供しているサーバをクライアントで決定することができる
ため、場合によっては存在しないIPアドレスを指定する事も考えられます。
そのため、タイムアウト値を5秒に設定して問い合わせを行おうと考えました。
ただし、存在しないIPアドレスだと5秒でなく20秒から30秒程度待たないと
タイムアウトをCatchできません。
タイムアウト値で有効なのは、サーバ(IPアドレス)が存在した時だけでした。
どうすれば、サーバが存在しない時のタイムアウトを設定できますか?


Dim Server_IP As String
'WEBサービスインスタンス
Dim websrv As New epsrv.Service1
websrv.Timeout = 5 * 1000 'タイムアウトを5秒に設定する
websrv.Url = "http://" & Server_IP & "/epsrv/Service1.asmx?"

Try
Dim strReceiveData As String
  strReceiveData = websrv.TEST()
Catch ex As Exception
'TimeOut
エラー処理
End Try

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-01 15:14
諸農です。

タイムアウト値の指定は出来ないのですが、
System.Net.Dnsを使うといいかもしれません。

WEBサービスではなくSocket接続と、Dnsクラスの名前解決とを比較してみたところ、
前者のSocket.Connect()が20〜30秒前後でエラーになるのに対し、
後者のDnsであれば10秒以内でエラーになりました。
#繰り返せば4〜5秒でエラーになりますが。。意味無いですね(^^;

コード:
DateTime dt = DateTime.Now;
try
{
    //IPHostEntry hostInfo = Dns.GetHostByName("AAA");
    IPAddress hostIPAddress = IPAddress.Parse("192.168.0.255");
    IPHostEntry hostInfo = Dns.GetHostByAddress(hostIPAddress);
}
catch(Exception /*e*/)
{
    System.Diagnostics.Trace.WriteLine("ERR = " + (DateTime.Now - dt).ToString());
}



_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-06 08:39
脱線:
 別所での話題になりますが、こういうときにsetjmp, longjmpと、SIGALRMを使います。


 Windows環境では、どうしましょうねぇ。。。タイマーで割り込み(イベント)を発生させることはできますね。スレッドにして、スレッドを強制終了とか???
ポテチ
ベテラン
会議室デビュー日: 2003/03/28
投稿数: 69
投稿日時: 2004-05-08 00:33
JubeiさんJittaさん
ありがとうございます。
Jubeiさんの実装は簡単に実現できそうですが、タイムアウト値の指定ができないのは残念です。
Jittaさんの実装は難しそうですね。。C言語ですか。。
1

スキルアップ/キャリアアップ(JOB@IT)