ASP.NET不会尝试打开web.config文件?

时间:2014-10-15 17:36:50

标签: asp.net configuration

我试图让我的.aspx页面从其web.config文件中读取。在其他服务器上运行的代码在一台特定服务器上无法正常工作(所有涉及的机器都是W2K3 R2 SP2)。

.aspx的片段是

<body>
    <form id="form1" runat="server">
    <div>
     <asp:Label runat="server" Text="" ID="lblTime" /><br />
    Value of myConfigTest is '<asp:Label ID="lblValue" runat="server" Text=""/>'
    </div>
    </form>
</body>

代码在这里:

using System;
using System.Web.Configuration;

namespace configTestWeb
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblTime.Text = DateTime.Now.ToLongTimeString();
            string value = WebConfigurationManager.AppSettings["myConfigTest"];
            lblValue.Text = value;
        }
    }
}

我的web.config文件因此设置:

<?xml version="1.0"?>

<configuration>

    <appSettings>
        <add key="myConfigTest" value="This is a test"/>
    </appSettings>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
</configuration>

尝试进行故障排除时,我将ProcMon设置为在web.config上过滤并从浏览器中点击该页面。输出是

1:06:04 PM
myConfigTest的值是''

但真正奇怪的是,ProcMon从未报告尝试访问该文件!如果我右键单击IIS中的虚拟目录并选择Properties | ASP.NET |编辑配置我可以看到在ProcMon中使用~65个条目访问web.config,并在ASP.NET配置设置对话框中正确报告appSetting。

我相信我已经排除了ACL的问题 a)将.aspx和web.config所在的整个目录树设置为Everyone |完全权限
b)如果权限是问题,ProcMon将报告打开文件的失败尝试

绝望中我卸载/重新安装了ASP.NET 4.0。

值得注意的是,从.exe读取配置在使用

的服务器上完美运行
string value = System.Configuration.ConfigurationManager.AppSettings[key];

此问题出现在多个虚拟目录中。

所以我的问题是,什么可能阻止这台服务器能够读取web.config文件?

1 个答案:

答案 0 :(得分:0)

尝试进行更简单的测试而不是麻烦使用ProcMon:编辑web.config文件以启用跟踪功能,然后访问网站并查看它是否显示请求跟踪。

将此添加到web.config节点内的system.web

<trace
    enabled="true"
    requestLimit="10"
    pageOutput="false"
    traceMode="SortByTime"
    localOnly="false"
/>

默认情况下,更改为web.config(将文件保存/写入磁盘时)将重新启动ASP.NET应用程序池。但是,可以更改这些选项,因此如果在修改web.config后没有看到Web应用程序行为发生更改,您还可以尝试停止并重新启动服务,或者使用任务管理器触发应用程序池回收杀死aspnet_wp.exe进程(我认为这是2k3中的调用,如果不是尝试w3wp.exe),然后再向Web应用程序发出请求(刷新浏览器),IIS应该启动应用程序适合你的游泳池。

如果在保存enabled=true后看不到更改(在跟踪enabled=falseweb.config之间切换),但在强制停止/重新启动后仍然可见,那么该框上的IIS可能不会可以选择在配置更改时重新启动应用程序池(在我前面没有2k3,但在IIS 7中它位于应用程序池&gt;高级选项&gt;回收&gt;“禁用重新配置以进行配置更改” - 它是其中一个令人讨厌的双阴影选项,所以“false”表示配置更改后回收,“true”表示不回复。

<强>更新 Dang,看起来像IIS6在App pool属性表的Recycling选项卡中没有“for Configuration changes”选项。抱歉,不确定此设置的存储位置,似乎不在machine.configweb.config,所以可能是IIS内部使用的元数据库内容(注册表可能是?)

如果您尝试切换跟踪的技巧并且没有看到任何效果,您是否确认编辑了正确的web.config文件?