- PR -

[HttpException]: 要求がタイムアウトしました

1
投稿者投稿内容
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2004-06-02 18:02
【環境】
OS:Windows 2000 Server
.NET:.NET Framework 1.0
言語:C#
RDB:SQL Server 2000

ASP.NETでWebアプリを構築したのですが、検索条件により取得する(正確には集計する)データ件数が多いときにWebサービスで「スレッドを中止しようとしました。」が発生の直後、Webアプリで
--------------------------------------------------------------
クライアントは 'text/html; charset=utf-8' の応答のコンテンツ
タイプを見つけましたが、'text/xml' が必要です。
要求は以下のエラーにより失敗しました。
…(略)
[HttpException]: 要求がタイムアウトしました
--------------------------------------------------------------
のエラーが発生します。

構成は
Webアプリ(a.aspx) → Webサービス(b.asmx) → SQL Server(ストアド)
で、WebアプリからWebサービスへリクエストし、Webサービスはデータセットを返します。

  • Webサービスでは、ループで何度も同じストアドを呼び出す
  • Webサービスのループ内では、SQL Serverとの接続タイムアウトを極力避けるために、 SqlDataAdapterのFillメソッドにConnectionのOpenおよびCloseを依存しておりまた、 実際SQL Serverとの接続タイムアウトは発生していない
  • Webアプリ内のWebサービスのインスタンスのタイムアウトはInfiniteに設定

Webサービスを直接実行しても、データ取得に時間は掛かりますがエラーにはなりません。
Webアプリの上記エラーは、検索開始から約100秒で発生します。
IISの「接続のタイムアウト」は900秒に設定してあります。

憶測ではありますが、Webアプリ(a.aspx)のタイムアウト時間を変更できれば良いのではないかと思うのですが、どうすればよいかわかりません。

少々レスポンスが悪くても良いので、タイムアウトにならずに済む方法をご教授ください。
また、的を外しているようでしたら、ご指摘ください。
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-03 08:49
引用:

にしさんの書き込み (2004-06-02 18:02) より:

ASP.NETでWebアプリを構築したのですが、検索条件により取得する(正確には集計する)データ件数が多いときにWebサービスで「スレッドを中止しようとしました。」が発生の直後、Webアプリで
--------------------------------------------------------------
クライアントは 'text/html; charset=utf-8' の応答のコンテンツ
タイプを見つけましたが、'text/xml' が必要です。
要求は以下のエラーにより失敗しました。
…(略)
[HttpException]: 要求がタイムアウトしました
--------------------------------------------------------------
のエラーが発生します。


 このエラーは、Webアプリが出してクライアントに返していますか?それとも、クライアントがサーバから応答がないので生成していますか?そのあたりの切り分けはどのように行いましたか?


>以下、該当しなければ無視してください
システムの利用者は、誰をターゲットにしているのでしょう?「8秒ルール」とか「3秒ルール」とかいうのがあるのですが、経験的にレスポンスに10秒以上かかるようでは、利用者はいらいらします。これが、特定のページでのみ発生するなら、もう少し待ってもらえます。少数かつ特定の利用者をターゲットにしているなら問題は少ないですが、不特定の利用者を想定したシステムなら、抜本的な見直しが必要です。
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2004-06-03 11:39
Jittaさんへ
お返事ありがとうございます。

引用:

Jittaさんの書き込み (2004-06-03 08:49) より:

 このエラーは、Webアプリが出してクライアントに返していますか?それとも、クライアントがサーバから応答がないので生成していますか?そのあたりの切り分けはどのように行いましたか?


エラーはサーバー側で生成されています。
Webサービスを利用している個所をTry〜Catchで、「HttpException」「Exception」をキャッチし、それぞれでキャッチしたエラーメッセージをイベントログに書き込んでいます。
エラーは「Exception」でキャッチされています。(「HttpException」ではないです)
クライアントへはページ内にエラー発生の旨のメッセージを書き込んで返しています。

引用:

Jittaさんの書き込み (2004-06-03 08:49) より:

>以下、該当しなければ無視してください
システムの利用者は、誰をターゲットにしているのでしょう?「8秒ルール」とか「3秒ルール」とかいうのがあるのですが、経験的にレスポンスに10秒以上かかるようでは、利用者はいらいらします。これが、特定のページでのみ発生するなら、もう少し待ってもらえます。少数かつ特定の利用者をターゲットにしているなら問題は少ないですが、不特定の利用者を想定したシステムなら、抜本的な見直しが必要です。


そうですね。
イライラすると思います。
でも、特定少数がターゲットで特定のページでかつ、利用者がレスポンスより得られるデータを望んでいるので仕方がないです。
近々仕様そのものを見直すつもりですが、取り急ぎ現状を打破しないといけませんので。

まだまだ質問の仕方が悪いかもしれません。
不明な点がございましたらご指摘ください。
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-03 12:43
 私が知っていることでは、お望みの答えは出せません。

 ただ、経験的に、「あれが必要、これが必要」といっても、本当に全部が必要なことは、まずありません。例えば、「この検索をすると千件のデータが返ってくる」というときに、千件のデータを印刷する為には必要ですが、UI上での操作の過程としては不要です。不要というか、「誰がどうやって見んねん?」ということですが。

 その他、ボトルネックがどこか調査して、そこを改善できないか検証するのも、方法の一つです。


っと、MSDNを「web NEAR サービス タイム NEAR アウト」で検索すると、ばっちりなのが出てきました。これでいけるかな?
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2004-06-09 10:40
引用:

Jittaさんの書き込み (2004-06-03 12:43) より:
 ただ、経験的に、「あれが必要、これが必要」といっても、本当に全部が必要なことは、まずありません。例えば、「この検索をすると千件のデータが返ってくる」というときに、千件のデータを印刷する為には必要ですが、UI上での操作の過程としては不要です。不要というか、「誰がどうやって見んねん?」ということですが。



大量の検索結果が出力されるのであれば、私も経験的にそう思います。
しかし、今回は出力されるデータ(ヘッダデータ)は100件程で、その子要素として分析データが階層表示されます。

で、その後色々試してみたのですがうまく行きませんでした。
検索時にはヘッダデータのみ取得し、展開表示指定されたヘッダデータのみ都度分析データを取得&キャッシュするなど、なるべく負荷を分散しました。
ただし、印刷(ストリームでPDF出力)にはすべてのデータを取得する必要があり、相変わらずタイムアウトは発生しますが、非同期で処理を行うなど、工夫しようと思います。

最後になりましたが、お返事遅くなって申し訳ありませんでした。
アドバイスありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-09 11:38
 WebClientProtocol.Timeout プロパティを調整しました?「約100秒」っていうことからもぴったりだと思ったのですが。。。
1

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