我试图让我的.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文件?
答案 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=false
和web.config
之间切换),但在强制停止/重新启动后仍然可见,那么该框上的IIS可能不会可以选择在配置更改时重新启动应用程序池(在我前面没有2k3,但在IIS 7中它位于应用程序池&gt;高级选项&gt;回收&gt;“禁用重新配置以进行配置更改” - 它是其中一个令人讨厌的双阴影选项,所以“false”表示配置更改后回收,“true”表示不回复。
<强>更新强>
Dang,看起来像IIS6在App pool属性表的Recycling选项卡中没有“for Configuration changes”选项。抱歉,不确定此设置的存储位置,似乎不在machine.config
或web.config
,所以可能是IIS内部使用的元数据库内容(注册表可能是?)
如果您尝试切换跟踪的技巧并且没有看到任何效果,您是否确认编辑了正确的web.config
文件?