如何在SSL上创建FtpWebRequest

本文关键字:创建 FtpWebRequest SSL | 更新日期: 2023-09-27 17:53:48

我正在尝试创建一个连接到远程服务器上传文件,连接需要通过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");

如何在SSL上创建FtpWebRequest

你的连接字符串不应该是:

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

我也知道你说你可以排除防火墙,但它经常是一个头痛的FTPS也许这个服务器故障的答案可能是有用的:

使用FTPS时需要打开哪些防火墙端口?