【问题标题】:SSRS reports timing out when downloading using System.Net.WebClientSSRS 报告使用 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 试图更新对象,即使它不应该(长故事)作为调用报告的先决条件。由于某种原因,它在前两次调用调用报告之前成功刷新了调用,但到第三次调用时,它总是落后并导致数据库死锁......因此超时。

【问题讨论】:

    标签: c# asp.net-mvc-2 timeout ssrs-2008


    【解决方案1】:

    Windows 实现了您在代码中使用的符合 RFC 的 http 客户端... RFC 说最大。允许同时连接到同一台服务器的 2 个并行连接...要更改该限制,您需要编辑注册表(例如:http://www.pctools.com/guides/registry/detail/536/

    【讨论】:

    • WebClient 在超出 using 块的范围时被释放。我会假设任何资源都会得到照顾。我什至(出于绝望)将 GC.Collect(0) 放在 try/finally 的 finally 块中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多