SSRS报表中嵌入的图片无法显示 - 权限问题

4
我所有报告的顶部都有一个嵌入式图像作为标志。这些报告通过SSRS Web服务接口在ASP.Net Web应用程序中显示,这是非常标准的操作,但是图像无法呈现 - 我只能看到一个损坏的链接。这个问题有很多可能的解决方案,我尝试了一些方法,包括在ConfigurationInfo表中将UseSessionCookies设置为false。我注意到当我将使用Web应用程序的匿名帐户从最低特权服务帐户更改为我的用户帐户时,图像就可以正常显示。我不明白原因,并且无法确定我的Web应用程序服务帐户需要什么特殊权限才能查看报告中的嵌入式图像。是否有人能够帮忙解决?
2个回答

7
好的,问题解决了。但是有点棘手。该问题不仅限于嵌入的图像,并且由于我未使用报告服务查看器而发生。总结如下:
1)当您的 Web 应用程序调用报告服务器时,它是完全授权的。会生成一个 SessionID,仅对 Web 应用程序帐户可用(即应用程序运行的服务帐户)。
2)Web 应用程序将原始 HTML4.0 输出到屏幕上。
3)浏览器接收到 HTML 并尝试检索 HTML 中引用的图像。
4)浏览器正在以用户帐户(例如 domain\username1)的身份运行。
5)报告服务器收到的请求如下所示:
6)现在 URL 中列出的 SessionID 与 domain\username1 不相关,因此报告服务器声称不存在。
解决此问题的方法如下:
1)使用报表查看器控件。这将确保浏览器收到的 URL 将指向您的 Web 应用程序,您的 Web 应用程序标识将用于从报告服务器检索它们。
2)在您的 Web 应用程序代码中,解析从 Render 调用返回的 HTML4.0,获取并缓存所有图像,重新编写 HTML4.0 链接以指向 Web 应用程序存储的缓存图像,然后将其发送到浏览器(如果此似乎很复杂……那么请使用报表查看器控件,因为它使场景工作)
3)您可以尝试使用 MHTML 输出格式,这将生成一个完全限定的报表,并将图像嵌入二进制流中。这样做的后果是更难将其嵌入应用程序页面……但不是不可克服的。
我选择使用了第二种方法的变体,因为我不想使用报表查看器。我要显示的徽标已经托管在调用 Web 应用程序中,因此我只需用来自该位置的 URL 替换从 SSRS 报告执行服务返回的响应中 img 标记的 src 属性即可。
我真的不想像建议的那样使用报表查看器作为解决此问题的最佳方案。为什么 SSRS 要使用会话信息返回如此简单的在所有报表上显示的徽标,这超出了我的理解范围...找到问题的根本原因花了很长时间,而且解决方案并不特别美观...

参考文章链接在此:这里 - BROTES DE GERMINADOS
编辑器不允许我提交上面第5点的URL。我已经放弃尝试了,这并不重要,但您可以通过访问原始文章来查看它。 - BROTES DE GERMINADOS

3
这是一张外部图片吗?请看这篇MSDN文章,它解释了检索图片所需的权限:

当在报表设计器中预览报表时,预览使用用户的凭据来显示图像。当在报表服务器上运行报表时,报表服务器使用无人值守执行帐户来检索图像。如果未指定无人值守执行帐户,则使用没有凭据(匿名用户帐户)检索图像。如果这些帐户中任何一个权限不足以访问图像,则该图像将不会在报表中显示。

我会在报表管理器中检查图片的权限。

不,这是一个嵌入式图像 - 这就是我不理解的地方 - 图像数据嵌入在rdl文件中。当我将图像URL粘贴到浏览器中时,我会收到rsStreamNotFound错误。 - BROTES DE GERMINADOS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接