我有一个方法(在一个分离的类库中),它由WebRole和WorkerRole调用。此方法包含使用Environment.GetEnvironmentVariable("RoleRoot")
返回的文件的路径,如下所示:
private string FooPath()
{
string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
return Path.Combine(appRoot + @"", @"approotfile.foo");
}
当我从WorkerRole调用此方法时,路径会正常返回。但当我从WebRole调用它时,我会得到null
。
有什么想法吗?
编辑:我使用APNS Sharp向iOS发送推送消息,它需要.p12证书才能工作。目前,我在类库的根目录中有.p12(它由WebRole和WorkerRole调用)。但问题是:为什么RoleRoot
在我从WebRole调用它时返回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 + @"", @"binfile.foo");
}
对于WorkerRole来说,一切都没有改变:
private string FooPathWorkerRole()
{
string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
return Path.Combine(appRoot + @"", @"approotfile.foo");
}
此外,我发现Azure不导入p12证书。我必须将其转换为另一种格式,我认为这对我不起作用。因此,最好的选择是将它们放在应用程序的根上,并将其构建操作标记为内容。
我尝试了webrole,它对我有效。我把它放在web角色的OnStart()代码中,该代码由WaIISHost 调用
如果您想加载证书,可以尝试中的建议http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx
链接自如何将公共证书导入Windows Azure?