如何解决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 举报,一经查实,本站将立刻删除。