【问题标题】:Environment.GetEnvironmentVariable("RoleRoot") returning null when called in a WebRoleEnvironment.GetEnvironmentVariable("RoleRoot") 在 WebRole 中调用时返回 null
【发布时间】:2011-05-25 21:44:11
【问题描述】:

我有一个由 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 调用时返回路径?

【问题讨论】:

  • 您确定需要在RoleRoot 中查找文件吗?对我来说这似乎是一个错误的想法。
  • 我需要加载证书。 blob 会是更好的主意吗?
  • 你能说得更清楚一点,你打算如何处理这个文件吗?谁来读它,谁来写它?可能您只需要这样:msdn.microsoft.com/en-us/library/…
  • 我刚刚编辑了这个问题。 :)
  • 关于您的问题,快速谷歌搜索结果如下:blogs.msdn.com/b/avkashchauhan/archive/2011/05/25/…

标签: azure azure-web-roles webrole


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多