我想創建一個連接到遠程服務器上傳文件,連接需要通過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