c# httpwebrequest getResponse () замораживает и подвешивает мою программу

Я пытался использовать httpwebrequest для использования отдыха как сервис на удаленный сервер и от самого первого выполнения, мой код подвешивал программу. Затем я попробовал его как консольное приложение, чтобы удостовериться, что это не имеет никакого отношения к самой программе, но никакой удаче!

        string credentialsJson = @"{""username"":""test"",
                                      ""password"":""test"" 
                                   }";

        int tmp = ServicePointManager.DefaultConnectionLimit;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qrua.com/qr/service" + @"/auth/login");
        request.Method = "POST";
        request.KeepAlive = true;
        request.Timeout = 50000 ;
        request.CookieContainer = new CookieContainer();
        request.ContentType = "application/json";
        try
        {
            StreamWriter writer = new StreamWriter(request.GetRequestStream());
            writer.Write(credentialsJson);
        }
        catch (Exception e)
        {
            Console.WriteLine("EXCEPTION:" + e.Message);
        }

        //WebResponse response = request.GetResponse();
        try
        {
            using (WebResponse response = (HttpWebResponse)request.GetResponse())
            {
                Console.WriteLine("request:\n" + request.ToString() + "\nresponse:\n" + response.ContentLength);
                response.Close();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("EXCEPTION: in sending http request:" + " \nError message:" + e.Message);
        }

Попробованный несколько вещей от различных форумов, но это не помогает. Даже простое консольное приложение с вышеупомянутым кодом подвешивает консоль неограниченно долго! Любая справка была бы большой..

Спасибо

8
задан Rick 9 July 2010 в 14:56
поделиться

2 ответа

Вы никогда не закрываете StreamWriter... поэтому я подозреваю, что он не промывается. Конечно, я бы ожидал ошибки от сервера, а не простого зависания, но на это стоит обратить внимание.

Кстати, вам не нужно закрывать ответ и утилизировать его. Достаточно оператора using.

12
ответ дан 5 December 2019 в 11:22
поделиться

Вы мало что можете сделать, если удаленный сервер не отвечает, кроме как определить Timeout и поймать исключение, как вы сделали, чтобы сообщить пользователю, что операция не может завершиться, потому что удаленный сайт не ответил:

var request = (HttpWebRequest)WebRequest.Create("https://qrua.com/qr/service/auth/login");
request.Timeout = 5000;
// If the server doesn't respond within 5 seconds you might catch the timeout exception
using (var response = request.GetResponse())
{

}

Если вы не хотите замораживать пользовательский интерфейс, вы можете использовать асинхронную версию: BeginGetResponse

3
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: