我正在使用 ReportExecutionService 对象使用 Render 方法调用报告服务报告。我从 Windows 服务调用中多次调用 Web 服务,加载具有多个参数的多个报告。
一切正常,但我想知道:
- 有没有办法通过重用从
rs.ExecutionHeaderValue.ExecutionID
属性中获得的 SessionId 来提高进程性能? - 如果第一个问题的答案是“是”:如何在通话中重用 SessionId?
我正在使用 ReportExecutionService 对象使用 Render 方法调用报告服务报告。我从 Windows 服务调用中多次调用 Web 服务,加载具有多个参数的多个报告。
一切正常,但我想知道:
rs.ExecutionHeaderValue.ExecutionID
属性中获得的 SessionId 来提高进程性能?有趣的问题,我将向您提供我在跨多个平台和环境与 SSRS 服务器的战斗中发现的两点:
SSRS 速度上最大的问题似乎来自服务本身,我相信在 2008 年和 2012 年每 12 小时回收一次。在此之前不确定。我所做的是创建“保持活动”服务调用,该调用只需转到 http:// (servername)/ReportServer 的根目录并对其进行 ping 操作以使其保持活动状态。如果在这段时间内没有活动,它往往会变慢。
我知道,如果您喜欢冒险并且了解 .NET,您可以尝试查看是否可以多次生成报告。基本上使用 C# 的过程是直接在代码中调用 SSRS 的 Web 服务(我创建了一个代理类来执行此操作),然后将报告加载到服务、参数,然后渲染它。当您灌输一个实例时,您可以多次加载它。我从未尝试过,但在我尝试过的少数情况下,直接从代理呈现报告的速度非常快。
此方法中有一个会话 ID,但我不确定会话是否保留在报告呈现或服务器调用中。我猜是报告渲染,但我从来没有测试过这个,因为我通常一次调用我的方法来创建一个,而且它们对于我的规范来说已经足够快了。
如果您有兴趣,这里是#2 的链接:Programmatically Export SSRS report from sharepoint using ReportService2010.asmx