c#httpwebrequest getResponse()冻结并挂起我的程序

Ric*_*ick 8 c# webrequest 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);
        }
Run Code Online (Sandbox Code Playgroud)

从不同的论坛尝试了几件事,但它没有帮助.即使是带有上述代码的简单控制台应用程序也会无限期地挂起控制台!任何帮助都会很棒..

谢谢

Jon*_*eet 12

你永远不会关闭StreamWriter...所以我怀疑它没有被冲洗.不可否认,我希望服务器出错,而不仅仅是挂起,但值得一看.

顺便说一下,你不需要关闭响应处理它.只是using声明就足够了.


Dar*_*rov 5

如果远程服务器没有响应,除了定义 aTimeout并捕获异常以通知用户由于远程站点没有响应而无法完成操作之外,您无能为力:

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())
{

}
Run Code Online (Sandbox Code Playgroud)

如果您不想冻结 UI,可以使用异步版本:BeginGetResponse