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

发布于 2024-12-06 22:03:13 字数 575 浏览 2 评论 0原文

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

当我执行时(来自此处):

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

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

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

I have an Azure web role and I want to store some settings in web.config under <appSettings> tag. Yes, I'm aware of service configuration files, yet I have reasons to prefer web.config.

When I execute (from here):

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

settings count is always zero although I've added a key-value pair under <appSettings>.

What am I doing wrong? Is it possible to read settings from web.config from inside web role entry point?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

攒眉千度 2024-12-13 22:03:13

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

以下摘录自 Microsoft 博客文章描述了您所看到的内容。

...使用完整的 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,然后您的角色入口点应该可以访问它。

The reason for this is that Microsoft has introduced Full IIS capability since Azure SDK 1.3.
A side effect of this is that the RoleEntryPoint gets walled off from the rest of the web application.

The following excerpt from Microsofts blog post describes what you're seeing.

...with full IIS, the RoleEntryPoint runs under WaIISHost.exe, while the web site runs under a normal IIS w3wp.exe process.

...so it expects its configuration to be in a file called WaIISHost.exe.config. Therefore, if you create a file with this name in the your web project and set the "Copy to Output Directory" property to "Copy Always" you'll find that the RoleEntryPoint can read this happily.

Apart from the solution mentioned, an option might be to try to use Hosted Web Core (HWC) mode instead of full IIS mode.


Update - changes introduced in Azure SDK 1.8

  • Azure SDK 1.3 -1.7 will look in WaIISHost.exe.config

  • Azure SDK 1.8+ will look in the WebRoleProjectName.dll.config.

With the newest change to the SDK, you should be able to place an app.config in your project and your role entry point should then have access to it.

轻许诺言 2024-12-13 22:03:13

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

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

Where is your web.config, and where is the code you're executing?

If it's in the OnStart() method of a RoleEntryPoint subclass, you'll be seeing the entries in a web.config in the root of the same project - typically, this is the Web deploy project itself, not your Web site. This allows Azure to support multiple Web sites under one Web deployment role.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文