URL重写虚拟目录以检索SSRS报告

时间:2013-09-17 20:53:39

标签: url iis reporting-services proxy rewrite

是否曾有人通过在IIS 7.5 ASP.NET应用程序中的虚拟目录中建立的URL重写来使用反向代理来从另一台服务器检索SSRS报告?

可以使用Web浏览器通过浏览到报告的URL从Web服务器查看SSRS报告,以便可访问性没有问题。 SSRS报告确实提示凭据,因此这可能是一个问题,但我想知道为什么凭证请求不会被发送回浏览器的HTTP请求。

位于“ssrs”虚拟目录中的URL重写配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
  <system.webServer>
    <rewrite>
        <outboundRules>
            <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                <match filterByTags="A, Form, Img" pattern="^http(s)?://http://123.45.678.194/(.*)" />
                <action type="Rewrite" value="http{R:1}://website.address.com/{R:2}" />
            </rule>
            <preConditions>
                <preCondition name="ResponseIsHtml1">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
        <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{CACHE_URL}" pattern="^(https?)://" />
                </conditions>
                <action type="Rewrite" url="{C:1}://http://123.45.678.194/{R:1}" />
            </rule>
        </rules>
    </rewrite>
  </system.webServer>
 </configuration>

浏览到https://website.address.com/ssrs/Reports/Pages/Report.aspx?ItemPath=%2fSSRSReport时收到的错误是502 - Web服务器在充当网关或代理服务器时收到无效响应。

您要查找的页面存在问题,无法显示。当Web服务器(作为网关或代理)与上游内容服务器联系时,它从内容服务器收到无效响应。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为你是在思考这是我的猜测。

SSRS有三个部分,其中涉及在代码中或在提供凭证的其他URI上向“查看者”对象获取报告时的安全性。

  1. 托管SSRS的服务器。你可以通过调用它的机器指定的CREDENTIAL来达到这个目的吗?
  2. 报告运行“数据源”,要么需要凭据,要么已经指定。如果您想要远程执行报告,我的理解是,如果没有提供,将在查看器对象中提示您。解决此问题的最简单方法是在设置报告时将数据源的连接字符串设置为使用提供的凭据。不是你打电话的时候。我不记得了,但我相信在远程模式下代码会生成报告,但您仍需要对报告进行身份验证才能从中获取数据。
  3. 该报告对其在不同级别上运行的域具有安全访问权限,并且这些级别在上面继承或显式。如果您可以访问URL而不是您所访问的任何计算机,那么您可以将其硬编码到代码中以获取报告。
  4. 在ASP.NET中的“ReportViewer”对象中调用报表服务器而不是在地址A的站点中调用报表服务器会更容易吗?而不是尝试重定向?我的猜测是,重定向的服务器上的凭证帐户无权在SSRS服务器上运行报告和/或也不是该SSRS站点的管理员。我只需在代码后面设置一个远程模式,以获取报告查看器对象的价值。这样,您不会重定向站点,而只是将对象引用到另一个站点并将其植入第一个站点。这可能是恕我直言的部分,以及你的依赖关系并不紧密。我在WPF中这样做,但我听说它与ASP.NET非常相似。有关详细信息,请参阅此主题: How to implement user impersonation in reporting services?