最近在做微信企业号的集成开发,在做对文件的上传和下载时,遇到一个很头疼的问题。程序运行一段时间之后在下载或者上传文件时webclient会报一个基础连接已经关闭:发送时发生错误。

因为程序是运行一段时间后才会报这个错误,所以刚开始以为是资源没有释放,查了代码的基础类,发现资源都是已经释放过的。也怀疑过是不是超出最大连接数,但显而易见不是这个问题。通过在网上查找资料,大家提供了以下几种解决方案:

1、在GetResponse() 前加上这句ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;  这句代码是让你的程序适应https请求协议。

2、httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);  在行代码前添加System.GC.Collect();   用于程序垃圾资源回收

3、如果Http的请求,是设置了KeepAlive=true的话,那么对应的http的connection会和服务器保持连接的。所以如果上述办法都不能解决超时的问题,可以尝试将keepAlive设置为false试试,看看能否解决。

4、httpWebRequest.ServicePoint.ConnectionLimit = maxTry;  默认ConnectionLimit是2个连接数,所以可以通过修改连接数尝试解决该问题。可以改到200-300,但是不要改太大,容易对程序照成压力。

5、另外你初始化的都要在用完之后,进行关闭和回收。(HttpWebRequest  HttpWebResponse)     虽然每种开发语言都有自己的回收机制,但是要记着一点再好的人,也有累的时候,累了就不给你干活了,所以平时对它们好点。

如果上面的方法都无法解决你的问题,可以尝试一下我最后的解决方案。

最后我发现只有在一台服务器上面出问题,后来经过查找,发现是这台服务器被配置了代理服务器,通过代理服务器的方式进行外网的访问。所以找到原因就好办了,只要在创建HttpWebRequest  对象之前,在创建一个代理服务器的对象,并且把服务器的代理地址和端口实例化到代理服务器对象。

public  string GetHtml(string url, byte[] postData, bool isPost, CookieContainer cookieContainer,string refurl)
        {
            ServicePointManager.Expect100Continue = false;

Thread.Sleep(NetworkDelay);//等待

currentTry++;

HttpWebRequest httpWebRequest = null;
           
            HttpWebResponse httpWebResponse = null;
            try
            {
               // byte[] byteRequest = Encoding.Default.GetBytes(postData);
                byte[] byteRequest = postData;
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                if (Proxy != null)
                    httpWebRequest.Proxy = Proxy;      //代理服务器设置
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.ContentType = contentType;
                httpWebRequest.ServicePoint.ConnectionLimit = maxTry;
                httpWebRequest.Referer = refurl;
                httpWebRequest.Accept = accept;
                httpWebRequest.UserAgent = userAgent;
                httpWebRequest.Method = isPost ? "POST" : "GET";
                httpWebRequest.ContentLength = byteRequest.Length;

Stream stream = httpWebRequest.GetRequestStream();
                stream.Write(byteRequest, 0, byteRequest.Length);
                stream.Close();

httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream responseStream = httpWebResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, encoding);
                string html = streamReader.ReadToEnd();
                streamReader.Close();
                responseStream.Close();
                currentTry = 0;

httpWebRequest.Abort();
                httpWebResponse.Close();
                foreach (Cookie cookie in httpWebResponse.Cookies)
                {
                    cookieContainer.Add(cookie);
                }

return html;
            }
            catch (Exception)
            {

if (httpWebRequest != null)
                {
                    httpWebRequest.Abort();
                } if (httpWebResponse != null)
                {
                    httpWebResponse.Close();
                }
                return "";
            }
        }

代理服务器都已经淘汰的技术,没想到现在还有人用。但是吃一堑长一智。希望可以帮到你们。

webclient 基础连接已经关闭: 发送时发生错误。相关推荐

  1. C# HttpWebResponse WebClient 基础连接已经关闭: 发送时发生错误.

    https://blog.csdn.net/sun49842566/article/details/82802297 net 4.0 设置: ServicePointManager.SecurityP ...

  2. DownloadString”时发生异常:“基础连接已经关闭: 发送时发生错误

    win10下安装scoop遇到错误:"DownloadString"时发生异常:"基础连接已经关闭: 发送时发生错误",记录一下解决过程. 确认powershe ...

  3. vs2012报“nuget 基础连接已经关闭:发送时发生错误”的问题

    卸载 Nuget Package Manager重新安装,重新安装时也报错,那就从官网下载Nuget Package Manager安装包进行安装: NuGet Package Manager - V ...

  4. vs2012 nuget 基础连接已经关闭:发送时发生错误

    在vs2012中用nuget联机安装其他dll包时,出现"基础连接已经关闭:发送时发生错误". https://nuget.org/api/v2/改成https://nuget.o ...

  5. 解决 ”基础连接已经关闭: 发送时发生错误”

    今天上线有一段时间的项目突然报错了,在调用api的时候发生错误:"基础连接已经关闭: 发送时发生错误",上谷歌找了一下原因,分析:因为请求的url是基于https的,所以Post请 ...

  6. c# System.Net.WebException: 基础连接已经关闭: 发送时发生错误。

    本文介绍了C#System.Net.WebException:基础连接已关闭:发送时发生意外错误 -> System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭 ...

  7. 基础连接已经关闭: 接收时发生意外错误

    http://www.cnblogs.com/jinglelin/articles/32407.html HttpChannel 类      HttpChannel 类使用 SOAP 协议将消息传输 ...

  8. C# HttpRequest基础连接已经关闭: 接收时发生意外错误

    在使用httpWebRequest访问数据时经常会碰到 基础连接已关闭这种问题,在代码中加入以下内容即可 HttpWebRequest request=new HttpWebRequest(); // ...

  9. 极光推送C#版本在XP系统下提示“基础连接已经关闭: 接收时发生意外错误”的解决方案

    极光推送服务器用的SSL协议版本是TLS1.2,而TLS 1.2 必须要 .NET 4.5或以上版本,然而XP系统是不支持 .NET 4.5或以上版本的.解决方法就是http请求弃用.NET自带的We ...

最新文章

  1. Linux C编程之一:Linux下c语言的开发环境
  2. python pip国内源_【Python】设置pip源为国内源及简单操作
  3. skimage.io.imread vs caffe.io.load_image
  4. 深度学习-清晰易懂的马尔科夫链原理介绍
  5. html5--6-68 实战前的准备工作:了解HTML5大纲算法
  6. Cisco路由器配置命令之模式转换命令
  7. 多网卡下如何配置指定IP走某个路由器(适用于外网不通,但是钉钉服务器通的情况)...
  8. Hibernate 拦截器 Hibernate 监听器
  9. 用js和jQuery做轮播图
  10. this的用法this.name=name 这个什么意思
  11. flex布局应用与踩坑
  12. 8.霍夫变换:线条——介绍、参数模型、直线拟合_1
  13. 【转】QTableView 小结
  14. SQL Server job突然不工作了
  15. 早上内部资源共享讨论发言稿
  16. Flex4.0判断摄像头是否被占用
  17. ECCV 2018 papers+ oral+ 开源+导读
  18. linux下解包bin二进制文件_Linux系统bin文件打包方法
  19. MATLAB手写数字识别
  20. CSDN x BSV|区块链工程师能力初级认证正式启动

热门文章

  1. Mac开发必备工具(一)—— Homebrew
  2. Best Service Accordions 2 Kontakt 综合手风琴音色库
  3. 说说谢霆锋的音乐创作[转]
  4. Centos7.6 Install GMT
  5. OpenJudge_1111_Blash数集
  6. #include里有个“/”是什么意思
  7. 一文解决浏览器跨域问题
  8. 计算机的应用采用进位制,为什么计算机采用二进位制运算?
  9. scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)
  10. LightProxy