关于HttpWebRequest的响应速度问题

时间:2021-09-05 19:50:16
用HFS搭建了简易FTP服务器,主要是通过网页来访问。

现想实现个简单的用于判断网页是否正常打开(或者是用来判断是否开服)的功能,写了一个方法。


private void checkServer(string ip,out bool result)
        {
            
            try
            {
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://" + ip);

                //当服务器无响应时,此处易引发异常
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                myHttpWebResponse.Close();
                result = true;
            }
            catch (WebException ev)
            {
                result = false; 
            }
            catch (Exception ev)
            {
                result = false;
                MessageBox.Show("程序错误");
            }
            
 
        }


发现每次没开服,也就是网页无响应时,在异常引发处,会卡好久,这是什么原因呢?求更好的判断方法。。百度了好多都没找到理想的,特来求助

6 个解决方案

#1


不是特别清楚,坐等高人解答

#2


试试HttpWebRequest的Timeout
设小点

#3


引用 2 楼 soladyk 的回复:
试试HttpWebRequest的Timeout
设小点


设置到100还是会卡顿,再小就收不到回应了,囧

#4


添加   ServicePointManager.DefaultConnectionLimit = 120;

#5


4楼的方法似乎有缓解效果。
关于HttpWebRequest的响应速度问题

主要是点了check后,就会卡住整个程序,虽然只是一会,囧。

#6


引用 5 楼 J_star 的回复:
4楼的方法似乎有缓解效果。
关于HttpWebRequest的响应速度问题

主要是点了check后,就会卡住整个程序,虽然只是一会,囧。


今天看到了关于这个的处理方法,回个帖
别人不改参数,用异步方法调用才是王道……


AsyncManager.OutstandingOperations.Increment();
WebRequest req = WebRequest.Create("http://www.asp.net");
req.BeginGetResponse((IAsyncResult ias) => {
WebResponse resp = req.EndGetResponse(ias);
string content = new StreamReader(resp.GetResponseStream()).ReadToEnd();
AsyncManager.Parameters["html"] = content;
AsyncManager.OutstandingOperations.Decrement();
}, null);

#1


不是特别清楚,坐等高人解答

#2


试试HttpWebRequest的Timeout
设小点

#3


引用 2 楼 soladyk 的回复:
试试HttpWebRequest的Timeout
设小点


设置到100还是会卡顿,再小就收不到回应了,囧

#4


添加   ServicePointManager.DefaultConnectionLimit = 120;

#5


4楼的方法似乎有缓解效果。
关于HttpWebRequest的响应速度问题

主要是点了check后,就会卡住整个程序,虽然只是一会,囧。

#6


引用 5 楼 J_star 的回复:
4楼的方法似乎有缓解效果。
关于HttpWebRequest的响应速度问题

主要是点了check后,就会卡住整个程序,虽然只是一会,囧。


今天看到了关于这个的处理方法,回个帖
别人不改参数,用异步方法调用才是王道……


AsyncManager.OutstandingOperations.Increment();
WebRequest req = WebRequest.Create("http://www.asp.net");
req.BeginGetResponse((IAsyncResult ias) => {
WebResponse resp = req.EndGetResponse(ias);
string content = new StreamReader(resp.GetResponseStream()).ReadToEnd();
AsyncManager.Parameters["html"] = content;
AsyncManager.OutstandingOperations.Decrement();
}, null);