2014-09-05 1 views
15

Sapevo che è possibile utilizzare RoleEnvironment.IsAvailable per verificare se il codice è in esecuzione nel ruolo Web/Worker. Che ne dici di Siti Web di Azure?Come verificare se il codice è in esecuzione sui siti Web di Azure

Ho provato il suddetto codice RoleEnvironment ma restituisce sempre false. Ho bisogno di eseguire qualche codice di configurazione in Application_Start quindi non posso dipendere dal materiale di richiesta.

Qualsiasi aiuto è apprezzato.

risposta

32

In realtà è molto semplice verificare l'esistenza di questa variabile di ambiente: WEBSITE_SITE_NAME.

!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME")) 

Il contenuto di questo sarà il nome del sito.

Per vedere più variabile ambiente che avete sotto il vostro sito andare al seguente link: https: // {sitename} .scm.azurewebsites.net/Env

+0

Ha funzionato come un fascino. Grazie! Tuttavia, questo è un trucco o documentato ufficialmente da Azure da qualche parte? È probabile che cambi in futuro? – Gildor

+0

Non è un trucco, deve essere documentato ma non credo che lo sia. Tuttavia non verrà modificato in quanto è considerato un'API. –

+2

https://github.com/projectkudu/kudu/wiki/Azure-runtime-environment –

2

Non è possibile (facilmente).

Con siti Web azzurri, il tuo sito viene eseguito in un IIS. RoleEnvironment sarà sempre falso, perché non è inizializzato lì. Guarda i siti Web di Azure più come un normale hosting. Puoi sapere se il tuo sito web è in esecuzione in XYZ Hosting o nel tuo IIS?

Una cosa che si potrebbe considerare sono le Impostazioni dell'applicazione nel proprio web.config (sì, la sezione appSettings) e alcune impostazioni che indicano se si esegue o meno su WebSites. Leggi il full article here about App Settings in Azure WebSites per capire cosa intendo. In breve: se si imposta un valore di impostazione tramite il portale, avrà la precedenza su ciò che è in web.config. Puoi anche solo impostarlo nel portale, non averlo nel tuo web.config.

+1

La soluzione funziona anche, ma Amit di adatta alla domanda migliore - non è necessario configurare ogni sito singolarmente. Ma ti darò il voto per questa risposta può aiutare in determinati scenari. Grazie! – Gildor

+0

C'è anche [un altro approccio] (http://stackoverflow.com/a/29428724/1042934). –

+0

Ogi, ti riferisci interamente al servizio cloud (a.k.a. ruolo web) e non al sito web. Come ho già detto nella mia risposta - l'intero RoleEnvironment è mancante nei siti Web, si sta semplicemente eseguendo un IIS completo. La tua classe RoleEntryPoint non verrà mai creata un'istanza nel sito Web di Azure. – astaykov