加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么WebRequest总是在第一次请求时超时,但从不在任何后

发布时间:2020-12-15 07:56:29 所属栏目:百科 来源:网络整理
导读:遇到问题,调用WebRequest.GetResponse()会在第一次调用时挂起并超时,但在第一次调用之后,一切正常. try { WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/"); // Sends the HttpWebRequest and waits for the response. myHttpWebRe
遇到问题,调用WebRequest.GetResponse()会在第一次调用时挂起并超时,但在第一次调用之后,一切正常.
try {
            WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/");
            // Sends the HttpWebRequest and waits for the response.         
            myHttpWebRequest.Timeout = 1000;
            WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
        } catch(Exception e) {
            Console.WriteLine("Failure 1");
        }
        try {
            WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/");
            // Sends the HttpWebRequest and waits for the response.         
            myHttpWebRequest.Timeout = 1000;
            WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse(); 
        } catch(Exception e) {
            Console.WriteLine("Failure 2");
        }
        try {
            WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/");
            // Sends the HttpWebRequest and waits for the response.         
            myHttpWebRequest.Timeout = 1000;
            WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse(); 
        } catch(Exception e) {
            Console.WriteLine("Failure 3");
        }

在控制台应用程序中使用此代码,我总是收到失败1.在调试器下运行或不运行.我做了一个1000循环,它总是在第一个失败,从来没有任何其他.实际上,在读取Web服务器的日志时,它实际上从未收到第一个请求.我在这里错过了什么吗?

解决方法

编辑:我已经意识到下面的答案符合完全相反的情况,第一个请求有效但其他人没有.但是,它仍然很重要 – 你真的应该处理你的回答.如果在报告错误时也会报告异常消息,这也很有用…

要弄清楚这里发生了什么,你应该真正使用像WireShark这样的东西,这样你就可以看出问题是在做出请求但是没有响应,或者是否甚至没有做出.

我想知道问题是否实际上是它正在解析一个代理,或类似的东西……而且在第二个请求超时之前,有足够的时间来解决它.尝试增加超时.同样,这应该通过WireShark可见.

您没有丢弃Web响应,因此第二个请求的连接池将等待重新获得该连接.

将WebResponse部分放在using语句中,您可能会发现它一切正常:

using (WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse())
{
}

当然,这是假设你实际上对回应做了些什么.否则你可以写:

myHttpWebRequest.GetResponse().Dispose();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读