SSRS报告中的嵌入式图像未显示 - 权限问题

时间:2013-03-19 14:27:00

标签: reporting-services permissions

我的所有报告顶部都有一个徽标,我将其作为嵌入式图像。

这些报告通过SSRS Web服务界面显示在ASP.Net Web应用程序中 - 所有非常标准的东西,但图像无法呈现 - 我只是得到一个断开的链接。

这个问题有很多可能的解决方案,我尝试了一些方法,包括在ConfigurationInfo表中将UseSessionCookies设置为false。

我注意到,当我将消费网络应用的匿名帐户从最低权限服务帐户更改为我自己的用户帐户时,图像显示正常。

我不明白为什么会这样,并且无法确定我的网络应用程序的服务帐户需要哪些特殊权限才能在报告中查看嵌入的图像。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

好的,问题解决了。的种类。问题不仅限于嵌入式图像,因为我没有使用报告服务查看器。

总结:

1)当您的Web应用程序正在调用报表服务器时,它完全有权这样做。生成的SessionID仅可用于Web应用程序帐户(即运行该应用程序的服务帐户)。

2)网络应用程序将RAW HTML4.0输出到屏幕。

3)浏览器接收HTML并尝试检索HTML中引用的图像。

4)浏览器作为您的用户帐户(例如domain \ username1)

运行

5)报表服务器收到如下所示的请求:

6)现在URL中列出的SessionID与domain \ username1没有关联,因此报表服务器声称它不存在。

当您将应用程序域设置为使用domain \ username1帐户时,会话ID恰好与您的帐户相关联,因此突然之间“工作”。但是当真正的用户尝试系统时他们会抱怨图像丢失,因为他们的域\用户名N与应用池帐户不匹配。

此问题的解决方案如下:

1)使用Report Viewer控件。这将确保浏览器收到的URL将指向您的Web应用程序,并且您的Web应用程序标识将用于从报表服务器检索它们。

2)在您的网络应用程序代码中,解析从Render调用中获取的HTML4.0,获取并缓存所有图像,重新编写HTML4.0链接以指向Web存储的缓存图像应用程序,然后将其发送到浏览器(如果这似乎很复杂...然后使用报表查看器控件,因为它使场景工作)

3)您可以尝试使用MHTML输出格式,这将生成一个完全限定的报告,其中的图像嵌入在二进制流中。这样做的结果是将它嵌入应用程序页面更难......但不是不可克服的

我选择在2)上使用变体,因为我不想使用报表查看器。我正在尝试显示的徽标已经托管在调用Web应用程序中,因此我只需将SSRS报表执行服务返回的响应中的img标记的src属性替换为此位置的URL。

我真的不想使用报告查看器作为此问题的最佳解决方案。为什么SSRS必须使用会话信息来返回一些简单的东西,就像在所有报告上显示的徽标一样简单....我需要花费很长时间才能找到底层并且解决方案并不是特别漂亮......

答案 1 :(得分:3)

这是外部图片吗?请查看此MSDN article,其中说明了检索图像所需的权限:

  

在报表设计器中预览报表时,预览使用   用户凭据以显示图像。报告运行时   在报表服务器上,报表服务器使用无人参与的执行   用于检索图像的帐户。如果是无人参与的执行帐户   未指定,使用无凭证检索图像(匿名   用户帐号)。如果这些帐户中的任何一个没有足够的权利   访问图像时,图像不会显示在报告中。

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