【问题标题】:URL Rewrite of virtual directory to retrieve SSRS report虚拟目录的 URL 重写以检索 SSRS 报告
【发布时间】:2013-09-17 20:53:39
【问题描述】:

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

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

感谢您提供的任何帮助。

【问题讨论】:

    标签: url iis reporting-services proxy rewrite


    【解决方案1】:

    我认为你想多了这是我的猜测。

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

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

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

    【讨论】:

    • djandojazz,对不起,我没有尽快回复。我还有其他必须处理的项目。您的问题的答案是: 1. 在名为“ssrs”的虚拟目录中托管 URL 重写的 Web 服务器可以访问包含 SSRS 实例以及 SQL Server 数据库实例的服务器。如果我从 Web 服务器浏览到 SSRS 报告的 URL,系统会要求我提供凭据,并且在提供凭据后,我可以登录 SSRS 报告页面并查看报告。
    • 我会将 Reportviewer 称为自包含在您的 ASP.NET 应用程序中的对象。不要做重定向恕我直言。
    • 如果我从 Web 服务器浏览到 SSRS 报告的 URL,系统会要求我提供凭据,并且在提供凭据后,我可以登录 SSRS 报告页面并查看报告。报告数据源使用为报告创建的特定 Windows 用户。该用户是本地管理用户。我可以访问 Web 服务器上的 URL,因为防火墙规则允许通过 80 和 443 访问数据库,但不允许在防火墙之外访问。另一方面,Web 服务器在防火墙外可用。我们希望通过 URL 重写来访问 SSRS 报告网站。
    • 感谢您的评论。我曾表达过这样做,但我们决定尝试进行重写,因为希望创建一个仪表板网页并且只有一个地方可以进行更改。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2015-09-25
    • 2016-04-15
    • 1970-01-01
    • 2015-08-30
    • 2011-02-12
    • 2017-05-08
    相关资源
    最近更新 更多