现想实现个简单的用于判断网页是否正常打开(或者是用来判断是否开服)的功能,写了一个方法。
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
设置到100还是会卡顿,再小就收不到回应了,囧
#4
添加 ServicePointManager.DefaultConnectionLimit = 120;
#5
4楼的方法似乎有缓解效果。
主要是点了check后,就会卡住整个程序,虽然只是一会,囧。
主要是点了check后,就会卡住整个程序,虽然只是一会,囧。
#6
今天看到了关于这个的处理方法,回个帖
别人不改参数,用异步方法调用才是王道……
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
设置到100还是会卡顿,再小就收不到回应了,囧
#4
添加 ServicePointManager.DefaultConnectionLimit = 120;
#5
4楼的方法似乎有缓解效果。
主要是点了check后,就会卡住整个程序,虽然只是一会,囧。
主要是点了check后,就会卡住整个程序,虽然只是一会,囧。
#6
今天看到了关于这个的处理方法,回个帖
别人不改参数,用异步方法调用才是王道……
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);