Я использую приведенный ниже код (должен быть .Net 2.0) для подключения на сервере UAT к клиентскому FTP-серверу для загрузки / выгрузки файлов. Мне нужно подключиться через порт 990, используя самоподписанный сертификат, предоставленный ими. Я изменил правила брандмауэра, чтобы разрешить подключение к URI через порт 990 с нашего сервера UAT.
Однако (! :)) я получаю тайм-аут на линии
Stream requestStream = request.GetRequestStream();
Если я увеличу время ожидания, это не изменится.
Я посмотрел в Интернете, но не нашел ничего очевидного, чего не хватает в коде.
Если я использую CuteFTP для подключения к серверу UAT, то, естественно, он подключается нормально, и я могу вручную передавать файлы. Если я использую WireShark для просмотра сетевого трафика, он получает ответ от FTP-сервера, но никогда не выполняет квитирование для ID пользователя и PWD (для кода), но через CuteFTP весь сетевой трафик в порядке.
Я принудительно возвращаю True, где он проверяет сертификат.
private void button4_Click(object sender, EventArgs e)
{
try
{
string completeFTPPath = ConfigurationManager.AppSettings["FTPPath"];
// get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(completeFTPPath);
request.EnableSsl = true;
request.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FtpUserName"], ConfigurationManager.AppSettings["FtpPassword"]);
request.Method = WebRequestMethods.Ftp.UploadFile;
ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertifications;
// read file into byte array
StreamReader sourceStream = new StreamReader(ConfigurationManager.AppSettings["LocalFilePath"]);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
// send bytes to server
MessageBox.Show("GetRequestStream() start");
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
MessageBox.Show("GetRequestStream() end");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
MessageBox.Show("Response status: " + response.StatusDescription);
}
catch (WebException we)
{
MessageBox.Show(we.Message);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{ return true; }
например.
FTPPath - ftp: //111.222.333.444: 990 / UAT / testFile.zip ;
FtpUserName - идентификатор пользователя;
FtpPassword = userPwd;
LocalFilePath - c: \ temp \ testFile.zip
У кого-нибудь есть идеи? Поскольку некоторые люди, кажется, имеют приведенный выше код, работает. ТИА.