2013-08-06 71 views
2

我试图开发概念WCF web服务的证明,它使用FileSystemWatcher类听一个目录,并简单地输出变化的类型和被更改的文件的完整路径。WCF服务来监视文件目录更改

我有一个示例控制台应用程序如预期其工作,但是当我端口为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(); 
    } 

任何想法为什么不拿起文件的变化?

回答

1

也许你误解相比正常的Windows服务WCF服务的宗旨。 WCF服务默认只在通话时激活。它不像一般的Windows服务一样在后台运行。

对于您的具体例子,你可能需要一种等待你关闭,你需要你的守望者之前,只是一个局部变量在你的函数,而是一个类变量为它工作。

+0

感谢的读你的回应 - 该服务现在没有任何变化工作。不确定自己修复了什么,但是发生了变化,被事件处理程序捕获 – andrewb

2

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

如果您的服务在LocalSystem帐户(或类似帐户)下登录,那么它会监视它自己的桌面,而不是当前交互式用户的桌面,您正在更改文件或文件夹。

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

+0

服务的帐户和运行客户端的帐户是相同的。 – andrewb