Wir haben einen NetApp NAS-Filer, der von Zeit zu Zeit zu versagen scheint, nicht sicher, ob dies von Netzwerkproblemen, hoher Auslastung oder dem Filer selbst abhängt; Die Sache ist, dass der übliche System.IO.File.Copy(...)
Befehl manchmal unerwartet fehlschlägt, während es eine Minute zuvor funktionierte und wieder eine Minute nach ... filer arbeitet mit dem CIFS-Dateisystem.Sicheres Kopieren von Dateien auf NAS Filer
in meinem Log4Net Logfiles sehe ich die Ausnahme:
System.IO.IOException: Der angegebene Netzwerkname ist nicht mehr verfügbar. bei System.IO .__ Error.WinIOError (Int32 Errorcode, String maybeFullPath) ...
Netzwerk-Team ist sich nicht sicher, was passiert und warum, denke ich jetzt, wenn ich eine einfache try/Wiederholungssystem implementieren kopieren die Datei und die Kopie im Falle eines Fehlers erneut versuchen, könnte es sein, dass System.IO.File.Copy nicht für CIFS-Speicher, sondern für normale NTFS-Laufwerke oder stabilen Netzwerkspeicher entwickelt wurde.
Gibt es gemeinsame Muster oder .NET-Klassen geeignet, um dies zu tun kopieren und wiederholen oder soll ich einfach einen Ansatz wie in der folgenden Pseudo-Code verwenden?
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()' läuft auf die Funktion Win32 ['CopyFile'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851.aspx) herunter . Also würde ich etwas kodieren, das das wiederholt benutzt und sehen, ob es auch fehlschlägt. Ich denke, du versuchst, ein Software-Pflaster auf ein größeres Problem zu stellen. –
Richten Sie einen 'ping -t hostname' ein und protokollieren Sie ihn in einer Datei. Lassen Sie es für ein paar Stunden laufen und dann nach Timeouts suchen. Das sollte Ihnen sagen, ob das Problem netzwerkbezogen ist. Könnte immer noch ein Problem mit dem Gerät selbst sein, aber zumindest kann man ein .NET-Problem ausschließen. –
Ich mag diese Schleife. Möglich ist eine kleine Wartezeit im Fangen. – Paparazzi