2010-03-19 8 views
7

Abbiamo un ruolo Web che stiamo ospitando in Windows Azure che utilizza un vecchio riferimento Web basato su ASMX per contattare un sistema esterno. Il codice proxy di riferimento Web è abbastanza grande da renderlo istantaneo la prima volta che ha un costo significativo.Windows Azure supporta il modulo di riscaldamento delle applicazioni o qualcosa di simile?

Ci piacerebbe essere in grado di eseguire questa esecuzione all'avvio del ruolo Web anziché sulla prima richiesta.

So che IIS 7.5 ha un modulo Application Warm-Up che ci consentirebbe di raggiungere questo obiettivo, ma ho difficoltà a capire se esiste qualcosa di simile con l'hosting su Windows Azure.

Grazie, Corey

risposta

1

Sembra che il gestore Application_Start di Global.asax venga eseguito quando il ruolo Web è distribuito (per ASP.NET) e non sulla prima richiesta, quindi funzionerà per noi.

-1

Dal momento che l'unico scopo di una macchina virtuale che ospita un ruolo Web su Windows Azure è quello di rispondere alle richieste web, mi potrebbe supporre tale da sorta di messa a punto per essere la responsabilità del sistema operativo cloud, non l'App Cloud. Detto questo, potrebbe essere interessante verificare se il SO di Azure Cloud stia effettivamente rendendo disponibile una tale regolazione di default.

5

Mi piace la soluzione di Steve Marx.

aggiungere questo le linee di ServiceDefinition.csdef:

<Startup> 
    <Task commandLine="startup\disableTimeout.cmd" executionContext="elevated" /> 
</Startup> 

e aggiungere disableTimeout.cmd in una cartella denominata avvio, con la seguente riga di codice:

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

soluzione originale da qui: http://blog.smarx.com/posts/controlling-application-pool-idle-timeouts-in-windows-azure

Quando si esegue nell'emulatore prega di leggere questo: http://blog.smarx.com/posts/skipping-windows-azure-startup-tasks-when-running-in-the-emulator

+0

Questo è grande, ma nota che impedisce pool di app da essere arrestato così frequentemente, piuttosto che il riavvio automatico quando è spento. Avrai comunque l'app riciclata dopo 29 ore (per impostazione predefinita) ... non ci vorrà un po 'di tempo per l'avvio? – Rory

+0

Vale anche la pena notare che il file .cmd ha davvero bisogno di essere in codifica ASCII e non in UTF-8 come lo studio visivo crea per impostazione predefinita, altrimenti si riscontreranno problemi. Vedi "File batch e Visual Studio" in http://blog.smarx.com/posts/windows-azure-startup-tasks-tips-tricks-and-gotchas – Rory

0

un aggiornamento su questo, l'articolo qui sotto mostra come configurare un Windows Azure WebRole:

http://fabriccontroller.net/blog/posts/iis-8-0-application-initialization-module-in-a-windows-azure-web-role/

È possibile installare il modulo in uno script batch di avvio utilizzando:

PKGMGR.EXE /iu:IIS-ApplicationInit 

Poi nella WebRole (Ho adattato questo per lavorare con un WebRole di hosting di più siti web):

public class WebRole : RoleEntryPoint 
{ 
    public override void Run() 
    { 
     using (var serverManager = new ServerManager()) 
     { 
      // The foreach ensures we enable initialization for all websites hosted on this WebRole. 
      foreach (var application in serverManager.Sites.SelectMany(x => x.Applications)) 
      { 
       application["preloadEnabled"] = true; 
      } 

      foreach (var applicationPool in serverManager.ApplicationPools) 
      { 
       applicationPool["startMode"] = "AlwaysRunning"; 
      } 

      serverManager.CommitChanges(); 
     } 

     base.Run(); 
    } 

    public override bool OnStart() 
    { 
     // For information on handling configuration changes 
     // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. 

     return base.OnStart(); 
    } 
} 
+0

http: // stackoverflow.com/domande/22374886/install-application-inizializzazione-in-azzurro-web-ruolo-hosting-multiple-siti web – Rusty

Problemi correlati