1

WindowsAzureでホストされているシンプルな個人用MVC4Webアプリがあります。

このWebアプリの使用はごくわずかで、特に午前中にクリックしようとすると、最初の呼び出しが非常に遅くなります。

IISがスリープしていて、ウェイクアップする必要があるのではないかと疑っています。この記事を見つけて、これはIIS http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/8b3258e7-261c-49a0-888c-0b3e68b2af13のバグであり、IISでのセットアップが必要であると述べました。しかし、私のWebアプリはAzureでホストされていますが、Web.configファイルで何らかの設定を行う方法はありますか?

後続のすべての呼び出しは高速です。

これが私の個人的なページです。javierdelacruz.com

ありがとう。

4

1 に答える 1

1

2 つのオプション:

  1. スタートアップ タスク
  2. OnStart コード

スタートアップ タスクについては、このリンクを参照してください。

OnStart コードについては、次のような関数を試してください (この関数は他にもいくつかのことを行います)。

    private const string _web_app_project_name = "Web";

    public static void SetupDefaultEgConfiguration(int idleTimeoutInMinutes = 1440, int recycleTimeoutInMinutes = 1440, string appPoolName = "My Azure App Pool", bool enableCompression = true)
    {
        if (!RoleEnvironment.IsEmulated)
        {
            Trace.TraceWarning("Changing IIS settings upon role's OnStart. Inputs: ({0}, {1}, {2}, {3}", idleTimeoutInMinutes, recycleTimeoutInMinutes, appPoolName, enableCompression);

            // Tweak IIS Settings
            using (var iisManager = new ServerManager())
            {
                try
                {
                    var roleSite = iisManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_" + _web_app_project_name];
                    if (enableCompression)
                    {
                        //================ Enable or disable static/Dynamic compression ===================//
                        var config = roleSite.GetWebConfiguration();
                        var urlCompressionSection = config.GetSection("system.webServer/urlCompression");
                        urlCompressionSection["doStaticCompression"] = true;
                        urlCompressionSection["doDynamicCompression"] = true;
                        Trace.TraceWarning("Changing IIS settings to enable static and dynamic compression");
                    }

                    //================ To change ApplicationPool name ================================//
                    var app = roleSite.Applications.First();
                    app.ApplicationPoolName = appPoolName;

                    //================ To change ApplicationPool Recycle Timeout ================================//
                    var appPool = iisManager.ApplicationPools[app.ApplicationPoolName];
                    appPool.Recycling.PeriodicRestart.Time = new TimeSpan(0, recycleTimeoutInMinutes, 0);

                    //================ idletimeout ====================================================//               
                    var defaultIdleTimeout = iisManager.ApplicationPoolDefaults.ProcessModel.IdleTimeout;
                    var newIdleTimeout = new TimeSpan(0, idleTimeoutInMinutes, 0);
                    if ((int)newIdleTimeout.TotalMinutes != (int)defaultIdleTimeout.TotalMinutes)
                    {
                        appPool.ProcessModel.IdleTimeout = newIdleTimeout;
                    }

                    // Commit the changes done to server manager.
                    iisManager.CommitChanges();
                }
                catch (Exception e)
                {
                    Trace.TraceError("Failure when configuring IIS in Azure: " + e.ToString().Take(63000));
                }
            }
        }
    }

ここに含めた関数のソースとその他の詳細- これを達成するために必要になる可能性が高い依存関係がいくつかあります。

于 2013-01-17T21:25:40.680 に答える