7

我有一个由 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 调用)。但关键是:为什么RoleRoot当我从 WebRole 调用它时返回 null,而当我从 WorkerRole 调用时返回路径?

4

3 回答 3

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 证书。我必须将其转换为另一种格式,我认为这对我不起作用。因此,最好的选择是将它们放在应用程序的根目录上,并将其Build Action标记为Content

于 2011-05-28T10:48:25.233 回答
1

我从 webrole 尝试过,它对我有用。我将它放在 web 角色的 OnStart() 代码中,由 WaIISHost 调用

于 2011-12-16T23:42:44.153 回答
0

如果要加载证书,可以尝试http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx中的建议

链接自如何将公共证书导入 Windows Azure?

于 2011-05-25T22:12:27.433 回答