2011-04-27 87 views
0

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

这不应该的问题 - 无论你的防火墙和远程防火墙的过滤器的基础你的端口上会连接到,而不是您连接的自动分配的端口号。 FTP然后创建第二个数据连接:它是否也在开放端口上?数据连接的方向是什么,即您使用主动/被动? – Rup 2011-04-27 15:33:22

+0

我已经尝试了主动和被动,结果是相同的。 FileZilla的上传工作是被动的,所以如果我能弄清楚他们正在做什么,我就不会这样做,我应该能够得到它的工作。 – Shagglez 2011-04-27 18:31:39

回答

-1

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

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

而且我知道你说你能排除防火墙,但它往往与FTPS头疼也许这serverfault答案可能是有用的:

What firewall ports do I need to open when using FTPS?

+1

ftps不是Uri构造函数接受的协议,将EnableSsl设置为true就足够了。另外,我非常有信心它不是防火墙,因为它目前关闭。 – Shagglez 2011-04-28 11:56:13