使用Reporting Services执行Web服务接收大型报表时出错

时间:2018-03-19 15:33:48

标签: reporting-services ssrs-2012 ssrs-2016

我有一个将照片数据存储在数据库中的应用程序。 SSRS报告用于生成与特定实体相关的照片报告。生成此报告所需的信息存储在单独的数据库中,并且非常简单地将ReportId与许多照片相关联。 Reporting Services执行Web服务用于以Word格式呈现报表,并输出一个字节数组,然后由应用程序使用。

问题是,有一个非常清晰且可重复的大小限制,超出该限制,应用程序不会收到报告。在每种情况下,报告都会成功呈现,但不会根据RS日志发送响应:

rshost!rshost!1bfc!03/14/2018-21:46:48:: e ERROR: HttpPipelineCallback::SendResponse(): failed writing response.
rshost!rshost!1bfc!03/14/2018-21:46:48:: e ERROR: Failed with win32 error 0x0057, pipeline=0x0000027542592740.
httpruntime!ReportServer_0-1!1bfc!03/14/2018-21:46:48:: e ERROR: Failed in 
BaseWorkerRequest::SendHttpResponse(bool), exception=System.ArgumentException: Value does not fall within the expected range.
   at Microsoft.ReportingServices.HostingInterfaces.IRsHttpPipeline.SendResponse(Void* response, Boolean finalWrite, Boolean closeConn)
   at ReportingServicesHttpRuntime.BaseWorkerRequest.SendHttpResponse(Boolean finalFlush)
library!ReportServer_0-1!1bfc!03/14/2018-21:46:48:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerHttpRuntimeInternalException: RsWorkerRequest::FlushResponse., Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerHttpRuntimeInternalException: An internal or system error occurred in the HTTP Runtime object for application domain ReportServer_SSRS_0-1-131655000672564770. ---> System.ArgumentException: Value does not fall within the expected range.
   at ReportingServicesHttpRuntime.BaseWorkerRequest.SendHttpResponse(Boolean finalFlush)
   at ReportingServicesHttpRuntime.RsWorkerRequest.FlushResponse(Boolean finalFlush)
   --- End of inner exception stack trace ---;
rshost!rshost!1bfc!03/14/2018-21:46:48:: e ERROR: HttpPipelineCallback::SendResponse(): failed writing response.
rshost!rshost!1bfc!03/14/2018-21:46:48:: e ERROR: Failed with win32 error 0x10DD, pipeline=0x0000027542592740.

这似乎与服务http响应的某些大小限制直接相关,原因如下:

  • 请求本身非常小,只是报告ID,即httpRuntime maxRequestLength不相关,已经过测试。
  • 错误发生在请求的几分钟内,即httpRuntime executionTimeout不相关,已经过测试。
  • 我可以可靠且可重复地将一张照片添加到报告中太多,它会失败,删除一张照片,它会呈现并发送没有问题,添加一张照片就会失败......
  • 呈现的时间因此而异,它似乎与大小相关而不是某些超时。
  • 报表服务器执行日志显示每次呈现都成功,无论是否发送报表。
  • 我使用通常调用报告的应用程序和一个单独的控制台应用程序来重现错误,该应用程序只生成一个Web服务客户端,并尝试使用Render2方法以字节数组的形式呈现和接收报告。
  • 我在几个不同的报表服务器上使用SQL Server 2012和SQL Server 2016重现了此错误,包括在本地设置报表服务器以及在同一台计算机上运行服务器和请求。
  • 无论照片组合如何,报告总是成功呈现,但无法发送大约238,000,000字节数,即与某些不良数据无关。
  • 在所有情况下,我都可以通过Report Server门户网站生成相同或更大规模的报告,但没有任何问题。

是否有人使用RS网络服务遇到类似行为?我在网上广泛搜索没有任何运气。任何关于如何解决这个问题的建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

Microsoft最终确定HttpSendResponseEntityBody是错误的来源。该函数发送与HTTP响应关联的实体主体数据,并根据MSDN具有以下参数:

  

EntityChunkCount [in] pEntityChunks指向的数组中的许多结构。 此计数不能超过9999。

Microsoft没有任何SSRS文档可以解决报告大小限制问题。在这个阶段,他们所做的就是建议"我们可以使用其他工具进行数据提取。并且通常我们建议将数据小于100MB或行数小于1,000,000"。