クラシック ASP と ASP.NET の両方の開発者としての経験から、Server.ScriptTimeout
値を設定するための呼び出しはスコープ内で現在の要求に対してローカルであることを常に理解していました。つまり、呼び出しServer.ScriptTimeout = 600
により、現在の要求の処理時間が 10 分に設定されます。他のリソースへの後続の、または同時のリクエストでも、 のデフォルト設定が使用されますServer.ScriptTimeout
。
最近のコード レビューで、値を設定すると、アプリケーション プールがリサイクルされるまで、サイト内のすべてServer.ScriptTimeout
のページの処理時間が設定されることが通知されました。提案された「修正」は、次のようなものでした。
public class MyPage : Page {
private const int desiredTimeout = 600;
private int cachedTimeout;
private void Page_Load(object sender, EventArgs e) {
// cache the current timeout in a private store.
cachedTimeout = Server.ScriptTimeout;
Server.ScriptTimeout = desiredTimeout;
}
private void Page_Unload(object sender, EventArgs e) {
// restore the previous setting for the timeout
Server.ScriptTimeout = cachedTimeout;
}
}
Server.ScriptTimeout = 1
他のすべてのページは 1 秒間しか処理できないため、ページを呼び出している開発者がサイトをダウンさせる可能性があるため、これは私には奇妙に思えます。さらに、この動作は、現在の Page_Load イベントと Page_Unload イベントの間に発生する可能性のある現在のリクエストに影響を与えます。これは同時実行の悪夢のようです。
ただし、徹底するために、2 つのページで構成されるテスト ハーネスを作成しました。ページ 1Server.ScriptTimeout
は非常に大きな数値に設定し、ページ 2は の現在の値を表示するだけですServer.ScriptTimeout
。Page Oneに設定した値に関係なく、Page Twoには常にデフォルト値が表示されます。Server.ScriptTimeout
したがって、私のテストでは、それがスコープ内でローカルであることを確認しているようです。
私のweb.configにdebug = "true"が含まれServer.ScriptTimeout
ていても効果がないことに注意しました-MSDNはこれをページに明示的に記載しています。このモードでは、値を読み取るためのすべての呼び出しは、Server.ScriptTimeout
設定に関係なく、途方もなく大きな数を返します。
だから私の質問は、何かが欠けていないことを確実にするために、値を設定するとサイト全体Server.ScriptTimeout
(スコープ内でグローバル)の処理時間に影響を与えるインスタンスがあるか、またはその効果がローカルであるという私の信念は有効かということです現在のコンテキストのみに? 私はこの質問を無駄にグーグルで検索しましたが、MSDN はこの問題について沈黙しているようです。
リンクや経験 - 何らかの形で - は大歓迎です! これをカバーするドキュメントは不足しているようです。信頼できる情報をいただければ幸いです。