1

我一直在从事一个需要我从 FTP 服务器上传和下载的项目。我让整个系统正常工作,但至少可以说代码很难看,而且由于程序的很大一部分是静态的(请不要开枪打我!),开发起来非常困难。

我最近决定重写大部分程序,但我没有更改 FTP 上传的特定代码中的任何内容,只是将其从静态函数移至非静态函数。它仍然以某种方式似乎不起作用,并且我得到的错误没有给我任何有用的信息。难道只有在函数是静态的情况下才能这样执行吗?

FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
StreamReader fileReader;

try
{
    ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
    ftpRequest.Timeout = 50000;
    ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
    ftpRequest.KeepAlive = false;
    ftpRequest.UseBinary = false;
    ftpRequest.Credentials = new NetworkCredential(username, password);

    //creating payload;
    fileReader = new StreamReader(SystemStrings.file_Location + SystemStrings.file_Name);
    byte[] file = Encoding.UTF8.GetBytes(fileReader.ReadToEnd());
    fileReader.Close();
    ftpRequest.ContentLength = file.Length;

    //using the payload
    Stream stream = ftpRequest.GetRequestStream();     <---- Throws WebException here
    stream.Write(file, 0, file.Length);
    stream.Close();

    //handling the response;
    ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
    ftpResponse.Close();

    //If we haven't gotten an exception at this point, everything succeeded, so let's return the details
    cred.Username = username;
    cred.Password = password;
    return true;
}
catch (WebException we)
{
        ...
}
catch (Exception e)
{
        ...
}

我得到的错误被 WebException 捕获但没有解释任何东西,我在它抛出 WebException 的地方能找到的唯一错误是 ContentType 抛出 NotSupportedException,但根据 MSDN,它应该总是这样做吗?

一些额外的信息:

  • cred 是一个自定义凭据对象,其中包含用户名和密码
  • 超时设置为 50000 以确保超时不是问题
  • 用户名和密码正确且服务器已启动,这一切都已验证

有什么建议么?

-彼得

4

0 回答 0