Как я могу определить, выполняю ли я локально на своем ПК или в облаке?

Использование MVC3, и я хотел бы определить, запущен ли я локально или развернут в облаке?

Ответ 1

Это то, что я использую

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

RoleEnvironment.IsAvailable сообщает, что вы работаете в Windows Azure, но не различает реальную 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 здесь

Ответ 3

Вы можете сделать это старомодным способом, ища существование переменной среды.

Задайте значение переменной среды в свойствах компьютера и прочитайте ее с помощью Environment.GetEnvironmentVariable( "MyVariable" ).

В Azure переменная не будет присутствовать, поэтому вызов вернет значение null.

Ответ 4

Здесь есть несколько предложений - http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/8fd96850-7a04-401b-89d5-ba153c1b4c51

  • Переменная среды
  • deploymentID
  • имя компьютера
  • Конечная точка службы хранения Windows Azure

Посмотрев на них, я думаю, что у меня возникнет соблазн посмотреть переменную среды AZURE_DRIVE_DEV_PATH, но нет гарантии, что это будет работать в будущих версиях SDK.