「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>ASP.NET]]

* 目次 [#gc97feb4]
#contents

*概要 [#g81b085b]
ASP.NETのタイムアウトについての考慮点を纏めました。

*クライアント側の設定 [#v3a30df6]
クライアント側のタイムアウトは、

リクエスト-レスポンス間のタイムアウトについて言及しているものが多いので、

タイムアウト後にサーバ側が
-動作し続けるものと、
-動作し続けないもの

があるので注意が必要。

**HTTPクライアント [#v2e7b620]
-HTTPクライアント側(クライアント側)のタイムアウト値。
-こちらは、タイムアウト後にサーバー側が動作し続けるモノが多い。
-HTTPクライアントに依って異なるが、だいたい以下のものがある。

***WebRequest [#ab3611c9]
-WebRequest.Timeout プロパティ (System.Net)~
https://msdn.microsoft.com/ja-jp/library/system.net.webrequest.timeout.aspx

***HttpClient [#u3c05c7a]
-HttpClient.Timeout プロパティ (System.Net.Http)~
https://msdn.microsoft.com/ja-jp/library/system.net.http.httpclient.timeout.aspx

***[[WCFクライアント>WCFのタイムアウト]] [#x0336d92]

**DBクライアント [#bb5dddc8]
-データ・プロバイダ側(クライアント側)のタイムアウト値。
-こちらは、タイムアウト後にサーバ側が停止(ロールバック)されるモノが多い。
-データ・プロバイダに依って異なるが、だいたい以下のものがある。

***コネクション・タイムアウト(接続のタイムアウト) [#q30f807b]
--sqlconnection.connectiontimeout~
https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

***コマンド・タイムアウト(実行タイムアウト) [#x272b480]
--sqlcommand.commandtimeout~
https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx

*サーバ側の設定 [#l681928c]
サーバ側のタイムアウトは、~
実行タイムアウト以外に様々なタイムアウトが存在する。

実行タイムアウトの場合、~
タイムアウト後にサーバ側は動作を停止する(当然といえば当然)。

**Webサーバ [#g658953d]

***IISのタイムアウト [#sabeef96]
意外にも、コネクション・タイムアウト以外を発見できず。

***コネクション・タイムアウト(接続のタイムアウト) [#t1601af4]
-接続のタイムアウトを設定する~
https://msdn.microsoft.com/ja-jp/library/cc759416.aspx

**APサーバ [#e9d9bac9]

***アプリケーション プールのアイドル タイムアウト [#k9517c56]
-アプリケーション プールのアイドル タイムアウト設定を構成する (IIS 7)~
https://technet.microsoft.com/ja-jp/library/cc771956.aspx

***ASP.NETの実行タイムアウト [#i63c551d]
web.config(httpRuntimeタグのexecutionTimeout属性)に記述する。

-HttpRuntimeSection.ExecutionTimeout プロパティ (System.Web.Configuration)~
https://msdn.microsoft.com/ja-jp/library/system.web.configuration.httpruntimesection.executiontimeout.aspx
-httpRuntime 要素 (ASP.NET 設定スキーマ)~
https://msdn.microsoft.com/ja-jp/library/e1f13641.aspx

***ASP.NETのSessionタイムアウト [#t2b5f745]
web.config(sessionタグのtimeout属性)に記述する。

-HttpSessionState.Timeout プロパティ (System.Web.SessionState)~
https://msdn.microsoft.com/ja-jp/library/system.web.sessionstate.httpsessionstate.timeout.aspx
-sessionState 要素 (ASP.NET 設定スキーマ)~
https://msdn.microsoft.com/ja-jp/library/h6bb9cz9.aspx

***各種認証のタイムアウト [#oeb5d50b]
-[[Forms認証のタイムアウト>ASP.NET Forms認証]]
-ASP.NET Identityのタイムアウト

**DBサーバ [#u9df772c]
-DBに依って異なるが、だいたい以下のものがある。
-通常、DBの実行タイムアウト相当は、データプロバイダ側にある模様。

***ロック・タイムアウト(DBのロック待ちのタイムアウト) [#uedd19dd]
-ロック タイムアウトのカスタマイズ~
https://technet.microsoft.com/ja-jp/library/ms177413.aspx

*コネクション・タイムアウト(接続のタイムアウト) [#z0ed5324]
クライアント側設定とサーバ側設定がある。

コネクション・レベルのタイムアウトなので、~
どちら側の設定の場合も、タイムアウト時に、サーバは動作をしていないことになる。

**クライアント側設定 [#z27a3d3a]

***[[DBのクライアント側タイムアウト>#q30f807b]] [#xc70c34d]

**サーバ側設定 [#ja20bdee]
***[[IISのサーバ側タイムアウト>#t1601af4]] [#d6e6963c]

*タイムアウトとトランザクションとの関連 [#hb057072]
**クライアント側タイムアウト [#n26e1e1e]
クライアント側タイムアウトでは、APサーバのThreadは停止しないことがある。

停止しない場合、Transactionの結果はAPサーバの処理結果に依る。

**サーバ側タイムアウト [#i1b6be1c]
サーバ側タイムアウトでは、APサーバのThreadが停止する。

停止する場合は、Transactionはロールバックされる。~

-ConnectionやTransactionオブジェクトは、CloseされないでGCされるとTransactionをロールバックする仕様であるため。
-従って、Exceptionが上がっているのにTransactionオブジェクトをCommitするようなコードを書いてはダメ。

*参考 [#sb0bfa38]
-ASP.NET & IIS におけるタイムアウトの設定 - kendik.net~
http://kendik.hatenablog.com/entry/2015/01/31/014554

-ASP.NETでセッションのタイムアウト時間が指定どおりにならない - QA@IT~
http://qa.atmarkit.co.jp/q/419

-タイムアウト発生時のトラブルシューティング~
https://technet.microsoft.com/ja-jp/library/ms190181.aspx

-データベースでのタイムアウトを設定する~
http://itdoc.hitachi.co.jp/manuals/3020/30203M0461/EM040144.HTM

----
Tags: [[:あるある]], [[:.NET開発]], [[:ASP.NET]], [[:障害対応]], [[:性能]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS