2013-01-09 15 views
6

Ho un ruolo Web su azzurro e vorrei forzare un'applicazione prima senza attendere la prima richiesta.Avvio forzato dell'applicazione su ruolo Web di Azure

sono riuscito a impostare la proprietà "si avvia automaticamente" a true sul mio sito

AutoStart a WCF on Azure WebRole

Ma l'Application_Start non è chiamato fino a quando la prima richiesta arriva.

Non so esattamente se mi manca qualcosa di importante qui. Il server è un W2008 R2 e la versione di IIS è 7.5

Grazie!

SOLUZIONE

ho messo il codice soluzione qui. Spero possa aiutare qualcuno. Ho appena aggiunto un WebRole.cs e ho appena inserito quel codice per eseguire un ping ogni 30 secondi. Per favore, sto navigando su Service.svc perché questo è il mio endpoint, il tuo endpoint potrebbe essere un altro. Si noti che sto chiedendo "Endpoint1". Se si dispone di più di un endpoint, è necessario rivedere tale riga.

public class WebRole : RoleEntryPoint 
{   
    public override void Run() 
    {    
     var localuri = new Uri(string.Format("http://{0}/Service.svc", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint)); 

     while (true) 
     { 
      try 
      {      
       var request = (HttpWebRequest)WebRequest.Create(localuri); 
       request.Method = "GET"; 
       var response = request.GetResponse(); 
      } 
      catch { } 
      System.Threading.Thread.Sleep(30000); 
     }    
    } 

    public override bool OnStart() 
    {    
     return base.OnStart(); 
    } 
} 

risposta

3

IIS si avvia solo quando arriva la prima richiesta. La soluzione alternativa consiste nell'inviare una richiesta HTTP alla stessa VM dall'interno di OnStart o dal discendente RoleEntryPoint: è facile utilizzare WebRequest o una classe equivalente.

+0

è quello che sto provando in questo momento XD – Jordi

+0

Ho appena modificato il mio queistion con quella soluzione Grazie! – Jordi

+0

Io uso la stessa soluzione per 4 ambienti di produzione per i clienti. deve con più nodi (istanze), le richieste casuali dovrebbero essere improvvisamente molto lente Ovviamente perché erano in esecuzione App Start su queste richieste.Può fornire il codice se lo si desidera? – Ash

1

Jordi, ho riscontrato di recente lo stesso problema.

In base al mio test Application_Start() viene chiamato SOLO quando la prima richiesta ISS per WebApp. (se provi ad avviare VS in Debug senza che apra alcuna pagina (vedi opzioni in proj/debug), vedrai che Application_Start() non verrà chiamato anche se non esegui la WebApp in Azure)

suppongo che è necessario fare quarantina quando l'inizio WebRole, ben messo il codice nel WebRole.cs;) Qui è possibile ignorare OnStart() e OnStop() e inserire il codice che wiil essere execuded quando il WebRole inizierà.

Ho usato in questo modo per eseguire un BakgroundWorker che esegue alcune attività pianificate, indipendentemente da IIS.

Spero che questo aiuto. Davide.

Nota: 1 - se si dont'have un WebRole.cs creano nella root del progetto e scrivere dentro: public class WebRole: RoleEntryPoint { public override bool OnStart() { ... il tuo codice ... return base.OnStart(); } }

2 - Se è necessario per eseguire il debug il codice mente che è necessario eseguire VS in debug con l'progetto Azure che si riferiscono a WebApp come un "progetto Run", altrimenti il WebRole non si chiamerà

+1

Si noti che il codice in WebRole.cs viene eseguito in un processo diverso da IIS. Quindi alcuni tipi di inizializzazione (pre-caricamento dei dati in memoria, apertura delle connessioni, ecc.) Non possono essere fatti lì. –

+0

Grazie Brian, è stato esattamente quello che mi è successo :( – Jordi

1

Si potrebbe provare a inserire un codice nel proprio WebRole.cs per richiedere alcuni URL dal proprio sito Web. L'ho provato, e sembra funzionare un po '. Ma è un problema eseguire il debug, quindi non l'ho mai veramente colpito.

Un'altra opzione sarebbe quella di utilizzare IIS Application Initialization. Non è possibile utilizzarlo su IIS 7.5, ma è possibile ottenere IIS 8 se si aggiornano i ruoli su Windows 2012 (impostare osFamily = "3" nel file .cscfg).

Problemi correlati