2011-05-28 108 views

回答

14

这是我用

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

如果你看过我的博客文章,如我的答案中所引用的,你会看到这种确切的技术显示和解释。 – 2011-05-29 10:59:11

22

RoleEnvironment.IsAvailable告诉你,如果你在Windows Azure中运行,但它不区分真正的Windows Azure和本地开发模拟器。

我写了一个blog post,它显示了一个技巧来确定您是在真实还是在模拟Windows Azure中运行,当时是RoleEnvironment.IsAvailable == true - 希望能够提供您需要的内容。

编辑:如果您想下正肮脏的代码,我在上述岗位描述,没有为什么该技术适用于任何的解释:

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 
    } 

编辑2:我的答案是有点过时。现在有,这更直接使用。 MSDN文档是here

+0

也许重新字这更加突出RoleEnvironment.IsEmulated在老黑客? – Simon 2013-11-12 02:21:47

+1

应该注意的是'IsAvailable'仍应该被检查,因为如果前者是假的(角色环境未初始化),IsEmulated将被抛出。 – 2014-09-17 10:39:33

2

您可以通过查找环境变量的存在以旧式的方式执行此操作。

在计算机属性中设置环境变量的值,并使用Environment.GetEnvironmentVariable(“MyVariable”)读取它。

在Azure上,变量将不存在,所以调用将返回null。

2

有几个建议,在这里 - http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/8fd96850-7a04-401b-89d5-ba153c1b4c51

  1. 环境变量
  2. deploymentID
  3. 计算机名称
  4. 的Windows Azure存储服务端点

看着他们,我想我我很想看看AZURE_DRIVE_DEV_PATH环境变量 - 但是有n个o保证这将在未来的SDK版本中起作用。

+0

我没有看到该MSDN线程 - 感谢张贴。最有价值的是在开发环境与生产环境中运行时返回的值的比较。选项4可能不太实用,因为您可以从开发环境访问dev存储或实际存储。我使用选项2,但正如您所提到的有关未来SDK版本的免责声明用于检查环境变量,这也适用于检查部署标识。 – 2011-05-29 11:21:24

相关问题