我正在Windows Azure模拟器中运行Web项目,并且未加载web.config。我作为一个完整的IIS应用程序运行,我可以在启动dev结构后转到IIS中运行的应用程序,并浏览到文件位置,并验证正确的web.config确实在文件夹中。
当我运行我的应用程序时,没有加载任何标准appSetting键,配置或企业库配置。我可以使用所有可用的数据从machine.config。
中提取我已经通过查看配置管理器数据,conn字符串集合验证了这一点,并且有很多关于无法访问我的数据库的错误,因为默认值不存在而且唯一的conn字符串是本地sql express来自machine.config的服务器信息。
答案 0 :(得分:7)
当角色正在启动时,您无法正常访问web.config,因为它正在另一个进程中运行。您的角色属性上的角色设置(右键单击您的角色并选择属性,然后选择设置选项卡)是您应该拥有角色设置的位置,您可以从以下角色代码访问这些角色:
RoleEnvironment.GetConfigurationSettingValue("MySetting")
如果您仍然真的想要使用web.config,那么可能能够这样做:首先右键单击web.config并选择Copy if Newer,这将复制{{1}到所有其他角色组合所在的web.config
。然后你可以使用XML阅读器加载它并自己解析它,我不认为System.Environment.CurrentDirectory
会帮助你,因为它需要一个虚拟路径,所以我怀疑你必须自己解析它。
答案 1 :(得分:5)
实际上,认为这是一个PEBCAK问题。我在一个不同的服务中盲目地跟踪了一个现有的例子,它是一个工作者角色,并且碰巧在服务器上产生一个新的exe进程作为一个hack来包装我们需要进行某些处理的32位第三方dll。 / p>
我直接添加的新代码尝试从我们的一个Web角色中的队列中处理一些消息。执行的过程在永远while循环之后的Run()方法中直接启动,但是进程期望访问整个web.config(ENT LIB和EF)以便工作 - 我猜测代码在webrole中的存在方式与web角色实例中的应用程序的存在方式不同。
我可以在example之后打开网站的网络配置,但我猜我需要为此过程单独创建一个辅助角色。羞耻,因为这是一个很小的过程,但绝对是愚蠢的。
任何人都可以确认在webrole中执行的代码不应该访问web.config吗?通过'执行',我的意思是该过程在Run()中启动,但实际上作为托管应用程序中的服务存在。我想这等于期望来自附属程序集的配置项自动出现在主机进程的配置中。
呸!如果是这种情况,那么将此流程作为辅助角色来修复它吗?我找不到任何明确拒绝或确认我的期望......
我也会在这里看看 - 旧 - 但看起来几乎相同 - 并建议我的web.config应该正常工作:
http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/07e7dde7-0c0b-4497-8019-303a58759deb
UPDATE --- 我创建了一个辅助角色并将代码移到那里,它按预期工作。所以我想要的只是一个权威 - 这将永远不会起到网络角色的作用,所以我给史蒂夫马克思发了电子邮件。
@stevemarx来自个人通信 - “webrole.cs中的代码与IIS下的Web应用程序运行的过程不同,虽然您当然可以打开web.config并阅读它(它只是一个文件中的文件)在当前目录中,.NET不会对web.config做任何特殊处理。(这就像将一个名为web.config的文件放在与你运行的控制台应用程序相同的目录中。)“
所以不,webrole.cs进程中的代码不会加载我的web.config。