为什么我的FTP上传会间歇性失败?

时间:2013-10-21 21:54:22

标签: c# ssis ftp

我有一些C#代码(计划的SSIS作业的一部分),它将文件上传到FTP。该文件已存在于FTP站点上,因此该作业只是用较新的版本覆盖它。

大部分时间它运作良好,但每隔几周它就会开始失败。最近发生这种情况时,我发现初始错误是“427 Aborted,file write error”。其他时候我收到“451,处理中的本地错误”。在初始故障之后,作业尝试运行的每个后续时间都会返回“550 File Unavailable”。当我在收到此错误后使用Filezilla打开网站时,我发现我的目标文件在那里但是空的。如果我使用Filezilla删除空文件,作业将重新开始工作。

我已将我的代码更改为首先删除有问题的文件,然后上传新文件,以期作为解决方法。我无法重现此错误,因此时间会告诉您解决方法是否有帮助。

那说,我想找出根本原因。我已经能够找到关于427错误的非常少的信息。任何人都知道如何避免它或想要更好的解决方法?

注意:FTP服务器是一个专有的东西,除了用户名,密码和附件外,我对它没有多少控制权。端口。

我的代码如下(为简洁起见编辑)......

private void CreateFile(FtpWebRequest request, FtpWebResponse response, string ipAddress, Int16 port, string folderName, string username, string password)
{
    string filename = "myfile.csv";
    request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}:{1}/{2}/{3}", ipAddress, port, folderName, filename));
    request.KeepAlive = false;
    request.Credentials = new System.Net.NetworkCredential(username, password);
    request.Proxy = null;
    request.UsePassive = false;
    request.Method = WebRequestMethods.Ftp.DeleteFile;
    request.GetResponse();

    request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}:{1}/{2}/{3}", ipAddress, port, folderName, filename));
    request.KeepAlive = false;
    request.Credentials = new System.Net.NetworkCredential(username, password);
    request.Proxy = null;
    request.UsePassive = false;
    request.Method = WebRequestMethods.Ftp.UploadFile;

    using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
    {
        DataTable myList = new DataTable();
        System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter();
        da.Fill(myList, Dts.Variables["MyList"].Value);

        foreach (DataRow row in myList.Rows)
        {
            sw.WriteLine(row["col1"]);
        }
        sw.Flush();
    }
}

0 个答案:

没有答案