- PR -

ASP.NETの二重クリック防止について

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-08-27 16:44
引用:

suwaさんの書き込み (2005-08-27 11:44) より:

実際にはここはDBの更新処理が入りますが、まだ未実装のため、代わりにSleep()を入れております。
検証目的であってもこれは宜しくなかったでしょうか。


 いえ、デフォルト環境なら90秒でアボート例外が発生するはずです。今のスリープは50秒になっていますが、それを100秒に延ばせば、アボートすると思います(デフォルトでは)。そういう作りで大丈夫ですか?
_________________
suwa
会議室デビュー日: 2005/08/26
投稿数: 8
投稿日時: 2005-08-31 18:17
引用:
 いえ、デフォルト環境なら90秒でアボート例外が発生するはずです。今のスリープは50秒になっていますが、それを100秒に延ばせば、アボートすると思います(デフォルトでは)。そういう作りで大丈夫ですか?



コメント遅くなりました。
手元の環境で100秒に設定してやってみましたが、アボートされませんでした。
実際にはWebForm2.aspxの画面が表示されました。
設定などはデフォルトのままで、何も変えていないつもりです。

大丈夫ですか?と言われますと、実は自信を持って答えることはできません。
今回の検証用のコードを書く際にThread.Sleep()を使っておりますが、
最終的にはThread.Sleep()の箇所はDBの更新処理のロジックに置き換わり、
Thread.Sleep()を使うことはありません。

MSDNのドキュメントを見ると、Thread.Sleep()メソッドは
”指定した時間の間現在のスレッドをブロックします。”とあるので、
これがIIS(.NET Frameworkかな?)にとって見れば、
一定時間レスポンスが返ってこないことによるタイムアウトの検出?で
アボートを引き起こす、ということが予想されるのでしょうか。これも自信ありませんが。。。
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-08-31 18:33
Thread.Sleep(5000);

これって、5秒のスリープの気がします。
環境無いので、記憶で書いてますけど。。
(違ったらすいません。。)

で、以下はちょっと脱線ですけど。
タイムアウトって一言で言っても、
Server.ScriptTimeout(だったかな?失念)の設定値やら
SQLの応答タイムアウトやら、
ネットワーク機器の設定内容とかが
原因になることがあるようですので、
今のうちにしっかり検証データを残すことをお勧めします〜。


suwa
会議室デビュー日: 2005/08/26
投稿数: 8
投稿日時: 2005-09-01 19:11
引用:
Thread.Sleep(5000);

これって、5秒のスリープの気がします。


はい、これは5秒のスリープとなります。

引用:
タイムアウトって一言で言っても、
Server.ScriptTimeout(だったかな?失念)の設定値やら
SQLの応答タイムアウトやら、
ネットワーク機器の設定内容とかが
原因になることがあるようですので、



なるほど、Thread.Sleep()に限らず、他にもタイムアウトを引き起こすものは色々ありますね。
検証は念入りに行っていきたいと思います。
ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-09-01 21:23
> これって、5秒のスリープの気がします。
 あ〜、突っ込まれた。。。5秒ですね。


> 手元の環境で100秒に設定してやってみましたが
 Debug モードになっていたら、変わるかもしれません。
デバッグ中にいちいち切れていたら、デバッグできませんからね。
# VS2005 のヘルプには、Debug モードでないときのみ機能する、と書いてあります。
Release モードにすることはもちろん、
web.config にも設定がありますから、
注意してリリースモードにして、検査してみてください。


> 最終的にはThread.Sleep()の箇所はDBの更新処理のロジックに置き換わり
 もちろんそうでしょう。
DB 更新処理にどれくらい時間がかかるか、わかりますか?
それは調べておかなければならないですよね。

 「こんな設定もあるんだ」程度に憶えておいてください。
不必要に不安にさせたなら、申し訳ありませんでした。

_________________
suwa
会議室デビュー日: 2005/08/26
投稿数: 8
投稿日時: 2005-09-02 11:06
> Debug モードになっていたら、変わるかもしれません。
コメントを参考にReleaseモードで確認してみました。
なるほど、90秒くらいでアボートされました。

具体的なDB更新処理のロジックはまだ実装していませんが、
何十秒もかかるような大量の処理を行うものではないので、今回は問題ないと思われます。
もちろん実装が始まったら、検証を念入りに行うつもりでいます。

最初の話題からそれてしまいましたが、自分が意識していなかったことでしたので
早い段階で気づくことができたのは良かったと思います。ありがとうございます。
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2005-09-02 17:42
1点だけ。

引用:

suwaさんの書き込み (2005-09-02 11:06) より:
> Debug モードになっていたら、変わるかもしれません。
コメントを参考にReleaseモードで確認してみました。
なるほど、90秒くらいでアボートされました。


Debugビルドの場合は用途がデバッグのため
IISで設定した「ASPのスクリプトタイムアウト」(既定90秒)で
タイムアウトしません。
_________________
ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/
日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/

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