azure – Environment.GetEnvironmentVariable(“RoleRoot”)在WebRole中调用时返回null

我有一个方法(在一个单独的类库中),由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向iOS发送推送消息,它需要一个.p12证书才能工作.目前我在我的类库的根目录中有.p12(由Webrole和WorkerRole调用).但关键是:当我从Webrole调用RoleRoot时,为什么RoleRoot返回null,但是当我从WorkerRole调用时返回路径?

解决方法

RoleRoot为Webrole返回false,因为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标记为Content.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些