「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次  †
概要  †
ASP.NETのタイムアウトについての考慮点を纏めました。
クライアント側の設定  †
クライアント側のタイムアウトは、
リクエスト-レスポンス間のタイムアウトについて言及しているものが多いので、
タイムアウト後にサーバ側が
があるので注意が必要。
HTTPクライアント  †
- HTTPクライアント側(クライアント側)のタイムアウト値。
 
- こちらは、タイムアウト後にサーバー側が動作し続けるモノが多い。
 
- HTTPクライアントに依って異なるが、だいたい以下のものがある。
 
WebRequest?のタイムアウト  †
DBクライアント  †
- データ・プロバイダ側(クライアント側)のタイムアウト値。
 
- こちらは、タイムアウト後にサーバ側が停止(ロールバック)されるモノが多い。
 
- データ・プロバイダに依って異なるが、だいたい以下のものがある。
 
コネクション・タイムアウト(接続のタイムアウト)  †
クエリの接続のタイムアウト
コマンド・タイムアウト(実行のタイムアウト)  †
クエリの実行のタイムアウト
サーバ側の設定  †
サーバ側のタイムアウトは、
実行タイムアウト以外に様々なタイムアウトが存在する。
実行タイムアウトの場合、
タイムアウト後にサーバ側は動作を停止する(当然といえば当然)。
Webサーバ  †
コネクション・タイムアウト(接続のタイムアウト)  †
- こちらは、Keep-Alives系のタイムアウトになる。
 
- TCP の RST パケットが送信されるもよう。
 
上記以外のタイムアウト  †
- 意外にも、上記以外のタイムアウト値を発見できず。
 
- 実行タイムアウト系は、APサーバのタイムアウトだからか。
 
APサーバ  †
アプリケーション プールのアイドル タイムアウト  †
ASP.NETのタイムアウト  †
web.config(httpRuntimeタグのexecutionTimeout属性)に記述する。
WS-*だけあり、色々あって難しい(のが普及しなかった理由でもありそう)。
ASP.NETのSessionタイムアウト  †
web.config(sessionタグのtimeout属性)に記述する。
各種認証のタイムアウト  †
DBサーバ  †
- DBに依って異なるが、だいたい以下のものがある。
 
- 通常、DBの実行タイムアウト相当は、データプロバイダ側にある模様。
 
ロック・タイムアウト(DBのロック待ちのタイムアウト)  †
- 下記で説明したロックによるブロッキングのタイムアウト値。
 
トランザクション・タイムアウト(トランザクション実行のタイムアウト)  †
コネクション・タイムアウト(接続のタイムアウト)  †
- コネクション・レベルのタイムアウトなので、
どちら側の設定の場合も、タイムアウト時に、
サーバは動作をしていないことになる。 
クライアント側設定  †
サーバ側設定  †
コマンド・タイムアウト(実行のタイムアウト)  †
クライアント側設定  †
サーバ側設定  †
タイムアウトとトランザクションとの関連  †
クライアント側タイムアウト  †
- クライアント側タイムアウトでは、APサーバのThreadは停止しないことがある。
 
- 停止しない場合、Transactionの結果はAPサーバの処理結果に依る。
 
サーバ側タイムアウト  †
- サーバ側タイムアウトでは、APサーバのThreadが停止する。
 
- 停止する場合は、Transactionはロールバックされる。
 
- ConnectionやTransactionオブジェクトは、CloseされないでGCされるとTransactionをロールバックする仕様であるため。
 
- 従って、Exceptionが上がっているのにTransactionオブジェクトをCommitするようなコードを書いてはダメ。
 
参考  †
Tags: :あるある, :.NET開発, :ASP.NET, :障害対応, :性能