@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

クライアント側のタイムアウトについて

1
投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-08-08 17:48

お疲れ様です。
いつもお世話になっております。

vb.net2003にてクライアント&サーバアプリケーションを開発しております。

さっそくの質問なのですが、
現在、クライアント側アプリから、DB参照、更新等の処理を実行する為、
サーバ側アプリを呼び出して処理をしております。

そこで、稀にサーバ側での処理にて時間がかかり過ぎて、クライアント側でタイムアウトが発生してしまいます。

クライアントでタイムアウトが発生していても、サーバ側は処理はまだ実行中ですので。クライアント側、タイムアウト直後に再度サーバ処理が実行されようとすると
エラーになります。(前回の処理がまだ実行中の為・・・)

こういった現象を防ぐには一般的にどういった手法がとられるのでしょうか?
経験&知識が少なく困っております。

どうかご教授願えませんでしょうか?

@サーバ側でクライアントとの接続が切れたと判断出来る?
Aクライアント側タイムアウト時間を延ばすべき?
Bその他の手法がある?

※多少、アプリの作りにも問題があるとは思いますが、
他人PGの為触れたくありません・・・。

よろしくお願いいたします。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-08-08 19:41
引用:

※多少、アプリの作りにも問題があるとは思いますが、
他人PGの為触れたくありません・・・。


「アプリ」と言っているのはクライアントなのか、サーバなのか、
はたまた、この「システム」全体をさしているのか、によって
とれる手段の選択範囲が異なると思うのですが。
# すべてだったらそもそもなんにもできませんよねぇ。

引用:

@サーバ側でクライアントとの接続が切れたと判断出来る?
Aクライアント側タイムアウト時間を延ばすべき?
Bその他の手法がある?



一つ目の場合、そのようにサーバ側から定期的にクライアントへの通信を
行うなどの「仕組み」ができているのであれば可能かもしれませんね。
できてないので作りたい、ということであれば、どのように実装するか
いくらでもやりようは有ると思いますが。もちろんそのためにある意味
余計な通信が必要になるため、「負荷」がかかる事になるかとおもいますが。

二つ目の場合、単純にタイムアウトを延ばせば対応は可能なのでしょう。
それがシステムの「ポリシー」に違反しなければ。

その他の手法など、考えればいくらでもあるとおもいますけど。
自分自身で思いつかないのであれば、チームの中でミーティングを
するなどして案を出し合ってみてはいかがですか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-08-08 23:38
む・・・多少の問題じゃないと思う。
引用:

クライアントでタイムアウトが発生したため、、タイムアウト直後に再度サーバに処理を依頼すると、サーバ側は処理はまだ実行中ですので、エラーになります。(前回の処理がまだ実行中の為・・・)


それって、これだけしか読んでいない人にとっては、「本当に C/S システム?」と疑いたい。
例えば、Web アプリケーションって、C/S システムですよね?そこで、クライアントが勝手にサーバへリクエストを再投すると、サーバはエラーを返しますか?ちゃんと処理してくれますよね。

 このシステム、C/S なんだから複数のクライアントがあると思いますが、本当に複数のクライアントのリクエストを、同時に処理してくれます?


 で、本題ですが、長時間かかっていたら何らかの支障があると判断するから、タイムアウトさせているわけですよね?だったら、タイムアウトすることを前提に作っておくべきだったのではないですか?(サーバに支障があると判断したからタイムアウトしたわけで、だったら再投できるのがおかしい)
で、ここを、対症療法的に処置すると、システムが破綻してきます。
 まず、どうあるべきかをきちんと決め、その上で対応してください。
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-08-09 09:03

皆様、さっそくのご返答ありがとうございます。
どうやら、ゆくゆく調べてみますと、サーバからHTMLが返却されていたので、
どうやらIISでタイムアウトが起こっているような気がします。

みなさんのおっしゃる通り、安易に考えすぎていたと思います。

原因の追求も含め、もう少しPJ内で検討いたします。

知識&経験が乏しく質問に矛盾していた点もあったとは思いますが、
対応していただき、ありがとうございました。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-09 09:38
引用:

.netさんの書き込み (2006-08-09 09:03) より:

どうやら、ゆくゆく調べてみますと、サーバからHTMLが返却されていたので、
どうやらIISでタイムアウトが起こっているような気がします。


想像ですが、データベースサーバーの応答時間がタイムアウトになっているということだと思うので問題は一緒ではないでしょうか?
手を加えたくないというお気持ちもわかるのですが、一般的にどのような対処をするかというとSQLをチューニングするとか、インデックスの設定を再検討するなどによってタイムアウトを防ぐごとを検討することが、やはり一般的なんだと思います。

単にタイムアウトの時間を長くしたがる方がいらっしゃいますが、これは付け焼刃的な対処で再発する危険性が残ることが往々にしてあります。
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-08-09 09:45
さっそくの返信ありがとうございます。

やはりそうですか。
こちらでも問題のPGでやっている処理を見直してみたのですが、
あまりにひどく、手直ししてもらうことになりました。。。

(SQLをかなりの回数発行していたりで・・・。)

あと、原因もこちらの検討違いで、サーバはタイムアウトになっても
きっちり処理をしてくれています。
(タイムアウトになれば、処理を中断し、「タイムアウトになりました」といった、エラーをクライアント側へきっちり返却してくれている。)

ご迷惑をお掛けしました・・。ありがとうございました。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-09 10:07
>SQLをかなりの回数発行していたりで・・・。
単純なSQLを投げて、その結果をアプリで処理して、また単純なSQLを投げて…っていうパターンですかね。
SQL使いが一人いれば終わりそうに思えますね…お疲れ様です。
1

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