【发布时间】:2018-03-19 15:33:47
【问题描述】:
我有一个将照片数据存储在数据库中的应用程序。 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 响应的某些大小限制直接相关,原因如下:
- 请求本身很小,只是一个Report Id即httpRuntime maxRequestLength 不相关,这个已经测试过了。
- 错误发生在请求的几分钟内,即 httpRuntime executionTimeout 不相关,已测试。
- 我可以可靠且可重复地将一张照片添加到报告中,它会失败,删除一张照片,它会毫无问题地呈现和发送,添加一张照片,它会失败...
- 渲染时间各不相同,因此它似乎与大小更相关,而不是超时。
- 无论是否发送报表,报表服务器执行日志每次都显示渲染成功。
- 我使用通常调用报告的应用程序和单独的控制台应用程序重现了该错误,该应用程序仅生成 Web 服务客户端并尝试使用 Render2 方法将报告作为字节数组呈现和接收。
- 我已经在几个不同的报表服务器上使用 SQL Server 2012 和 SQL Server 2016 重现了这个错误,包括在本地设置报表服务器并在同一台机器上运行服务器和请求。
- 无论照片组合如何,报告始终会成功呈现,但未能发送大约 238,000,000 字节数,即与某些不良数据无关。
- 在所有情况下,我都可以通过报表服务器门户生成大小相同或更大的报表,没有任何问题。
有没有人在使用 RS 网络服务时遇到过类似的行为?我在网上广泛搜索,没有任何运气。任何有关如何解决此问题的建议将不胜感激。
【问题讨论】:
-
这可能是相关的。 --> social.technet.microsoft.com/Forums/en-US/…
-
相关,这是我的问题。
-
只是在这里大声思考,但这些图像可能已嵌入到文档中。如果您将它们流式传输到用户有权访问并在文档中链接它们的临时远程位置会怎样。首先,我不能说你如何指示渲染器链接和嵌入,其次,如果你能让它工作,我不知道这对你的客户是否可行。
-
这些年来我看过很多很多 ssrs 日志,但没有遇到过。实际上,这是我第一次看到原始 C++ 错误转储。我想这意味着它很糟糕,就像大海捞针一样,但是,没有什么是不可能解决的。您是否看到有关 SharePoint、链接服务器和驱动程序的响应?此外,与 Microsoft 建立联系票证可能是值得的。
-
或许还有一个值得探索的方面 --> support.microsoft.com/en-us/help/211489/…
标签: reporting-services ssrs-2012 ssrs-2016