Environment.GetEnvironmentVariable ("RoleRoot"), возвращающий ноль при вызове в WebRole - PullRequest
7 голосов
/ 26 мая 2011

У меня есть метод (в отдельной библиотеке классов), который вызывается через 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 ]

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

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. Я должен был бы преобразовать это в другой формат, который я не полагаю, работал бы для меня. Поэтому лучше всего поместить их в корень приложения и отметить его Действие построения до Содержимое .

1 голос
/ 17 декабря 2011

Я пытался из вебролла, и у меня это работает.Я помещаю его в код OnStart () веб-роли, который вызывается WaIISHost

0 голосов
/ 26 мая 2011

Если вы хотите загрузить сертификат, вы можете попробовать совет в http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx

Связано с Как импортировать публичный сертификат в Windows Azure?

...