chúng tôi có một trình tải NetApp NAS mà theo thời gian dường như không thành công, không chắc chắn nếu điều này phụ thuộc vào các vấn đề mạng, tải nặng hoặc chính Filer; điều này là bình thường System.IO.File.Copy(...)
lệnh thất bại đôi khi bất ngờ trong khi nó làm việc một phút trước và hoạt động trở lại một phút sau khi ... filer đang làm việc với hệ thống tập tin CIFS.Sao chép tập tin an toàn trên NAS Filer
vào logfile Log4Net của tôi, tôi thấy ngoại lệ:
System.IO.IOException: Tên mạng chỉ định không còn sẵn. tại System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) ...
đội mạng là không chắc chắn những gì xảy ra và tại sao, bây giờ tôi đang suy nghĩ nếu tôi có thể thực hiện một hệ thống thử/retry đơn giản để sao chép các tập tin và thử lại bản sao trong trường hợp thất bại, nó có thể có thể là System.IO.File.Copy không được thiết kế cho kho CIFS nhưng đối với ổ đĩa NTFS bình thường hoặc lưu trữ mạng ổn định.
Có các mẫu phổ biến hoặc lớp .NET phù hợp để thực hiện việc này sao chép và thử lại hoặc tôi chỉ nên sử dụng cách tiếp cận như trong mã giả sau đây?
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...
}
}
}
'System.IO.File.Copy()' tóm tắt chức năng Win32 ['CopyFile'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851.aspx) . Vì vậy, tôi sẽ mã lên một cái gì đó mà sử dụng nhiều lần và xem nếu nó không thành công là tốt. Tôi nghĩ bạn đang cố gắng đưa một băng trợ phần mềm vào một vấn đề lớn hơn. –
Thiết lập một tên máy chủ 'ping -t' và đăng nhập nó vào một tập tin. Hãy để nó chạy trong một vài giờ sau đó tìm thời gian chờ. Điều đó sẽ cho bạn biết nếu vấn đề là mạng liên quan. Vẫn có thể là một vấn đề với chính thiết bị, nhưng ít nhất bạn có thể loại trừ một vấn đề .NET. –
Tôi thích vòng lặp đó. Có thể đặt một chờ đợi nhỏ trong bắt. – Paparazzi