- - PR -
ASPのタイムアウト
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-07-17 01:18
こんばんわ。
ASPプログラムで原因が特定できないエラーに遭遇して悩んでいます。 googleでもいろいろ探してみましたが解決には至っておりません。 よいお知恵を拝借できれば幸いです。 なお私はエラー対策の助っ人で、該当システムの担当ではないです。 プログラムの構成: Windows 2000 Server/IIS上のASPからVB6のActiveX DLLをServer.CreateObjectで作って呼んでいます。 ActiveXではADODB.ConnectionとADODB.Commandを使い、SQL Server 2000上のストアドプロシージャを呼んでいます。 ASPには Server.ScriptTimeout = 18000 VB6プログラムでは ADODB.Command.CommandTimeout = 0 が指定してあります。 原因が特定できない事象: このストアドプロシージャは実行に(少なくとも)1時間以上かかります。プログラムの作りの問題かデータ件数の問題かは不明ですが。 該当のASPを呼び出すと、3600秒ちょうどでブラウザが「ページが見つかりません …(略)… またはDNSエラーです」になります。 秀まるおさんのとこの横取り丸+InetSpyでHTTPレスポンスを確認したら、3600秒+数ミリ秒で「クライアントから切断」とされ、レスポンスデータは空でした。 ブラウザにエラー画面が表示された後でも、ストアドプロシージャの実行は続いています。 なおデータの量を抑え、1時間以内に終了するデータであれば、ASPまで正常に制御が復帰します。 1時間以上かかるデータ量の状態で、ASPの Server.ScriptTimeout を60にすると、レスポンスは 500 / Internal Server Error でした。エラーメッセージもスクリプトタイムアウトと出ています。 Server.ScriptTimeout関連の情報を読むと「サーバコンポーネントの実行時間は含まれない」という記述に出会うのですが、このケースのようにActiveX DLLから呼ぶストアドプロシージャの実行時間が多大である場合には、ASPのServer.ScriptTimeoutは関係ないのでしょうか?(でも60秒の時にはタイムアウトしたので効果があるように見える) VBプログラムをIDEからデバッグ実行させた状態だと、VB6そのものが「応答なし」になるので、ADODB.CommandのExecuteメソッドから制御が戻っているかどうかは不明です。 ストアドプロシージャは実行を続けているので、Executeからは抜けておらず、IIS側で切れているのではないかと睨んでいますが、いったい3600秒後に誰(何)が実行を中断し、なぜレスポンスが空なのか、が特定できずに困っています。 原因特定または解決のためのよい方法があればご教授ください。 |
|
投稿日時: 2004-07-20 10:23
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=9686
こちらを参考にしてみてはどうでしょうか? ちなみに「IE タイムアウト "1時間"」でGoogleで検索してみました |
|
投稿日時: 2004-07-21 22:44
ありがとうございます。
1時間ってキーワードはころっと忘れてました。3600秒がインパクト大きすぎたので。 元のシステムがCOBOLのCS形態でWebに移植してるのですが、業務担当部署のパワーの問題でスレッド化してレスポンスを返すという改良はおそらく無理だろうと思われます。 あまりいい選択ではないですが、本番機&本番データが50分程度で返ってくるというので、当面今の仕組みのまま行く方向になりそうです。 ただ、同じような構成で1時間以上の処理が正常に実行できるプログラムが別システムであるそうなので、そちらとも相談してみることにします。 |
1
