ASP.NET FileSystemWatcher更改了事件

时间:2012-02-13 21:14:40

标签: c# asp.net xml web filesystemwatcher

我使用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();
}

我该如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:4)

  

我的第二个问题与我的第一个问题(如果不是由此引起)有关。一世   我正在使用FileSystemWatcher来查看配置文件是否被修改   应用程序正在运行,但从未调用Changed事件。

它永远不会被调用,因为此时服务请求的线程已经返回到池并且请求已经结束。 Watcher_Changed事件永远不会发生。

您需要以不同的方式解决这个问题,请记住HTTP是一个“断开连接”的协议,在请求提供后,不要指望任何页面事件在服务器上发生某些事情时“自动”触发将通知所有连接用户的一方。

实现此目的的一种方法是通过Ajax。您需要经常“询问”服务器是否有新信息,并更新由于服务器上的更改而需要更新的页面部分。

答案 1 :(得分:0)

这里有两个问题。 你从未打电话给_watcher.EnableRaisingEvents = true; 2.您尝试转到根文件夹的父文件夹,这可能是不允许的。

/ Tibi