質問者
WEBサービスのタイムアウト設定

質問
-
初めまして。毎回参考にさせて頂いております。
私が現在作成している環境はVS2003なのですが、皆さんの知識をお借りしたくて投稿させて頂きました。
VB.NETで作成したWindowsアプリ(クライアント)とWEBサービス(WEBサーバ)の処理で現在、困っております。
WEBサービスはDBの利用状況によって120秒以上時間が掛かるケースのあるアプリケーションになっています。クライアントアプリケーションはWEBサービスのタイムアウト設定を行っていないためデフォルトの100秒設定になっています。この場合、クライアント側はエラーが通知されるのですが、WEBサービスとしては最後まで処理を続行し、DBへの登録などコミットして終了してしまいます。
クライアントアプリケーションで使用しているWEBサービスのタイムアウト設定を延ばせば解決するケースなのかも知れませんが、WEBサービス側でタイムアウト設定を行い、ある時間以上かかる処理は途中で終了させたいと考えています。WEBサービスの処理で120秒経過するとそれまで処理していたDBへの登録内容などをコミットせずにロールバックして処理を強制的に終了させてクライアントに戻すようなことは出来ませんでしょうか?
すべての返信
-
・100秒以上かかる仕様にもかかわらず、クライアントもサーバもタイムアウトしてしまっては処理が永遠に出来ませんがいいのですか?
・クライアントと途切れているかどうかは、HttpResponse.IsClientConnected プロパティ で調べられますが、これで代替出来ませんか?
http://msdn2.microsoft.com/ja-jp/library/system.web.httpresponse.isclientconnected.aspx
・クライアントからは処理申し込みだけで、結果取出しを別画面にしませんか?
・独自でタイムアウトをするスレッドなり、デリゲートを仕込みます。
-
中博俊さん 回答ありがとうございます。
質問事項の説明不足で申し訳ありません。
100秒以内で処理されるのが正常なのですが、稀にDBの処理対象が多く設定されるようなケースがあり、時間内で処理できず、クライアント側はエラー(WEBサービスのタイムアウト)が発生した事がユーザーに表示され、WEBサービス側は処理を継続し、DB処理もコミットしてしまいます。ユーザーはエラー認識を持っているのに対し、実行した処理は正常に終了している現状を回避する方法としてWEBサービス側の処理を強制的に終了させたかったのです。
COM+ではタイムアウトの設定ができたような・・・という話を聞いたことがあったので、WEBサービスもできるのではないかなぁという発想で質問させて頂きました。
ソースを変更するのではなく、IISの設定やその他の設定でタイムアウトの設定ができないかと考えておりましたが、HttpResponse.IsClientConnected プロパティ のチェックや タイムアウトをするスレッドの仕込みなどは、工数やその他への影響などがあると思われますのでもう少し検討してみたいと思います。
ソースに修正を加える方法以外ではタイムアウトの設定はやはりできませんか?お手数お掛けしますが、よろしくお願いします。
-
trapemiya さん回答ありがとうございます。
クライアントの数がとても多く、修正工数がかさんでしまうのでクライアント側には修正をなるべく修正を加えたくないというのが今回の質問のホンネです。
>WebサービスでDB処理のタイムアウトを120秒とかに設定してしまえばいいような気がしますが・・・???
処理は下記のようになっています。
・DB検索
・DB検索結果のチェック処理
・トランザクション開始
・DB登録
・コミット OR ロールバックDBを検索する時などに設定するタイムアウトではなく、
この全処理のタイムアウトの設定を設定したいのですが、方法がありましたらご教授願います。