Как может я надежность обнаруживать, работает ли мое приложение Azure в матрице разработки а не в 'облаке'?
RoleEnvironment. IsAvailable верен для обоих. Я хочу что-то, что верно только в одном случае.
Я спрашиваю это, потому что я хочу, чтобы пользователи моей библиотеки смогли пользоваться моей библиотекой бесплатно в dev матрице. Следовательно вручную помещающий отдельный идентификатор или флаг в файле конфигурации и хранении двух конфигураций для dev и развертываются, не выполнимо.
Один из вариантов - взглянуть на RoleEnvironment.DeploymentId
- если вы работаете в структуре разработки, он должен иметь имя вроде «deployment (n)» где n - некоторый порядковый номер. Если вы работаете в производственной среде, идентификатор развертывания должен напоминать Guid.
Еще вы можете посмотреть имя экземпляра роли. В производственной среде он должен заканчиваться на _0
(представляющий экземпляр 0). В структуре разработки он будет заканчиваться на .0
РЕДАКТИРОВАТЬ 1/8/2013 - понял, что этот ответ, который я дал более 2 лет назад, довольно устарел! Теперь есть также RoleEnvironment.IsEmulated
- подробности можно найти здесь .
Например:
Структура разработки не полностью имитирует поведение балансировщика нагрузки Windows Azure. Например, если код, выполняемый в экземпляре веб-роли, вызывает метод SetBusy из обработчика событий RoleEnvironment.StatusCheck, чтобы указать, что экземпляр роли должен быть исключен из ротации балансировщика нагрузки, вы все равно сможете получить доступ к своей роли из своего браузер, пока его статус - RoleInstanceStatus.Busy.
Также лазурная ткань обычно работает под одним из немногих фиксированных образов ОС . Так что вы также можете изучить System.Environment. для некоторых шаблонов, которые встречаются только в лазурной фабрике (например, конкретная версия ОС соответствует ОС Windows Azure или что-то в этом роде).