我想创建一个连接到远程服务器上传文件,连接需要通过SSL,我只有一堆端口可用在路由器从双方。连接似乎成功,但Stream requestStream = request.GetRequestStream();
超时。检查跟踪日志后,下面一行显得可疑:如何通过SSL创建FtpWebRequest?
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");
这不应该的问题 - 无论你的防火墙和远程防火墙的过滤器的基础你的端口上会连接到,而不是您连接的自动分配的端口号。 FTP然后创建第二个数据连接:它是否也在开放端口上?数据连接的方向是什么,即您使用主动/被动? – Rup 2011-04-27 15:33:22
我已经尝试了主动和被动,结果是相同的。 FileZilla的上传工作是被动的,所以如果我能弄清楚他们正在做什么,我就不会这样做,我应该能够得到它的工作。 – Shagglez 2011-04-27 18:31:39