【问题标题】:WCF service to monitor a directory for file changesWCF 服务用于监视目录中的文件更改
【发布时间】:2013-08-06 23:38:42
【问题描述】:

我正在尝试开发一个概念验证的 WCF Web 服务,它使用 FileSystemWatcher 类来监听目录并简单地输出更改的类型和更改的文件的完整路径。

我有一个按预期工作的示例控制台应用程序,但是当我将它移植到 WCF 库中时,文件更改的事件处理程序永远不会触发。

代码:

    public void MonitorFolder()
    {
        System.IO.FileSystemWatcher watcher = new System.IO.FileSystemWatcher();
        watcher.Path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "folder-to-watch");
        watcher.IncludeSubdirectories = false;
        watcher.Changed += watcher_Changed;
        watcher.Filter = "*.*";
        watcher.NotifyFilter = NotifyFilters.LastAccess |
                     NotifyFilters.LastWrite |
                     NotifyFilters.FileName |
                     NotifyFilters.DirectoryName;
        watcher.EnableRaisingEvents = true;
    }

    void watcher_Changed(object sender, System.IO.FileSystemEventArgs e)
    {
        Console.WriteLine(string.Format("Change: {0}, File: {1}", e.ChangeType, e.FullPath));
    }

在调用服务的客户端类中:

    static void Main(string[] args)
    {
        FileListenerClient c = new FileListenerClient();
        c.MonitorFolder();
        c.Close();
    }

任何想法为什么这不会获取文件更改?

【问题讨论】:

    标签: c# wcf file monitor


    【解决方案1】:

    Environment.SpecialFolder.Desktop 表示当前用户的桌面。

    如果您的服务在LocalSystem 帐户(或类似帐户)下加注星标,则它会监控自己的桌面,而不是当前交互式用户的桌面,您正在更改文件或文件夹。

    当然,服务帐户的桌面保持不变,因此事件不会触发。

    【讨论】:

    • 服务的账号和运行客户端的账号是一样的。
    【解决方案2】:

    与普通 Windows 服务相比,您可能误解了 WCF 服务的用途。默认情况下,WCF 服务仅在调用时激活。它不像普通的 Windows 服务那样一直在后台运行。

    对于您的确切示例,您可能需要在关闭之前进行某种等待,并且您需要您的观察者只是函数中的一个局部变量,而是一个类变量才能使其工作。

    【讨论】:

    • 感谢您的回复 - 该服务现在可以正常运行,没有任何变化。不确定是什么修复了自己,但事件处理程序会捕获到更改
    【解决方案3】:

    假设 a) 您详细描述的行为是您想要的,并且 b) 您正在查看正确的文件夹,您是否查看过 InternalBufferSize 和 FileSystemWatcher 的众所周知的问题?

    阅读此http://social.msdn.microsoft.com/Forums/vstudio/en-US/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/filesystemwatcher-reliability

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多