1

我有一个托管在 Windows Azure 中的简单个人 MVC4 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

两种选择:

  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 回答