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 下载时超时的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SSIS 运行 s-s-rS 报告?

如何在 s-s-rS 中使用表达式转移到报告

s-s-rs 报告报告过滤器,查询中不使用重复项

使用存储过程的 s-s-rS 报告

使用 SSIS 2008 自动生成 s-s-rS 2008 报告

SQL Server 报告服务 (s-s-rS) 事件