zoukankan      html  css  js  c++  java
  • HttpWebRequest GetResponse操作超时

    最近在做并发测试,用到了多线程去请求server,发现请求的数据太大时会有不少线程抛出操作超时的异常。通过增加一bool变量判断是否超时,如果超时则继续等待,否则返回结果。代码如下,超时的问题暂时解决,但没有分析这样是否足够合理,目前还在测试中...

     wenanry说可以加上如下一段代码,感觉和我下面写的效果应该是一样的。

     //这个在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 = @"http://192.168.1.1/XXX.Interface/InterfaceProvider.ashx";

                        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;
            }

  • 相关阅读:
    打印图片的属性和实现另存图片功能以及使用numpy
    opencv3.3 安装环境教程以及实现个图片读取功能
    在linux 创建网络会话和绑定两块网卡
    安装yum仓库
    C#添加错误日志信息
    关于使用宏将csv批量转换成xls的分享
    C#关于MySQL中文乱码问题
    无法启动iis express web服务器解决
    关于关闭WPS锁屏屏保及设置电脑自动关闭显示屏及休眠的分享
    为什么QQ能上却打不开网页呢?
  • 原文地址:https://www.cnblogs.com/Kakasi/p/2133900.html
Copyright © 2011-2022 走看看