【问题标题】:How can I determine if I am running locally on my PC or on the cloud?如何确定我是在 PC 上本地运行还是在云上运行?
【发布时间】:2017-01-19 05:17:22
【问题描述】:

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

【问题讨论】:

    标签: azure azure-compute-emulator


    【解决方案1】:

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

    我写了一个blog post,它显示了一个技巧,可以确定您是在真实的还是模拟的 Windows Azure 中运行,而 RoleEnvironment.IsAvailable == true - 希望能提供您正在寻找的东西。

    编辑:如果您想要我在上述帖子中描述的 down-n-dirty 代码,而无需解释该技术为何有效:

    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

    【讨论】:

    • 也许改写这个词是为了让 RoleEnvironment.IsEmulated 比旧的 hack 更加突出?
    • 应该注意IsAvailable仍然应该被检查,因为IsEmulated会在前者为假时抛出(角色环境未初始化)。
    【解决方案2】:

    这是我用的

    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;
        }
    }
    

    【讨论】:

    • 如果您查看我的博客文章,正如我的回答中所引用的那样,您会看到这种确切的技术显示和解释。
    【解决方案3】:

    您可以通过查找环境变量的存在来以老式方式进行。

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

    在 Azure 上,该变量不存在,因此调用将返回 null。

    【讨论】:

      【解决方案4】:

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

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

      看着它们,我想我会想看看 AZURE_DRIVE_DEV_PATH 环境变量 - 但不能保证这将在未来的 SDK 版本中起作用。

      【讨论】:

      • 我没有看到那个 msdn 线程 - 感谢您发布它。最有价值的是在开发环境与生产环境中运行时返回的值的比较。选项 4 可能不太实用,因为您可以从开发环境访问开发存储或真实存储。我使用选项 2,但正如您提到的关于未来 SDK 版本中用于检查环境变量的免责声明,这也适用于检查部署 ID。
      猜你喜欢
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多