[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]
「[[マイクロソフト系技術情報 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)~
***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
***[[HttpClientのタイムアウト>HttpClientの類の使い方]] [#u3c05c7a]

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

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

***コネクション・タイムアウト(接続のタイムアウト) [#q30f807b]
クエリの接続のタイムアウト

-参考
--sqlconnection.connectiontimeout~
https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

***コマンド・タイムアウト(実行タイムアウト) [#x272b480]
***コマンド・タイムアウト(実行のタイムアウト) [#x272b480]
クエリの実行のタイムアウト

-参考
--sqlcommand.commandtimeout~
https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx

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

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

**Webサーバ [#g658953d]

***IISのタイムアウト [#sabeef96]
意外にも、コネクション・タイムアウト以外を発見できず。
***コネクション・タイムアウト(接続のタイムアウト) [#t1601af4]
-こちらは、Keep-Alives系のタイムアウトになる。
-TCP の RST パケットが送信されるもよう。

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

***上記以外のタイムアウト [#sabeef96]
-意外にも、上記以外のタイムアウト値を発見できず。
-実行タイムアウト系は、[[APサーバ>#e9d9bac9]]のタイムアウトだからか。

**APサーバ [#e9d9bac9]

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

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

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

***[[WCFサーバーのタイムアウト>WCFのタイムアウト]] [#b3c014d3]
WS-*だけあり、色々あって難しい(のが普及しなかった理由でもありそう)。

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

-HttpSessionState.Timeout プロパティ (System.Web.SessionState)~
-参考
--HttpSessionState.Timeout プロパティ (System.Web.SessionState)~
https://msdn.microsoft.com/ja-jp/library/system.web.sessionstate.httpsessionstate.timeout.aspx
-sessionState 要素 (ASP.NET 設定スキーマ)~
--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]
-ロック タイムアウトのカスタマイズ~
-下記で説明したロックによるブロッキングのタイムアウト値。
--[[SQL Server でのロック・タイムアウト]]
--[[DBMSのロック・分離戦略と同時実行制御]]

-参考
--ロック タイムアウトのカスタマイズ~
https://technet.microsoft.com/ja-jp/library/ms177413.aspx

***トランザクション・タイムアウト(トランザクション実行のタイムアウト) [#s0f84dc7]
-トランザクション処理の実行のタイムアウト

-TransactionScopeに実装されていることから、~
[[コマンド・タイムアウト>#x272b480]]同様に、クライアント側の設定である模様。

-参考
--C# の TransactionScope のタイムアウトの設定方法 - C# 入門~
https://csharp.sql55.com/database/how-to-set-transaction-scope-timeout.php

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

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

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

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

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

*コマンド・タイムアウト(実行のタイムアウト) [#iefe1c0c]

**クライアント側設定 [#z27a3d3a]
***[[DBのクライアント側のコマンド・タイムアウト>#x272b480]] [#cdfd3586]
***[[DBのクライアント側のトランザクション・タイムアウト>#s0f84dc7]] [#ze41a464]

**サーバ側設定 [#ja20bdee]
***[[ASP.NETのサーバ側タイムアウト>#i63c551d]] [#wbb6bcaf]

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

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

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

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

-ConnectionやTransactionオブジェクトは、CloseされないでGCされるとTransactionをロールバックする仕様であるため。
-従って、Exceptionが上がっているのにTransactionオブジェクトをCommitするようなコードを書いてはダメ。
--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]], [[:障害対応]], [[:性能]]
Tags: [[:あるある]], [[:.NET開発]], [[:ASP.NET]], [[:障害対応]], [[:性能]]


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