Environment.GetEnvironmentVariable("RoleRoot"), возвращающий ноль при вызове в WebRole
У меня есть метод (в отдельной библиотеке классов), который вызывается через WebRole и WorkerRole. Этот метод содержит путь к файлу, который возвращается с помощью Environment.GetEnvironmentVariable("RoleRoot")
, следующее:
private string FooPath()
{
string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
return Path.Combine(appRoot + @"\", @"approot\file.foo");
}
Когда я вызываю этот метод из WorkerRole, путь возвращается нормально. Но когда я звоню из WebRole, я получаю null
,
Есть идеи?
РЕДАКТИРОВАТЬ: я использую APNS-Sharp для отправки push-сообщений на iOS, и для работы требуется сертификат.p12. В настоящее время у меня есть.p12 в корне моей библиотеки классов (которая вызывается как WebRole, так и WorkerRole). Но дело в том, почему RoleRoot
возвращает ноль при вызове из WebRole, но возвращает путь при вызове из WorkerRole?
3 ответа
RoleRoot
возвращает false для WebRole, потому что WebRole использует IIS, как обычный веб-сайт. Вот почему трудно получить переменные среды из WebRole.
Чтобы правильно получить путь, мне пришлось использовать классический Server.MapPath и ссылаться на bin
папка, а не approot
:
private string FooPathWebRole()
{
string appRoot = HttpContext.Current.Server.MapPath(@"~\");
return Path.Combine(appRoot + @"\", @"bin\file.foo");
}
Для WorkerRole ничего не изменилось:
private string FooPathWorkerRole()
{
string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
return Path.Combine(appRoot + @"\", @"approot\file.foo");
}
Кроме того, я обнаружил, что Azure не импортирует сертификаты p12. Я должен был бы преобразовать это в другой формат, который я не полагаю, работал бы для меня. Таким образом, лучший вариант - поместить их в корень приложения и пометить его Build Action to Content.
Я пытался из вебролла, и у меня это работает. Я помещаю его в код OnStart() веб-роли, который вызывается WaIISHost.
Если вы хотите загрузить сертификат, вы можете попробовать совет в http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx
Связано с Как импортировать публичный сертификат в Windows Azure?