2014-09-05 9 views
15

Ich wusste, dass wir RoleEnvironment.IsAvailable verwenden können, um zu überprüfen, ob Code in Web/Worker Role ausgeführt wird. Wie wäre es mit Azure Websites?Wie überprüft man, ob Code auf Azure Websites läuft

Ich habe den obigen RoleEnvironment-Code versucht, aber es gibt immer false zurück. Ich muss etwas Konfigurationscode in Application_Start laufen lassen, also kann ich mich nicht auf den Anforderungskram verlassen.

Jede Hilfe wird geschätzt.

Antwort

32

Dies ist eigentlich sehr einfach, einfach auf Existenz dieser Umgebungsvariablen überprüfen: WEBSITE_SITE_NAME.

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

Der Inhalt dafür ist der Name Ihrer Website.

Um weitere Umgebungsvariable, die Sie unter Ihrer Website den folgenden Link gehen: https: // {sitename} .scm.azurewebsites.net/Env

+0

Arbeitete wie ein Charme. Vielen Dank! Ist das aber ein Trick oder offiziell von Azure irgendwo dokumentiert? Wird es wahrscheinlich in der Zukunft geändert werden? – Gildor

+0

Es ist kein Trick, es muss dokumentiert werden, aber ich denke nicht, dass es ist. Es wird jedoch nicht geändert, da es als API betrachtet wird. –

+2

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

2

Sie können nicht (einfach).

Mit Azure-Websites wird Ihre Site in einem IIS ausgeführt. RoleEnvironment wird immer falsch sein, da es dort nicht initialisiert wird. Betrachten Sie die Azure-Websites eher als reguläres Hosting. Können Sie feststellen, ob Ihre Website in XYZ-Hosting oder in Ihrem eigenen IIS ausgeführt wird?

Eine Sache, die Sie in Betracht ziehen könnten, sind die Anwendungseinstellungen in Ihrer web.config (ja, der Abschnitt appSettings) und einige Einstellungen, die angeben, ob Sie auf WebSites laufen oder nicht. Lies die full article here about App Settings in Azure WebSites, um zu verstehen, was ich meine. Kurz gesagt: Wenn Sie einen Einstellungswert über das Portal festlegen, hat dieser Vorrang vor dem in web.config. Sie können es sogar einfach im Portal einrichten, ohne es in Ihrer web.config zu haben.

+1

auch Ihre Lösung funktioniert aber Amit ist passt die Frage besser - Sie müssen nicht jede Site einzeln konfigurieren. Aber ich gebe Ihnen die Stimme für diese Antwort kann in bestimmten Szenarien helfen. Vielen Dank! – Gildor

+0

Es gibt [einen anderen Ansatz] (http://stackoverflow.com/a/29428724/1042934) auch. –

+0

Ogi, Sie beziehen sich ausschließlich auf Cloud-Service (a.k.a. Web-Rolle) und nicht auf die Website. Wie ich bereits in meiner Antwort erwähne - die gesamte RoleEnvironment fehlt auf Websites, Sie laufen einfach in einem voll funktionsfähigen IIS. Ihre RoleEntryPoint-Klasse wird niemals in der Azure-Website instanziiert. – astaykov

Verwandte Themen