我正在将数千个文件上传到服务器。
服务器连接中断分配,所以我需要一种方法让这个控制台应用程序能够在连接失败几秒钟等时恢复。
我的应用程序很简单,它只是获取 c:\uploads 文件夹中的所有文件,然后使用 Web 服务将文件上传到服务器。
所以:
foreach(文件中的字符串文件) { UploadToServer(file); }
我怎样才能做到这一点,以便在连接失败时重新覆盖?(故障通常只持续几秒钟)
使用一个小助手方法,在认输之前重试上传几次。例如:
static void UploadFile(string file) {
for (int attempt = 0; ; ++attempt) {
try {
UploadToServer(file);
return;
}
catch (SocketException ex) {
if (attempt < 10 && (
ex.SocketErrorCode == SocketError.ConnectionAborted ||
ex.SocketErrorCode == SocketError.ConnectionReset ||
ex.SocketErrorCode == SocketError.Disconnecting ||
ex.SocketErrorCode == SocketError.HostDown)) {
// Connection failed, retry
System.Threading.Thread.Sleep(1000);
}
else throw;
}
}
}
根据需要调整异常处理代码。
如果文件上传失败,是否会引发异常?如果有,则处理异常,并将这些文件存储在某种容器中以便稍后重试,或者您可以放置某种 Thread.Sleep 稍等片刻再试一次。