2013-01-17 77 views
1

我有一個簡單的個人MVC4網絡應用程序託管在Windows Azure中。Windows Azure或IIS初始化負載緩慢

這個網絡應用程序使用非常少,最初的調用非常慢,特別是當我嘗試在早上點擊時。

我懷疑IIS正在睡覺,需要喚醒。我發現這篇文章,並提到這是IIS http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/8b3258e7-261c-49a0-888c-0b3e68b2af13中的一個錯誤,它需要在IIS中設置,但我的Web應用程序託管在Azure中,有什麼方法可以在Web.config文件中進行某種設置嗎?

接下來的所有通話都很快。

這是我的個人頁面。 javierdelacruz.com

謝謝。

+0

請參閱強制應用開始在Azure上的Web角色:http://stackoverflow.com/questions/14238569/force-application-start-on-azure-web-role/14261645#14261645 會一直把這個作爲一個答案,但網站中的一些錯誤不斷髮表評論。 –

回答

1

兩個選項:

  1. 啓動任務
  2. 的OnStart代碼

對於啓動任務,請參閱this link

有關的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)); 
       } 
      } 
     } 
    } 

Source and some more details因爲我這裏包括的功能 - 有一些依賴你可能需要做到這一點。