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?
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
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 ofapproot
:For the WorkerRole nothing has changed:
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.
If you want to load a certificate, you could try the advice in http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx
Linked from How do I import a public certificate to Windows Azure?