【XML Webサービス】を開発していて困っています。


すごく時間のかかる処理をWebサービスとして提供した場合、クライアントからその処理を呼び出すとタイムアウトしてしまいますよね? これをタイムアウトさせない方法を教えてください。

理想的には、クライアントで設定したコールバック関数のようなものをWebサービス側で処理の途中にコールしてステータスを通知できるような方法が取れると良いです。

あるいは、呼び出し側に「処理は終わっていないけど止まってはいないよ」と通知して、処理が正常に継続している間はタイムアウトを防ぐような方法でしょうか。

開発環境としては Visual Studio 2005 を想定していますが、その環境に限定した話でなくても構いません。よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2007/03/06 01:46:34
  • 終了:2007/03/06 22:35:03

回答(1件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612007/03/06 09:50:01

ポイント200pt

質問内容の「すごく時間のかかる処理」=「DBアクセス」と勝手に解釈して回答させていただきます。


タイムアウトには、サーバーサイドでのセッションタイムアウトと

クライアントサイドでのブラウザのタイムアウトの2つがあるかと思います。

ご質問のケースでは後者に該当でしょうか。

これには、適度な間隔でターゲットブラウザにレスポンスを送出することで

対処できるかと思います。


次のページには、ASP+ADO+SQLServer+非同期クエリでの例が紹介されています。

何か参考になれば幸いです。(はずしていたらすみません。)

時間のかかるクエリでもブラウザをタイムアウトさせない (unibon)

id:you1982

ありがとうございます。これは参考になりました。「時間のかかる処理」というのは、今回の場合は計算なので、非同期処理にしなくても中でResponseは呼べそうですね。

後は欲を言えば単にタイムアウトしないだけでなく、現在の処理状況(計算が何パーセント完了したか)をクライアントに通知できる方法があると良いのですが、どうなんでしょうか・・・。


<補足>

ということで、以降、ご回答いただける方向けに補足させていただきます。

「時間のかかる処理」とは計算処理で、中で何かの呼び出しを追加してあげることは可能です。

また、クライアントからの呼び出し方法は同期処理を考えています。

2007/03/06 10:20:20
  • id:llusall
    >現在の処理状況(計算が何パーセント完了したか)をクライアントに通知できる方法
    ちょびっとずつ送信するレスポンスで進捗状況を吐き出せたいいですよね。(IMGタグや文字などでプログレスバー的に表示とか駄目でしょうか)
  • id:you1982
    ありがとうございます。Webサービスはよく分かっていないので、具体的にサーバー、クライアントそれぞれがどのような処理になるのかお時間ありましたら教えていただけないでしょうか?

    (実際のコードが欲しい、という意味ではなくて、簡単に処理の流れを教えていただけたら、ということです)

    もちろん、回答の方に書いていただいて結構ですので・・・。
  • id:you1982
    丁寧に動作例まで作成して頂いてどうもありがとうございます!大変、分かりやすかったです。これを参考に研究してみたいと思います。たびたびありがとうございました。
  • id:llusall
    たくさんのポイントありがとうございます。

    「XML Webサービス」というものは、私は全くなじみがないのですが、WEBアプリケーションは、ブラウザからのリクエストに対し、
    HTMLを始めとして、XMLやTXT,GIF,PDF・・・などなど、様々なものをレスポンスするものと認識しております。
    ターゲットブラウザのタイムアウトを避けるには、レスポンスの内容な何であれ、タイムアウトしない程度に、レスポンスを送出するのが定石と思われます。

    開発言語が違うようであれば、同様の機能があると思いますので自身で調べて見るか、はてなで再質問などしてみるのも良いかと思います。
  • id:you1982
    仰るとおりです。場当たり的な解決ではなく根本的な勉強の必要性を痛感しました。とりあえず当面の問題とは別に本でも読んでみようかな、と思ったのですが、なかなか良い本がないですね(苦笑)。

    ということで、「良い本教えて」をはてなに聞いてみることにしました。嗚呼、はてな無限ループ現象、、、

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません