我们有一个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)
经过数周的研究、测试和痛苦,我似乎终于找到了一个可行的解决方案,决定用调用System.IO.File.Copy
Microsoft Robocopy 命令来替换该方法,该命令在 Win Server 2008 R2 中可用,并且从第一次尝试起似乎工作得很好。这让我感到很舒服,因为我不是重新发明轮子,而是使用专门为我的需求而设计的经过测试的技术。不管怎样,谢谢大家的回答和评论。
归档时间: |
|
查看次数: |
2127 次 |
最近记录: |