安全地复制NAS Filer上的文件

Dav*_*ras 6 .net c# cifs nas

我们有一个NetApp NAS文件管理器,它有时会出现故障,不确定这是否依赖于网络问题,重负载或Filer本身; 事情是,通常的System.IO.File.Copy(...)命令有时会意外地失败,而它在一分钟之前工作,并在...之后的一分钟再次工作...文件管理器正在使用CIFS文件系统.

在我的Log4Net日志文件中,我看到了异常:

System.IO.IOException:指定的网络名称不再可用.在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)...

网络团队不确定会发生什么以及为什么,我现在正在考虑是否可以实现一个简单的尝试/重试系统来复制文件并在发生故障时重试副本,可能是System.IO.File.Copy不是专为CIFS存储而设计,但适用于普通的NTFS驱动器或稳定的网络存储.

是否有适合执行此复制和重试的常见模式或.NET类,或者我应该使用类似下面的伪代码的方法?

while(!copied && count <5)
{
  count++;

  try
  {
    //here copy the file
    ...

    //if no exception copy was ok
    copied = true;
  }
  catch
  {
    if(count >= 5)
    {
      // Log that retry limit has been reached...
    }
    else
    {
      // make thread to wait for some time,
      // waiting time can be in function of count or fixed...
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

Dav*_*ras 1

经过数周的研究、测试和痛苦,我似乎终于找到了一个可行的解决方案,决定用调用System.IO.File.CopyMicrosoft Robocopy 命令来替换该方法,该命令在 Win Server 2008 R2 中可用,并且从第一次尝试起似乎工作得很好。这让我感到很舒服,因为我不是重新发明轮子,而是使用专门为我的需求而设计的经过测试的技术。不管怎样,谢谢大家的回答和评论。