2011-04-27 19 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