1

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 に設定されています
  • ユーザー名とパスワードが正しく、サーバーが稼働している、これはすべて検証済みです

助言がありますか?

-ピーター

4

0 に答える 0