我在C#/ VS2008 / .NET3.5中编写了一个Windows服务,它使用FileSystemWatchers监视一些FTP目录,并将文件移到另一个位置进行处理。我今天注意到它在服务启动后很快就会抛出“参数不正确”的错误,但如果我们等待几分钟,文件就会被复制而不会发生意外。我看到错误消息通常与不正确的权限有关,但我验证了目录(目标和源)的权限是正确的,正如我所说的文件移动只在几分钟后工作。
这是在文件完成复制到被监控的FTP目录时调用的代码片段:
//found the correct source path
string targetDir = dir.TargetDirectory;
string fileName = Path.GetFileName(e.FullPath);
errorlocation = "move file";
string targetFilePath = Path.Combine(targetDir, fileName);
if (File.Exists(targetFilePath))
{
File.Delete(targetFilePath);
}
File.Move(e.FullPath, Path.Combine(targetDir, fileName));
dir引用并提供有关文件加载目录的信息。 e是FileSystemEventArgs。 Targetdir是从app.config中自定义配置块中的目录设置中获取的,该配置块告诉服务将新文件复制到的位置。
我没有在这里包含代码,但我知道它在File.Move(上面的最后一行)上失败了,因为我为跟踪步骤而做了一些EventLog条目。
在服务启动后很快就知道移动失败的原因,但以后工作正常吗?
该过程的基本概述,如果它有所了解:外部供应商每天向我们发送一些文件。当文件进入时,我的代码根据FTP目录识别文件的来源,然后加载设置以传递给将解析和保存文件的SSIS作业。现在可能有十几个目录被监视,每个目录都有自己的SSIS作业配置设置。是否有可能系统混淆为启动,只需要一些时间来填充所有设置?每个源目录都有自己的FileSystemWatcher。
感谢您的帮助。
答案 0 :(得分:1)
我要回答的第一个问题是,当它失败时,它们的价值是什么:
这些价值中的一个可能不是你所期望的
答案 1 :(得分:-1)
我正在标记这个问题,因为问题消失了。我们没有更改代码中的任何内容,但它现在可以在重新启动后立即生效。我们最好的理论是:自从我发布了这个,我正在为移动的办公室工作的客户端,作为迁移的一部分,更新了许多系统和网络策略,并为新环境调整了服务器设置。这些变化中有一个(或多个)可能解决了这个问题。
进一步支持这一理论:在移动之前,我的开发虚拟机无法运行Web浏览器。 (我点击加载浏览器它不起作用,有时它会在任务管理器中短暂出现然后消失。)办公室移动后,这个问题不再出现。
因此可能会出现一些导致问题的网络设置。对不起,我不能更具体。