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