Как я могу определить, работаю ли я локально на моем ПК или в облаке? - PullRequest
12 голосов
/ 28 мая 2011

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

Ответы [ 4 ]

22 голосов
/ 28 мая 2011

RoleEnvironment.IsAvailable сообщает вам, работаете ли вы в Windows Azure, но не различает реальную Windows Azure и симулятор локальной разработки.

Я написал сообщение в блоге , в котором показан трюк, чтобы выяснить, работаете ли вы в реальной или смоделированной Windows Azure, когда RoleEnvironment.IsAvailable == true - надеюсь, это обеспечит то, что вы ищете. * * 1007

РЕДАКТИРОВАТЬ: В случае, если вам нужен нецензурный код, который я опишу в вышеупомянутом посте, без каких-либо объяснений, почему техника работает:

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 здесь

14 голосов
/ 29 мая 2011

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

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 голосов
/ 29 мая 2011

Здесь есть несколько предложений - 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 - но нет гарантии, что это будет работать в будущих версиях SDK.

2 голосов
/ 29 мая 2011

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

Установите значение переменной среды в свойствах компьютера и прочитайте его, используя Environment.GetEnvironmentVariable ("MyVariable").

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

...