最近在做并发测试,用到了多线程去请求server,发现请求的数据太大时会有不少线程抛出操作超时的异常。通过增加一bool变量判断是否超时,如果超时则继续等待,否则返回结果。代码如下,超时的问题暂时解决,但没有分析这样是否足够合理,目前还在测试中...
说可以加上如下一段代码,感觉和我下面写的效果应该是一样的。
//这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据 HttpWebRequest .ServicePoint.Expect100Continue = false;
private long RequestMethod(string strParameters)
{ long nRet = 0; bool bTimeOut = true; while (bTimeOut) { try { System.Text.Encoding GB2312 = System.Text.Encoding.GetEncoding("GB2312"); byte[] szByte = GB2312.GetBytes(strParameters); string strUri = @"";HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(strUri);
httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.ContentLength = szByte.Length; httpWebRequest.Method = "POST";using (Stream reqStream = httpWebRequest.GetRequestStream())
{ reqStream.Write(szByte, 0, szByte.Length); }using (WebResponse wr = httpWebRequest.GetResponse())
{ //在这里对接收到的页面内容进行处理 Stream responseStream = wr.GetResponseStream(); StreamReader responseReader = new StreamReader(responseStream); string strRet = responseReader.ReadToEnd(); nRet = wr.ContentLength; } bTimeOut = false; } catch (WebException ex) {HttpStatusCode status = ((HttpWebResponse)ex.Response).StatusCode;
if (status == HttpStatusCode.RequestTimeout) { Thread.Sleeps(1000); } } } return nRet; }