s-s-rS 报告使用 System.Net.WebClient 下载时超时
Posted
技术标签:
【中文标题】s-s-rS 报告使用 System.Net.WebClient 下载时超时【英文标题】:s-s-rS reports timing out when downloading using System.Net.WebClient 【发布时间】:2011-07-21 15:21:31 【问题描述】:更新
解决方法见底部。
我正在尝试在我的 ASP.Net MVC 应用程序中循环下载报告。前两个总是成功,第三个总是失败。我运行它们的顺序无关紧要,失败的总是第三个(这意味着它不是特定的报告,而是重要的顺序)。当报告成功时,它们总是在 10 秒内返回,所以这并不是真正的超时。请看下面的代码和场景。
代码
public Stream SomeMethodThatDownloadReports(string link)
using (var webClient = new WebClient())
webClient.Credentials = configuration.GetNetworkCredentialsForDownload();
try
return new MemoryStream(webClient.DownloadData(link));
catch (Exception ex)
throw new ReportDownloadFailureException(string.Format("Problem accessing Report. Report Url = 0", link), ex);
场景
不要跳过 A - 在 B - 在 C - 超时 跳过一个 A - 跳过 B - 在 C - 在 D - 超时 随机化 B - 在 G - 在 H - 超时更新
事实证明。超时的真正原因是 NHibernate 试图更新对象,即使它不应该(长故事)作为调用报告的先决条件。由于某种原因,它在前两次调用调用报告之前成功刷新了调用,但到第三次调用时,它总是落后并导致数据库死锁......因此超时。
【问题讨论】:
【参考方案1】:Windows 实现了您在代码中使用的符合 RFC 的 http 客户端... RFC 说最大。允许同时连接到同一台服务器的 2 个并行连接...要更改该限制,您需要编辑注册表(例如:http://www.pctools.com/guides/registry/detail/536/)
【讨论】:
WebClient 在超出 using 块的范围时被释放。我会假设任何资源都会得到照顾。我什至(出于绝望)将 GC.Collect(0) 放在 try/finally 的 finally 块中。以上是关于s-s-rS 报告使用 System.Net.WebClient 下载时超时的主要内容,如果未能解决你的问题,请参考以下文章