2010-05-26 8 views
15

Wie kann ich feststellen, ob meine Azure-Anwendung in der Entwicklungsumgebung und nicht in der Cloud ausgeführt wird?Wie erkennt man, dass eine azure-Anwendung in der Entwicklungsumgebung ausgeführt wird?

RoleEnvironment.IsAvailable gilt für beide. Ich will etwas, das nur in einem Fall wahr ist.

Ich frage das, weil ich möchte, dass Benutzer meiner Bibliothek meine Bibliothek kostenlos in dev Fabric verwenden können. Daher ist es nicht möglich, einen separaten Bezeichner oder ein Flag in die Konfigurationsdatei manuell einzufügen und zwei Konfigurationen für Entwicklung und Bereitstellung beizubehalten.

Antwort

20

Eine Option ist es, einen Blick auf RoleEnvironment.DeploymentId zu werfen - wenn Sie in der Dev-Fabric laufen, sollte es einen Namen wie 'Deployment (n)' haben, wobei n eine fortlaufende Nummer ist. Wenn Sie in der Produktion ausgeführt werden, sollte die Bereitstellungs-ID einer GUID ähneln.

Eine andere Sache, die Sie tun können, ist, den Instanznamen einer Rolle zu betrachten. In der Produktion sollte es in _0 (stellvertretend Instanz 0) enden. Im dev Stoff, wird es in .0

EDIT 2013.01.08 Ende - realisiert diese Antwort, die ich vor mehr als 2 Jahre gab, ist ziemlich veraltet! Jetzt gibt es auch - überprüfen Sie die Details here.

+1

+1 für die Aktualisierung Ihrer Antwort – Tom

3

Zum Beispiel:

Die Entwicklung Gewebe simuliert nicht vollständig das Verhalten der Windows Azure Load Balancer. Wenn z. B. Code, der in einer Webrolleninstanz ausgeführt wird, die SetBusy-Methode im RoleEnvironment.StatusCheck-Ereignishandler aufruft, um anzugeben, dass die Rolleninstanz aus der Rotation des Lastenausgleichs entfernt werden soll, können Sie weiterhin auf Ihre Rolle zugreifen während der Status RoleInstanceStatus.Busy lautet.

Auch azurblaues Gewebe läuft normalerweise unter one of the few fixed OS Images. So können Sie auch System.Environment untersuchen. für einige Muster, die nur in azure Fabric vorkommen (d. h. spezifische OS-Version, die mit Windows Azure OS übereinstimmt oder etwas Ähnliches).

1

Es gibt eine sehr einfache Technik, die ich seit einer Weile verwende - und finde mich häufig damit. Der Trick besteht darin, eine Umgebungsvariable auf Ihrem Dev-Computer zu setzen und grundlegende DOS-Batch-Datei- (oder PowerShell-) Techniken zu verwenden. Springe über die Dinge, die du nicht haben willst, wenn diese Variable vorhanden ist. Diese Umgebungsvariable ist in der Cloud nicht vorhanden.

ich darüber gebloggt hier: Azure FAQ: Can I create a Startup Task that executes only when really in the Cloud?

16

Die Windows Azure SDK 1.5 eingeführt, um die RoleEnvironment.IsEmulated static bool Eigenschaft von Code, um zu bestimmen, ob die Rolle Instanz im Windows Azure Compute Emulator ausgeführt wird. Diese Information kann auch an Startup-Aufgaben übergeben werden. Es gibt einen großartigen Artikel von Steve Marx here darüber.

+1

Es ist nicht zuverlässig, da es nur auf Environment Variable basiert und für jemanden, der die Lizenzierung basierend auf dieser Prüfung überspringen möchte, leicht in der Lage sein sollte, diese Variable einzurichten und daher würde IsEmulated true zurückgeben . –