我有一个方法(在单独的类库中),由 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
返回 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证书。我必须将其转换为另一种格式,我认为这对我不起作用。因此,最好的选择是将它们放在应用程序的根目录中,并将其构建操作标记为内容。
关于azure - Environment.GetEnvironmentVariable ("RoleRoot")在 WebRole 中调用时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131340/