Я перемещаю развертывание веб-приложения с веб-сайта Azure в веб-роли в облачной службе.
Часть миграции включала резервирование некоторого локального хранилища в конфигурации ролей и изменение взаимодействия с локальной файловой системой, чтобы использовать следующую мантру, чтобы найти путь, который хорош для записи:
LocalResource tempStorageResource = RoleEnvironment
.GetLocalResource("SomeRoleStorage");
var targetFolderPath = tempStorageResource.RootPath;
Однако я бы хотел, чтобы все работало в экземпляре WebSite. Я собираюсь написать поставщик путей, который абстрагирует фактическое местоположение. Часть реализации этого потребует обнаружения того, запущена ли я локально/в отладчике, но мне также нужно знать, работает ли запущенный код под WebSite или WebRole. Как я могу это сделать?
public class AzurePathProvider : ILocalStoragePathProvider
{
public string GetStoragePath(string key)
{
var isWebRole = //????;
if(isWebRole)
{
LocalResource tempStorageResource =
RoleEnvironment
.GetLocalResource(key);
return tempStorageResource.RootPath;
}
else
{
return "/some/other/storage/location";
}
}
}
Проверьте на RoleEnvironment.IsAvailable
чтобы решить, работает ли код в Cloud Service или нет. Это всегда будет true
если ваш код работает в Cloud Service, иначе он будет false
.
Кроме того, чтобы определить, работает ли код в вычислительном эмуляторе, вы можете проверить RoleEnvironment.IsEmulated
вместе с RoleEnvironment.IsAvailable
.
web.config
?