【发布时间】:2014-10-15 17:36:50
【问题描述】:
我正在尝试让我的 .aspx 页面从其 web.config 文件中读取。在其他服务器上运行的代码在一台特定服务器上无法按预期运行(涉及的所有机器都是 W2K3 R2 SP2)。
.aspx 的一个 sn-p 是
<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
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 文件?
【问题讨论】:
-
没有试过这个 - 但我认为
web.config在 web 应用程序进程启动时被读取(aspnet_wp.exe在 2k3/IIS6 我认为),然后被应用程序缓存,所以你之后不会看到 ProcMon 访问它。验证:杀死网络应用进程并重新加载浏览器以强制重启。 -
@nothingisnecessary:很好的调用,.config 文件在应用程序启动时被读取。我可以看到我的文件正在被读取,但我仍然没有从文件中获得预期值。
标签: asp.net configuration