Environment.GetEnvironmentVariable( "RoleRoot" ) 在 WebRole 中调用时返回 null



我有一个方法(在一个分离的类库中),它由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?

最新更新