求助:定时循环使用HttpWebRequest访问网页数据,报错未处理的“System.StackOverflowException”类型的异常

qingxin113 2014-06-05 08:13:53
类似网页辅助工具的代码,使用两三个线程定时通过HttpWebRequest访问不同的网页数据获取信息。
运行大概三、四个小时后,报错未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。
每次调用也作了垃圾回收,不明白应怎么解决。谢谢
下面是出错的代码:

/// <summary>
/// Web的Get方式
/// </summary>
/// <param name="Url">网址URL</param>
/// <param name="cc">CookieContainer</param>
/// <returns></returns>
public static string GetHtmlMethodForCommon(string Url, ref CookieContainer cc)
{
string strHtmlReturn = "";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Url);
//属性配置
webRequest.AllowWriteStreamBuffering = true;
webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
webRequest.MaximumResponseHeadersLength = -1;
webRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-silverlight, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/QVOD, application/QVOD, */*";
webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET4.0C; .NET4.0E; Alexa Toolbar; u9dnfsh)";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "GET";

//如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据
webRequest.ServicePoint.Expect100Continue = false;
webRequest.Timeout = 200000;
ServicePointManager.DefaultConnectionLimit = 50;

webRequest.Headers.Add("Accept-Language", "zh-cn");
webRequest.Headers.Add("Accept-Encoding", "gzip,deflate");
webRequest.KeepAlive = true;
webRequest.CookieContainer = cc;
try
{

//获取服务器返回的资源
//运行三四个小时后,此处报错
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
if (webResponse.StatusCode == HttpStatusCode.RequestTimeout)//此处作超时响应判断
{
System.Threading.Thread.Sleep(1000);
return null;
}
else
{
Stream responseStream = webResponse.GetResponseStream();
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding("utf-8")))
{
cc.Add(webResponse.Cookies);
strHtmlReturn = reader.ReadToEnd();
}
}
}
}
catch (WebException ex)
{
strHtmlReturn = "";
throw ex;
}
catch (Exception ex)
{
strHtmlReturn = "";
throw ex;
}
finally
{
webRequest.Abort();
}
return strHtmlReturn;
}
...全文
230 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingxin113 2014-06-06
  • 打赏
  • 举报
回复
释放了,运行大概6、7个小时后还是报错。 程序是循环调用,估计还是运行时间长了内存溢出。 用Catch(System.StackOverflowException)捕获算了
anyboy010 2014-06-05
  • 打赏
  • 举报
回复
亲,你这段代码问题多多,主要体现在 资源 释放 方面! webResponse ,responseStream, reader 都是需要释放的啊。 你只是释放了webRequest。
bwangel 2014-06-05
  • 打赏
  • 举报
回复
这段代码没看出问题。 检查一下你的上层代码是否有递归调用。比如一个网站链接很深的话,递归可能栈溢出。
代码下载链接: https://pan.quark.cn/s/90fbf78c3289 "1元云购"是一种依托互联网的购物方式,用户仅需投入微小的资金(一般为一元)便有机会赢取高价值商品。此类模式常借助抽奖机制来判定获胜者,从而吸引众多用户加入。"1元云购源代码"是承载该业务流程的程序代码,其用途在于搭建一个完整的1元云购系统。 在构建1元云购源代码的过程中,主要包含以下几个核心技术要点: 1. **数据库架构**:为了有效存储商品详情、用户资料、交易历史及开奖结果,必须设计科学合理的数据库框架。这包括商品数据表、用户信息表、订单记录表和开奖记录表等,确保数据的统一性与完整性。 2. **支付渠道对接**:1元云购平台需与第三方支付服务(例如支付宝、微信支付)进行对接,以实现用户的在线支付操作。这涉及API接口调用、交易状态同步、退款流程管理等环节。 3. **随机数生成策略**:抽奖过程的核心在于公平透明地选定获奖者,通常采用随机数生成策略来实现。该策略需保障每位参与者拥有相等的获奖机会,同时防止欺诈行为。 4. **用户界面开发**:卓越的用户体验是吸引参与者的关键因素。前端页面应兼具视觉吸引力与操作便捷性,清晰展示商品信息、购买步骤、中奖规范等,并提供用户注册、登录、查询订单等功能。 5. **服务器程序设计**:后端系统负责处理用户请求,如管理订单、计算中奖号码、更新数据库信息等。这部分通常采用PHP等服务器端技术实现,需应对并发访问与高负载情形。 6. **安全措施**:1元云购平台可能面临恶意攻击,例如SQL注入、XSS跨站脚本攻击等。因此,源代码需遵循安全编程准则,对用户输入进行过滤与校验,同时运用HTTPS等加密手段保障数据传输安全。 7. **...

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧