我使用Visual Studio 2010 C#创建了一个ASP.NET网站。
我的程序读取配置文件以创建一些类并显示信息。
配置文件未包含在项目中(未出现在解决方案资源管理器中)。如果我在我的应用程序未运行时修改文件,并在之后运行它,它仍然会读取旧版本,就像它保留在缓存中一样。我必须关闭Visual Studio才能接受更改。
我的第二个问题与我的第一个问题(如果不是由此引起)有关。我正在使用FileSystemWatcher来查看在应用程序运行时是否修改了配置文件,但是从未调用Changed事件。
private string _configFilePath;
private FileSystemWatcher _watcher;
protected void Page_Load(object sender, EventArgs e)
{
//Gets the config file in the application's parent directory
string appPath = this.MapPath("~");
string[] split = appPath.Split('\\');
_configFilePath = appPath.Substring(0, appPath.Length - split[split.Length-1].Length);
Application.Add("watcher", new FileSystemWatcher(_configFilePath.Substring(0, _configFilePath.Length-1), "*.xml"));
_watcher = (FileSystemWatcher)Application["watcher"];
_watcher.NotifyFilter = NotifyFilters.FileName;
_watcher.Changed += new System.IO.FileSystemEventHandler(Watcher_Changed);
_configFilePath += "ProductsConfig.xml";
UpdateDisplay();
}
private void Watcher_Changed(object source, FileSystemEventArgs e)
{
UpdateDisplay();
}
我该如何解决这个问题?
谢谢
答案 0 :(得分:4)
我的第二个问题与我的第一个问题(如果不是由此引起)有关。一世 我正在使用FileSystemWatcher来查看配置文件是否被修改 应用程序正在运行,但从未调用Changed事件。
它永远不会被调用,因为此时服务请求的线程已经返回到池并且请求已经结束。 Watcher_Changed
事件永远不会发生。
您需要以不同的方式解决这个问题,请记住HTTP是一个“断开连接”的协议,在请求提供后,不要指望任何页面事件在服务器上发生某些事情时“自动”触发将通知所有连接用户的一方。
实现此目的的一种方法是通过Ajax。您需要经常“询问”服务器是否有新信息,并更新由于服务器上的更改而需要更新的页面部分。
答案 1 :(得分:0)
这里有两个问题。 你从未打电话给_watcher.EnableRaisingEvents = true; 2.您尝试转到根文件夹的父文件夹,这可能是不允许的。
/ Tibi