如何解决在WebRole中调用时,Environment.GetEnvironmentVariable“ RoleRoot”返回null
| 我有一个方法(在单独的类库中),该方法由Webrole和WorkerRole调用。此方法包含文件路径,该文件路径使用Environment.GetEnvironmentvariable(\"RoleRoot\")
返回,如下所示:
private string FooPath()
{
string appRoot = Environment.GetEnvironmentvariable(\"RoleRoot\");
return Path.Combine(appRoot + @\"\\\",@\"approot\\file.foo\");
}
当我从WorkerRole调用此方法时,路径将正常返回。但是,当我从Webrole调用它时,我会得到2英镑。
有任何想法吗?
编辑:我正在使用APNS-Sharp将推送消息发送到iOS,并且它需要一个.p12证书才能正常工作。目前,我的类库(由Webrole和WorkerRole调用)的根目录中都有.p12。但问题是:为什么当我从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证书。我将不得不将其转换为另一种格式,我认为这不会对我有用。因此,最好的选择是将它们放置在应用程序的根目录上,并将其“构建操作”标记为“内容”。
,我从webrole尝试过,它对我有用。我将其放置在Web角色的OnStart()代码上,该代码由WaIISHost调用
,如果要加载证书,可以尝试在http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx中进行操作
链接自我如何将公共证书导入Windows Azure?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。