微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSRS ReportExecutionServce.LoadReport卡住了

如何解决SSRS ReportExecutionServce.LoadReport卡住了

考虑以下示例代码

using System.Data.sqlClient;

namespace ReportLoadTest
{
  class Program
  {
    static void Main(string[] args)
    {
      using (var con = new sqlConnection("...your connection string here..."))
      {
        con.open();
        var trans = con.BeginTransaction();
        var cmd = con.CreateCommand();
        cmd.Transaction = trans;
        cmd.CommandText = @"insert SoMetable(...columns...) values (...); select scope_identity()";
        var rows = cmd.ExecuteScalar();

        var rs = new SSRS.ReportExecutionService();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
        rs.Url = "http://localhost/reportserver/ReportExecution2005.asmx";

        var ei = rs.LoadReport("/Folder/Folder/Some report",null);
      }
    }
  }
}

在什么情况下,该程序在调用ReportExecutionService.LoadReport时会“卡住”?

卡住,我的意思是0个cpu,0个I / O-调用程序,Reporting Services或sql Server根本没有取得任何进展。

解决方法

如果要加载的报表包含用于填充参数可用值的数据集,并且该数据集基于从SomeTable读取行的查询,则该程序将陷入困境。

LoadReport最终将超时,剩下的零有用信息将帮助您确定发生了什么。

可能的解决方案:

  • 更改报告以对SomeTable进行“脏读”
  • 将数据库更改为快照隔离模式,以避免锁定表。

我遇到的是一个实际生产问题,它使用的是按计划运行报告的系统,而正在运行的报告是“计划的报告历史”报告。

精妙之处在于LoadReport运行查询-回顾一下,很明显,它必须运行查询,因为参数的可用值包含在LoadReport返回的ExecutionInfo中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。