如何确定我是在本地PC上运行还是在云上运行?

时间:2011-05-28 10:03:30

标签: azure azure-compute-emulator

使用MVC3,我想确定我是在本地运行还是部署到云端?

4 个答案:

答案 0 :(得分:22)

RoleEnvironment.IsAvailable告诉您是否在Windows Azure中运行,但它没有区分真正的Windows Azure和本地开发模拟器。

我写了一个blog post,它显示了一个技巧,可以确定你是否在真实模拟Windows Azure和模拟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 :我的回答有点过时了。现在有 RoleEnvironment.IsEmulated ,使用起来要简单得多。 MSDN文档为here

答案 1 :(得分: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;
    }
}

答案 2 :(得分:2)

通过寻找环境变量的存在,你可以用老式的方式做到这一点。

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

在Azure上,变量不会出现,因此调用将返回null。

答案 3 :(得分:2)

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

  1. 环境变量
  2. deploymentID
  3. 计算机名称
  4. Windows Azure存储服务端点
  5. 看着它们,我想我很想看看AZURE_DRIVE_DEV_PATH环境变量 - 但是不能保证这在将来的SDK版本中有效。