2011-05-28 15 views

Respuesta

14

Esto es lo que yo uso

public static class Azure 
{ 
    private static bool m_IsRunningAzure = GetIsRunningInAzure(); 

    private static bool GetIsRunningInAzure() 
    { 
     Guid guidId; 
     if (RoleEnvironment.IsAvailable && Guid.TryParse(RoleEnvironment.DeploymentId, out guidId)) 
      return true; 
     return false;  
    } 

    public static bool IsRunningInAzure() 
    { 
     return m_IsRunningAzure; 
    } 

    private static bool m_IsRunningAzureOrDevFabric = GetIsRunningInAzureOrDevFabric(); 

    private static bool GetIsRunningInAzureOrDevFabric() 
    { 
     return RoleEnvironment.IsAvailable; 
    } 

    public static bool IsRunningInAzureOrDevFabric() 
    { 
     return m_IsRunningAzureOrDevFabric; 
    } 
} 
+0

Si miraste la publicación de mi blog, como se menciona en mi respuesta, verías esta técnica exacta mostrada y explicada. –

22

RoleEnvironment.IsAvailable indica si se está ejecutando en Windows Azure, pero no diferencia entre el Windows Azure real y el simulador de desarrollo local.

Escribí un blog post que muestra un truco para averiguar si se está ejecutando en Windows Azure real o simulado, cuando RoleEnvironment.IsAvailable == true - con suerte eso proporciona lo que está buscando.

EDIT: En caso de que quiera el código abajo-n-sucia que describo en el cargo antes mencionado, sin ninguna explicación de por qué la técnica funciona:

private bool IsRunningInDevFabric() 

    { 
     // easiest check: try translate deployment ID into guid 
     Guid guidId; 
     if (Guid.TryParse(RoleEnvironment.DeploymentId, out guidId)) 
      return false; // valid guid? We're in Azure Fabric 
     return true;  // can't parse into guid? We're in Dev Fabric 
    } 

EDIT 2: Mi respuesta es un poco anticuado. Ahora hay , que es mucho más fácil de usar. La documentación de MSDN es here

+0

palabra quizá re esto para dar más importancia a RoleEnvironment.IsEmulated sobre el viejo truco? – Simon

+1

Probablemente se debe tener en cuenta que 'IsAvailable' aún debe examinarse, ya que' IsEmulated' se lanzará si el primero es falso (entorno de función no inicializado). –

2

Puede hacerlo a la antigua usanza, buscando la existencia de una variable de entorno.

Establezca el valor de su variable de entorno en propiedades de la computadora y léala usando Environment.GetEnvironmentVariable ("MyVariable").

En Azure, la variable no estará presente, por lo que la llamada devolverá nulo.

2

Hay algunas sugerencias aquí - http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/8fd96850-7a04-401b-89d5-ba153c1b4c51

  1. Variable de entorno
  2. deploymentID
  3. nombre del equipo
  4. almacenamiento de Windows Azure extremo de servicio

En cuanto a ellos, creo que Estaría tentado de mirar la variable de entorno AZURE_DRIVE_DEV_PATH, pero hay n o garantizamos que esto funcionará en futuras versiones de SDK.

+0

No había visto ese hilo msdn, gracias por publicarlo. Lo más valioso es la comparación de los valores devueltos cuando se ejecuta en el entorno de desarrollo frente a la producción. La opción 4 probablemente no sea muy práctica, ya que puede acceder al almacenamiento dev o al almacenamiento real desde el entorno de desarrollo. Utilizo la Opción 2, pero como anotaron sobre la exención de responsabilidad con futuras versiones de SDK para inspeccionar la variable de entorno, eso también se aplica a la inspección de la ID de implementación. –

Cuestiones relacionadas