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?

Другие вопросы по тегам