0

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

SSRS 报告可以使用网络浏览器通过浏览到报告的 URL 从网络服务器查看,因此可访问性没有问题。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 服务器(作为网关或代理)联系上游内容服务器时,它收到了来自内容服务器的无效响应。

我感谢可以提供的任何帮助。

4

1 回答 1

0

我觉得你想多了这是我的猜测。

SSRS 分为三个部分,其中涉及安全性,即在代码中或在提供凭据的休息 URI 上向“查看器”对象获取报告。

  1. 托管 SSRS 的服务器。你能用调用它的机器指定的 CREDENTIALS 来解决这个问题吗?
  2. 该报告运行一个“数据源”,要么需要凭据,要么指定它们。如果您想远程执行报告,我的理解是,如果未提供这些,您将在查看器对象中提示您。解决此问题的最简单方法是将数据源的连接字符串设置为在设置报告时使用提供的凭据。不是你打电话的时候。我不记得了,但我相信在远程模式下代码会生成报告,但您仍然需要对报告进行身份验证才能从中获取数据。
  3. 该报告对其在不同级别下运行的域具有安全访问权限,并且这些级别继承于上面或显式。如果您可以访问该 URL,那么您所在的任何机器都可以访问,并且您可以将其硬编码为代码以获取报告。

在 ASP.NET 的“ReportViewer”对象中而不是在地址 A 的站点中调用报表服务器会更容易吗?而不是尝试重定向?我的猜测是正在重定向的服务器上的凭据帐户无权在 SSRS 服务器上运行报告和/或也不是该 SSRS 站点的管理员。我只是在代码后面为报表查看器对象设置一个远程模式,以获得它的价值。这样,您就不会重定向站点,而只是将对象引用指向另一个站点并将其植入第一个站点。恕我直言,这是更少的部分,而且您的依赖关系也没有那么紧密。我在 WPF 中执行此操作,但我听说它与 ASP.NET 非常相似。有关更多信息,请参阅此线程: 如何在报告服务中实现用户模拟?

于 2013-09-17T21:59:13.787 回答