24

AppPool が 20 分ごとにリサイクルされるのを防ぐために、Azure Web ロールの開始時に IIS AppPool Idle Timeouts を削除したいと考えています。私のウェブサイトは Web アプリケーション プロジェクトです。

どうすればいいですか?

4

6 に答える 6

32

アイドル タイムアウトを無効にするスタートアップ タスクを作成します。

  1. Web ロール プロジェクトによって参照される Web サイト プロジェクトでStartup.cmd、ルート フォルダーにファイルを追加します。

  2. のプロパティで、[出力ディレクトリコピー] を [新しい場合Startup.cmdはコピー]に設定します。

  3. この行を に追加しStartup.cmdます。

    if exist %windir%\system32\inetsrv\appcmd.exe %windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00
    

    if exist %windir%\system32\inetsrv\appcmd.exe修飾子はオプションです。Azure Emulator Express で同じコードを使用できるため、IIS をインストールしたり、管理者として Visual Studio を実行したりする必要はありません。

  4. ファイルを署名なしの UTF-8として保存します。( Visual Studio で[ファイル] > [高度な保存オプション] を選択します。)

  5. Web ロール プロジェクトの でServiceDefinition.csdef、これを に追加しますWebRole

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="elevated" />
    </Startup>
    
于 2013-12-11T17:12:22.710 に答える
4

もう 1 つのオプションは、IIS アイドル タイムアウト アクションを「中断」に構成することです。これは、Web ロールの起動スクリプトの一部として実行できます。

必要なコマンドは、IIS セットアップの一部としてボックスに含まれています (これは、.NET 4.5.1 フレームワーク以降を対象とするコードを使用して、Windows Server 2012 R2 以降で動作することに注意してください)。

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeoutAction:Suspend

OS ファミリ 4 を使用するには、Azure Cloud Service 構成ファイル (.cscfg) を更新する必要があります

インスタンスがプロビジョニングされ、Web アプリケーションが IIS にデプロイされる前に起動アクションが実行されるため、アプリケーション プールのデフォルトを設定すると、事実上、アプリケーションの apppool idel タイムアウト アクションが Suspend に設定されます。

于 2013-10-30T14:53:05.240 に答える
2

気にしないでください。とにかく、Web ロールの監視ソリューションが本当に必要です。Azure ダッシュボードに組み込まれているため、アイドル タイムアウトの構成を適切に設定するよりも、監視を有効にする方が簡単です (特に、最小限の特権を維持したい場合)。

于 2014-01-07T16:26:12.047 に答える
2

Web アプリケーション プロジェクトのルートでWebRole.cs、次のコードで名前が付けられたファイルを作成します。

public class WebRole : RoleEntryPoint
{
    public override void Run()
    {
        RemoveIISTimeouts();
        base.Run();
    }

    private void RemoveIISTimeouts()
    {
        Process.Start(
            String.Format(@"{0}\system32\inetsrv\appcmd", Environment.GetEnvironmentVariable("windir")),
            "set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00");
    }
}
于 2013-08-06T20:07:30.803 に答える
0

これは私が取ったアプローチです:

using (ServerManager iisManager = new ServerManager())
{
    Application app = iisManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"].Applications[0];

    TimeSpan ts = new TimeSpan(0, 00, 00);

    iisManager.ApplicationPoolDefaults.ProcessModel.IdleTimeout = ts;

    iisManager.CommitChanges();
}

必要:

using Microsoft.Web.Administration;
using Microsoft.WindowsAzure.ServiceRuntime;
于 2013-12-29T23:20:39.227 に答える