FtpWebRequest如果不是静态不工作?

时间:2013-10-30 09:52:07

标签: c# ftpwebrequest

我一直致力于一个需要我上传到FTP服务器并从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以确保超时不是问题
  • 用户名和密码正确且服务器已启动,这已全部验证

有什么建议吗?

-Peter

0 个答案:

没有答案