FluentFTP 错误 421 无法创建套接字...尝试并行上传时

问题描述

我正在使用最新的 FluentFTP,并且正在尝试实现并行上传功能

问题是某些连接抛出异常并显示“无法创建套接字”消息,并且我在失败的文件上看不到任何特定模式。

private List<string> ParallelUpload(string dir,string ftpPath,int maxConnections,FtpRemoteExists existsMode,FtpVerify verifyOptions) {

    Dictionary<string,byte[]> imgList = ReadImagesFromdisk(dir);
    var fileList = imgList.Keys.ToList();
    var FailedUploads = new List<string>();
    var syncFailed = new object();
        
    fileList.ParallelForEarch(maxConnections,(fileName) => {
        var tmpFailed = DoUploadImage(ftpPath,fileName,existsMode,verifyOptions);
        lock (syncFailed) {
            FailedUploads.AddRange(tmpFailed);
        }
    });
        
    return FailedUploads;
}
        
private List<string> DoUploadImage(string ftpPath,string file,FtpVerify verifyOptions) {
        
    var FailedUploads = new List<string>();
        
    using (var ftp = new FtpClient()) {
        ftp.Host = _ftpServer;
        ftp.Port = _ftpPort;
        
        if (!string.IsNullOrEmpty(_ftpUser) && !string.IsNullOrEmpty(_ftpPassword))
            ftp.Credentials = new NetworkCredential(_ftpUser,_ftpPassword);
        
        ftp.EncryptionMode = FtpEncryptionMode.Auto;
        ftp.ValidateAnyCertificate = true;
        
        ftp.OnLogEvent = OnFTPLogEvent;
        
        ftp.AutoConnect();
        
        var remotePath = $"{ftpPath}{Path.GetFileName(file)}";
        
        try {
            ftpStatus = ftp.UploadFile(file,remotePath,createRemoteDir,verifyOptions);
        } catch (Exception ex) {
            //catch exception
        }
        
        if (ftpStatus.IsFailure())
            FailedUploads.Add(file);
    }
        
    return FailedUploads;
}

public void ParallelForEarch<TSource>(this IEnumerable<TSource> source,int parallelSlots,Action<TSource> action) {
    Parallel.ForEach(source,new ParallelOptions() { MaxDegreeOfParallelism = parallelSlots },action);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)