Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Environment.GetEnvironmentVariable("RoleRoot") returning null when called in a WebRole

I have a method (in a separated class library) which is called by a WebRole and a WorkerRole. This method contains the path of a file, which is returned using Environment.GetEnvironmentVariable("RoleRoot"), as follows:

private string FooPath()    
{
    string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
    return Path.Combine(appRoot + @"\", @"approot\file.foo");
}

When I call this method from a WorkerRole the path is returned normally. But when I call it from a WebRole I get null.

Any ideas?

EDIT: I am using APNS-Sharp to send push messages to iOS and it requires a .p12 certificate in order to work. Currently I have the .p12 in the root of my class library (which is called by both WebRole and WorkerRole). But the point is: Why RoleRoot returns null when I call it from a WebRole but returns the path when I call from a WorkerRole?

like image 892
Davidson Sousa Avatar asked May 25 '11 21:05

Davidson Sousa


2 Answers

RoleRoot returns false for WebRole because the WebRole uses IIS, just like a normal website. That's why it's difficult to get Environment Variables from a WebRole.

In order to get the path properly I had to use the classic Server.MapPath and reference the bin folder, instead of approot:

private string FooPathWebRole()    
{
    string appRoot = HttpContext.Current.Server.MapPath(@"~\");
    return Path.Combine(appRoot + @"\", @"bin\file.foo");
}

For the WorkerRole nothing has changed:

private string FooPathWorkerRole()    
{
    string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
    return Path.Combine(appRoot + @"\", @"approot\file.foo");
}

In addition, I found out that Azure doesn't import p12 certificates. I would have to transform it into another format, which I don't believe would work for me. So, the best option is to place them on the root of the application and mark its Build Action to Content.

like image 177
Davidson Sousa Avatar answered Sep 21 '22 23:09

Davidson Sousa


I tried from webrole and it works for me. I place it at the OnStart() code of the web role, which is called by WaIISHost

like image 31
Lingxiao Avatar answered Sep 21 '22 23:09

Lingxiao