我可以从Azure Web角色入口点访问web.config吗?

时间:2011-09-27 14:54:34

标签: .net web-config azure settings azure-web-roles

我有一个Azure网络角色,我想在<appSettings>标记下的web.config中存储一些设置。是的,我知道服务配置文件,但我有理由更喜欢web.config。

执行时(来自here):

System.Configuration.Configuration rootWebConfig =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (rootWebConfig1.AppSettings.Settings.Count > 0) {
}
尽管我在<appSettings>下添加了一个键值对,但

设置计数始终为零。

我做错了什么?是否可以从Web角色入口点读取web.config中的设置?

2 个答案:

答案 0 :(得分:12)

原因是Microsoft自Azure SDK 1.3以来引入了完整的IIS功能。 这样做的副作用是RoleEntryPoint与Web应用程序的其余部分隔离开来。

以下摘自微软的blog post摘录描述了您所看到的内容。

  

...使用完整的IIS,RoleEntryPoint在 WaIISHost.exe 下运行,而网站在正常的IIS w3wp.exe 进程下运行。

     

...因此它希望其配置位于名为 WaIISHost.exe.config 的文件中。因此,如果您在Web项目中创建具有此名称的文件并将“复制到输出目录”属性设置为“始终复制”,您将发现RoleEntryPoint可以愉快地阅读此内容。

除了提到的解决方案之外,选项可能是尝试使用Hosted Web Core(HWC)模式而不是完整的IIS模式。


更新 - Azure SDK 1.8中引入的更改

  • Azure SDK 1.3 -1.7将在 WaIISHost.exe.config

  • 中查找
  • Azure SDK 1.8+将在 WebRoleProjectName.dll.config 中查找。

通过对SDK的最新更改,您应该能够在项目中放置 app.config ,然后您的角色入口点就可以访问它了。

答案 1 :(得分:0)

您的web.config在哪里?您正在执行的代码在哪里?

如果它位于OnStart()子类的RoleEntryPoint方法中,您将在同一项目的根目录中看到web.config中的条目 - 通常,这是Web部署项目本身,而不是您的网站。这允许Azure在一个Web部署角色下支持多个Web站点。