【问题标题】:Azure web role process not loading web.config?Azure Web 角色进程未加载 web.config?
【发布时间】:2011-06-07 14:52:56
【问题描述】:

我正在 Windows Azure 模拟器中运行一个 Web 项目,但未加载 web.config。我作为一个完整的 IIS 应用程序运行,我可以在 dev fabric 启动后转到在 IIS 中运行的应用程序,并浏览到文件位置,并验证正确的 web.config 确实在文件夹中。

当我运行我的应用程序时,没有加载任何标准的 appSetting 键、配置或企业库配置。我可以使用的所有数据都从 machine.config 中提取。

我已经通过查看配置管理器数据、conn 字符串集合来验证这一点,并且有很多关于无法访问我的数据库的错误,因为默认值不存在并且唯一的 conn 字符串是本地 sql express machine.config 中的服务器信息。

【问题讨论】:

  • 您的 web.config 有什么不寻常之处吗?如果您只有一些 appSettings 或单个连接字符串会发生什么?你能读懂那些吗?听起来有些东西的格式不正确。您有机会发布示例 web.config 吗?
  • @David - 配置没有改变 - 应用程序在 Azure 和本地运行,并且本地运行正常。我对配置进行了二进制比较,它与我们的测试 azure env 中的工作相同,顺便说一句,它仍然有效。 xml 已经过验证并且也很好 - 没有括号混淆。我的开发环境只是没有加载它。我会在何时以及是否有修复的情况下发布,以防再次弹出。它可能会很愚蠢,但可能不在配置中....感谢您的帮助。

标签: azure


【解决方案1】:

当角色处于启动状态时,您无法正常访问 web.config,因为它正在另一个进程中运行。角色属性上的角色设置(右键单击角色并选择属性,然后选择设置选项卡)是您应该进行角色设置的地方,您可以从角色代码中访问这些设置,如下所示:

RoleEnvironment.GetConfigurationSettingValue("MySetting")

如果您仍然真的想使用您的 web.config,您可能可以通过首先右键单击 web.config 并选择 Copy if Newer 来做到这一点,这会将 web.config 复制到System.Environment.CurrentDirectory 是所有其他角色聚集的地方。然后您可以使用 XML 阅读器加载它并自己解析它,我认为 WebConfigurationManager 不会帮助您,因为它需要一个虚拟路径,所以我怀疑您必须自己解析它。

【讨论】:

  • 不确定为什么会给出-1。这是在 WebRole.OnStart 期间获取配置设置的正确方法,因为尚未加载 web.config。
【解决方案2】:

实际上,认为这是一个 PEBCAK 问题。我盲目地遵循我们拥有的另一个服务中的现有示例,该服务处于工作角色,并且碰巧在服务器上生成了一个新的 exe 进程作为 hack 来包装我们需要进行一些处理的 32 位 3rd 方 dll。

我直接添加的新代码尝试在我们的一个 Web 角色中处理来自队列的一些消息。执行的进程在永远的 while 循环之后的 Run() 方法中直接启动,但该进程需要访问整个 web.config(ENT LIB 和 EF)才能工作 - 我猜代码webrole 中的应用程序与 te web 角色实例中的应用程序不同。

我可以在example 之后打开站点的 Web 配置,但我猜我需要为此过程创建一个单独的工作角色。很遗憾,因为这是一个很小的过程,但绝对是笨拙的。

谁能确认在 webrole 中执行的代码不应访问 web.config?通过“执行”,我的意思是进程在 Run() 中启动,但物理上作为服务存在于托管应用程序中。我想这无异于期望来自卫星程序集的配置项自动出现在主机进程的配置中。

呸!如果是这种情况,作为工作角色运行这个进程是否可以解决这个问题?我找不到任何可以明确否认或确认我的期望的东西...

我也会在这里看看 - 旧的 - 但看起来几乎相同 - 并建议我的 web.config 应该可以工作:

http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/07e7dde7-0c0b-4497-8019-303a58759deb

更新--- 我创建了一个工人角色并将代码移到那里,它按预期工作。所以我想要的只是一个确定的 - 这永远不会在网络角色中起作用,所以我给史蒂夫马克思发了电子邮件。

@stevemarx 来自个人交流 - “webrole.cs 中的代码与 IIS 下的 Web 应用程序在不同的进程中运行,虽然您当然应该能够打开 web.config 并阅读它(它只是当前目录),.NET 不会对那里的 web.config 做任何特别的事情。(这就​​像将一个名为 web.config 的文件放在与您正在运行的控制台应用程序相同的目录中。)"

所以不,webrole.cs 进程中的代码不会加载我的 web.config。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2017-09-16
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多