我有一个方法(在一个单独的类库中),由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调用时返回路径?
答案 0 :(得分:10)
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证书。我不得不把它转换成另一种格式,我认为这种格式对我不起作用。因此,最好的选择是将它们放在应用程序的根目录上,并将其构建操作标记为内容。
答案 1 :(得分:1)
我尝试使用webrole,它对我有用。我将它放在Web角色的OnStart()代码中,由WaIISHost调用
答案 2 :(得分:0)