FtpWebRequest GetResponseAsync зависает при исчерпании лимита соединений
От: karbofos42 Россия  
Дата: 12.11.18 13:01
Оценка:
Не то я слона не замечаю, не то баг какой-то в FtpWebRequest затесался.
упростил код до максимума. Просто нужно долбиться на ftp-сервер, пока не получится:

        static async Task GetResponse(string url)
        {
            int counter = 0;
            while (true)
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                try
                {
                    //var response = await request.GetResponseAsync();
                    var response = request.GetResponse();
                    response.Close();
                    break;
                }
                catch //(WebException e)
                {
                    //e.Response.Close();
                    //Console.WriteLine(e.Message);
                }

                Console.WriteLine(++counter);
            }
        }


отключаю сетевое подключение или выдёргиваю провод, запускаю, попытки бегут, включаю сеть — успешная попытка соединения и всё заканчивается как должно.
Меняю синхронную версию метода GetResponse на асинхронную GetResponseAsync — получаю зависание на третьей попытке. Там лимит в 2 подключения по умолчанию, вот в него всё и упирается.
Почему-то получается соединения не освобождаются. При работе по http подобная штука была из-за незакрытого потока ответа, но тут я уже всё явно закрываю и потоков не открываю никаких.
Если сеть не отключать, то асинхронный метод нормально работает. В цикле так же сотню раз прогнать можно и ни в какой лимит ничто не упирается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.