【问题标题】:c# Why does FTP upload only succeed sometimes?c# 为什么FTP上传有时只成功?
【发布时间】:2016-03-22 15:45:52
【问题描述】:

我正在做一个项目,它将一些信息收集到 .CSV 文件中,然后将文件发送到 ftp 服务器。

程序有时会成功发送文件,但有时会停止并抛出错误:

System.dll 中出现“System.Net.WebException”类型的未处理异常

附加信息:远程服务器返回错误:227 Entering Passive Mode (192,168,10,170,216,244)

谁能发现我做错了什么?

提前致谢。

这是我的代码

        private void sendFile_Click(object sender, EventArgs e)
    {
        Upload("ftp://100.64.44.12", "UsernameHere", "PasswordHere", @"C:\Users\Kasper\Documents\testFolder\data.csv");
    }

    public void Upload(string FTPAddress, string username, string password, string filePath)
    {
        FileStream stream = File.OpenRead(filePath);
        byte[] buffer = new byte[stream.Length];
        stream.Read(buffer, 0, buffer.Length);
        stream.Close();

        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(FTPAddress + "/" +
        Path.GetFileName(filePath));
        request.Method = WebRequestMethods.Ftp.UploadFile;

        request.Credentials = new NetworkCredential(username, password);
        request.UsePassive = true;
        request.UseBinary = false;
        request.KeepAlive = true;

        StreamReader sourceStream = new StreamReader("testfile.txt");
        byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        sourceStream.Close();
        request.ContentLength = fileContents.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(fileContents, 0, fileContents.Length);
        requestStream.Close();

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        MessageBox.Show("Upload File Complete, status {0}", response.StatusDescription);

        response.Close();
    }

【问题讨论】:

  • 保持被动模式开启。当服务器只允许被动连接时会发生 500 服务器错误。获取 system.net 的跟踪信息,您会在那里找到有关错误发生原因的信息。通常是防火墙。
  • Enable logging 并向我们显示成功上传和失败的日志文件。

标签: c# ftp


【解决方案1】:

尝试设置 FtpWebRequest.UsePassive = false

【讨论】:

  • 流 requestStream = request.GetRequestStream();
  • 此行出现此错误 System.dll 中发生“System.Net.WebException”类型的未处理异常附加信息:远程服务器返回错误:(500) 语法错误,命令无法识别。
  • @KasperHansen 打开System.net instructions here 的跟踪,并在发生此异常时发布跟踪信息。
  • 你不明白什么?你访问过我提到的链接吗?查看此线程 social.msdn.microsoft.com/Forums/en-US/… 以了解跟踪信息如何帮助您检测问题。
猜你喜欢
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多