2012-03-06 19 views
7

A avere un webrole azzurro con una pagina di test e un servizio in quel ruolo. Dopo aver pubblicato il ruolo, non viene avviato automaticamente, solo al primo utilizzo. Quindi, se il ruolo viene disattivato per qualche motivo, il primo utilizzo è piuttosto lento.Avvio automatico di Azure webrole dopo la distribuzione

C'è un modo per far sì che le webroles si avviino automaticamente subito dopo la distribuzione (sia la prima volta che dopo una migrazione)?

+1

La seguente risposta StackOverflow mostra come farlo in IIS 8 (Windows Server 2012) utilizzando la funzione di inizializzazione dell'applicazione: http://stackoverflow.com/questions/13237393/automatically-install-application-initialization-in-azure- web-role-sdk-v1-8-wi –

risposta

5

Controlla il auto start feature of IIS 7.5. Assicurati di impostare osFamily = "2" per webrole in modo che utilizzi il sistema operativo Windows 2008 R2.

Modifica: siamo ancora bloccati su osFamily = "1" per motivi tecnici, quindi non siamo ancora riusciti a implementare la funzionalità di avvio automatico. Tuttavia, qui sono i passi che sarebbero necessarie per Avvio ATP:

  1. creare il proprio fornitore di avvio automatico che implementa l'IProcessHostPreloadClient interface. Un tempo era un provider predefinito chiamato Application Warm-Up Module, ma non è più disponibile per il download. È possibile utilizzare .Net Reflector per visualizzare il contenuto di Microsoft.ApplicationServer.Hosting.AutoStart.ApplicationServerAutoStartProvider.dll come implementazione di esempio. Questa DLL è inclusa in Windows Server (non Azure) AppFabric.

  2. Il passaggio successivo è specificare le impostazioni corrette nell'applicazione. Host.config. Alcune varianti del codice elencato here possono essere immesse nella classe RoleEntryPoint in modo che vengano richiamate quando si attiva il ruolo di Azure.

Si prega di far sapere alla comunità se si crea il proprio provider di avvio automatico. A questo punto, non ci sono molte informazioni sull'implementazione di IProcessHostPreloadClient su Internet.

+0

@Atesz - Una combinazione della mia risposta e di David Makogon dovrebbe darti quello che ti serve. –

+0

Buon punto su osFamily, poiché il valore predefinito è "1" (Windows 2008 SP2). –

+0

Come vedo, devi fare questa magia sulla macchina host, o mi manchi qualcosa? Cosa succede se la mia app viene migrata su una nuova macchina? Devo farlo di nuovo? Non puoi farlo tramite Azure (ServiceDefinition ha un tag Startup, dove avvio lo sricpt menzionato da David)? Sono un po 'confuso qui. [La mia fonte di avvio automatico IIS] (http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0 -series.aspx) –

2

Un ruolo viene in genere riavviato circa una volta al mese, per la manutenzione del sistema operativo host o del sistema operativo host sottostante. Quello che è più probabile vedere è il timeout di AppPool a causa di inattività, che mostrerà lo stesso tipo di ritardo iniziale. Il timeout predefinito è 20 minuti. È possibile modificare il timeout tramite script di avvio elevata, con qualcosa come:

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

Ho discusso questo nel another SO question pure.

+0

+1 Ho dimenticato di indicare il timeout di AppPool anche se disabilitiamo il timeout nelle nostre app.: P –

+0

Conosco il timeout di AppPool ed è disabilitato (con lo stesso script che si menziona). Ma si spegne ancora a volte. Ogni eccezione è gestita, quindi non può essere un problema. Probabilmente la manutenzione, è per questo che voglio ricominciare il servizio non appena viene nuovamente distribuito. –

Problemi correlati