【问题标题】:Can I access web.config from my Azure web role entry point?我可以从我的 Azure Web 角色入口点访问 web.config 吗?
【发布时间】:2011-11-26 03:19:29
【问题描述】:

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

当我执行时(来自here):

System.Configuration.Configuration rootWebConfig =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (rootWebConfig1.AppSettings.Settings.Count > 0) {
}

尽管我在<appSettings> 下添加了一个键值对,但设置计数始终为零。

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

【问题讨论】:

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


    【解决方案1】:

    这是因为微软从 Azure SDK 1.3 开始就引入了完整的 IIS 功能。 这样做的副作用是 RoleEntryPoint 与 Web 应用程序的其余部分隔离开来。

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

    ...对于完整的 IIS,RoleEntryPoint 在 WaIISHost.exe 下运行,而网站在普通 IIS w3wp.exe 进程下运行。

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

    除了提到的解决方案之外,一个选项可能是尝试使用托管 Web 核心 (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,然后您的角色入口点应该可以访问它。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • web.config 位于 web 角色项目树的根目录中,我的代码位于 RoleEntryPoint 子类中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 2012-11-20
      相关资源
      最近更新 更多