0

ファイルをアップロードするためにリモートサーバーへの接続を作成しようとしています。接続はSSL経由である必要があり、ルーターで両側から利用できるポートの束しかありません。接続は成功しているように見えますが、Stream requestStream = request.GetRequestStream();タイムアウトします。トレース ログを調べたところ、次の行が疑わしいと思われます。

System.Net Information: 0 : [7144] FtpControlStream#33675143 - Created connection from [myIP]:64230 to [theirIP]:990.

接続が作成されたと表示されますが、ポート 64230 が開いていないことはわかっています。それが失敗の原因だと思います。どのポートからローカル接続を作成するかを指定することは可能ですか? それとも、何か他のものを見逃していますか?

[編集]:

テスト用にローカル マシンの IIS に FTP サイトをセットアップして、何が問題なのかを確認しましたが、同じ問題が発生しています。興味深いのは、990 以外のほぼすべてのポートに同じ設定で接続できることです。ファイアウォールを除外できるようになりました。問題はないようです。他の推測はありますか?サンプルコードは次のとおりです。

string fileName = "file.pdf";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://[host]:990/file.pdf");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.EnableSsl = true;
request.UsePassive = true;
ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertifications;
request.Credentials = new NetworkCredential("[host]|[username]", "[password]");
Stream requestStream = request.GetRequestStream();
FileStream stream = File.OpenRead(fileName);
const int bufferLength = 1024;
byte[] buffer = new byte[bufferLength];
int count = 0;
int readBytes = 0;
do
{
    readBytes = stream.Read(buffer, 0, bufferLength);
    requestStream.Write(buffer, 0, readBytes);
    count += readBytes;
}
while (readBytes != 0);

stream.Close();
requestStream.Close();

Console.WriteLine("Upload complete");
4

1 に答える 1

-1

接続文字列は次のようにすべきではありません:

ftps://[host]:990/file.pdf

また、ファイアウォールを除外できるとおっしゃっていたと思いますが、FTPSで頭痛がすることがよくあります。おそらく、このserverfaultの回答が役立つ可能性があります。

FTPSを使用する場合、どのファイアウォールポートを開く必要がありますか?

于 2011-04-28T11:12:47.720 に答える