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

标签 azure azure-web-roles webrole

我有一个方法(在单独的类库中),由 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/

相关文章:

Azure - 启动多个 Web 角色项目时出错

java - 如何使用 ARM 获取 Azure 虚拟机的电源状态

c# - 联合扇出查询

asp.net-mvc - 如何在 SQL Server 中为 Asp.Net MVC 4 应用程序或 WebRole 应用程序存储 asp.net session 状态?

azure - 为什么 Azure 在我的 cspkg 中找不到 IISConfigurator.exe?

c# - Azure - 从辅助角色访问与 Web 角色中相同的 blob

Azure AD 设备流验证_url

node.js - 有人成功使用 Azure AD 对 Node.js Web 应用程序的用户进行身份验证吗?

azure - 重启后 - 在 Azure webrole 上安装证书

asp.net - 发布多个网站 WebRole 时构建转换