我一直在从事一个需要我从 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 以确保超时不是问题
- 用户名和密码正确且服务器已启动,这一切都已验证
有什么建议么?
-彼得