Azure Web角色进程没有加载web.config?

Jos*_*osh 7 azure

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

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

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

小智 7

由于角色正在另一个进程中运行,因此您无法正常访问web.config.您的角色属性上的角色设置(右键单击您的角色并选择属性,然后选择设置选项卡)是您应该拥有角色设置的位置,您可以从以下角色代码访问这些角色:

RoleEnvironment.GetConfigurationSettingValue("MySetting")
Run Code Online (Sandbox Code Playgroud)

如果你真的想要使用web.config,你可以通过首先右键单击web.config并选择Copy if Newer来实现,这将复制web.configSystem.Environment.CurrentDirectory所有其他角色组合所在的位置.然后你可以使用XML阅读器加载它并自己解析它,我认为它WebConfigurationManager不会帮助你,因为它需要一个虚拟路径,所以我怀疑你必须自己解析它.


jma*_*etz 5

实际上,认为这是一个PEBCAK问题.我在一个不同的服务中盲目地跟踪了一个现有的例子,它是一个worker角色,并且碰巧在服务器上产生一个新的exe进程作为hack来包装我们需要进行一些处理的32位第三方dll.

我添加的新代码直接尝试从我们的一个Web角色中的队列中处理一些消息.执行的过程在永远while循环之后的Run()方法中直接启动,但是进程期望访问整个web.config(ENT LIB和EF)以便工作 - 我猜测代码在webrole中的存在方式与web角色实例中的应用程序的存在方式不同.

我可以按照这个例子打开网站的网络配置,但我猜我需要为这个过程创建一个单独的工作者角色.羞耻,因为这是一个很小的过程,但肯定是kludgy.

任何人都可以确认在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.