AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 515589
Accepted
Granger
Granger
Asked: 2013-06-14 07:59:45 +0800 CST2013-06-14 07:59:45 +0800 CST 2013-06-14 07:59:45 +0800 CST

ReportManager 如何在外部而不是在防火墙后面使用不同的端口?

  • 772

我在本机模式下使用 SSRS 2012。配置与我升级的 SSRS 2008 相比似乎没有太大变化,因此该问题适用于两个版本(但是,如果有解决方案,它可能适用于也可能不适用于这两个版本)。

我处于一种情况,我想从防火墙外部的一组端口提供 ReportManager 网站,但在内部,在不同的端口上设置 SSRS。有谁知道这是如何实现的?

细节

这是一个问题的原因是因为 SSRS 代码坚持构建完整的绝对 URL 到 ReportManager 网站中的不同位置。(IMO,这只是 SSRS 中许多重大/严重的设计缺陷之一)如果它只是使用未尝试指定域+端口的 URL,这将不是问题。

例子

让我们从外部 URL“ http://reports.example.com/ssrs ”开始,ReportManager 被配置为在端口 8080 上运行(当然,您的端口转发从端口 80 转到 8088)。如果你转到外部 URL,你会很好地访问该站点;让我们忽略 AuthC 子系统并假设您登录正常。对于某些链接(例如“详细信息视图”、“移动”、“删除”等),现在,您不会到达预期的位置,因为 SSRS 试图将您发送到“ http://reports.example。 com:8080/ssrs/ ...”。您可以通过删除端口手动修复链接,然后您将到达该页面。SSRS 2012 和 SSRS 2008 之间损坏的 URL 有所不同,但问题仍然存在。

ssrs
  • 1 1 个回答
  • 1127 Views

1 个回答

  • Voted
  1. Best Answer
    Granger
    2013-06-15T17:18:03+08:002013-06-15T17:18:03+08:00

    我有一些可以在 SSRS 2012 上运行的东西,但它完全是 hack。可以使用客户端 Javascript 重写所有 URL(加上 SSRS 喜欢的偶尔的 RedirectUrl 参数),但这不考虑服务器端的 Response.Redirect() 调用。所以你会得到一个部分解决方案。

    简而言之,将 HttpModule 添加到 ReportManager,以便您可以添加 PreRequestHandlerExecute 事件处理程序。在其中,使用 Reflection 修复 GlobalApp.BaseUrl 和 Request.Url 以关闭 HOST 标头而不是默认标头。您必须更改两者,因为 SSRS 在构建链接时并不总是使用自己的 BaseUrl。(我使用 ILSpy 查找要更改的字段。)

    这是我的。我敢肯定它可以做得更好,但我已经工作了,我不再关心了。在 SSRS 上工作会吸取你的生存意愿。

    编辑:修复了修改 Request.Url 的部分。请注意,虽然它指定了 .Fragment,但客户端不会发送它,因此它始终为空白。

    void context_PreRequestHandlerExecute(object sender, EventArgs ea)
    {
        HttpApplication app = sender as HttpApplication; // also at: HttpContext.Current.ApplicationInstance
        string host = app.Context.Request.Headers["HOST"];
        if (!string.IsNullOrEmpty(host))
        {
            System.Reflection.FieldInfo fi = typeof(Microsoft.ReportingServices.UI.GlobalApp).GetField("m_baseUrl", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            if (fi != null)
            {
                string protocol = "http://";
                if (app.Context.Request.IsSecureConnection)
                    protocol = "https://";
                Uri url = new Uri(string.Format("{0}{1}{2}", protocol, host, app.Context.Request.ApplicationPath));
                fi.SetValue(app as Microsoft.ReportingServices.UI.GlobalApp, url);
    
                fi = typeof(System.Web.HttpRequest).GetField("_url", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                if (fi != null)
                {
                    url = new Uri(string.Format("{0}{1}{2}{3}{4}", protocol, host, app.Context.Request.FilePath, app.Context.Request.Url.Query, app.Context.Request.Url.Fragment));
                    fi.SetValue(app.Context.Request, url);
                }
            }
        }
    }
    
    • 1

相关问题

  • 在 SharePoint 集成模式下安装 SSRS 需要其他许可证吗?

  • 更改服务登录帐户后,Sql Server Reporting Services 停止工作

  • SSRS 2008 前端到 SQL 2005 集群后端的任何问题

  • 如何将 SQL Server Reporting Services 安装移动到新服务器?

  • Sharepoint / SSRS 订阅间歇性不发送电子邮件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve