You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WebForms ReportViewer无法切换端口:从443改80求助

解决SSRS报表调用强制使用443端口的问题

问题根源

你代码里设置的ReportServerUrl指向的是报表管理器界面(/reports),而非SSRS的核心Web服务端点(/reportserver)。报表管理器通常带有重定向逻辑,可能强制跳转到HTTPS端口443,导致代码尝试连接443端口失败。

解决方案

  • 修正ReportServerUrl地址
    把原报表管理器地址替换为报表服务器Web服务地址,这是程序调用SSRS的正确端点:

    sr.ReportServerUrl = new Uri("http://pfs-reports:80/reportserver");
    

    注意区分:

    • /reports:SSRS的人工操作Web管理界面
    • /reportserver:SSRS的编程API调用端点
  • 检查服务器端SSRS配置
    打开SQL Server Reporting Services配置管理器:

    • 进入「Web服务URL」选项,确认HTTP端口80已启用,且未勾选「要求SSL」
    • 进入「Web门户URL」选项,确保无强制SSL的设置
  • 可选:添加身份验证凭据(若需要)
    如果报表服务器需要身份验证,可在代码中补充凭据设置:

    sr.ReportServerCredentials = new ReportServerCredentials
    {
        NetworkCredentials = new System.Net.NetworkCredential("用户名", "密码", "域")
    };
    

    (需自定义ReportServerCredentials类实现IReportServerCredentials接口)

修正后的完整代码示例

string reportName = "/report/AFolder/AReport";
Warning[] warnings;
string[] streamIds;
string mimeType;
string encoding;
string extension;

string[] paramNames = new string[0];
string[][] paramDic = new string[0][];

ReportViewer rv = new ReportViewer { ProcessingMode = ProcessingMode.Remote };
ServerReport sr = rv.ServerReport;
// 修正为报表服务API端点
sr.ReportServerUrl = new Uri("http://pfs-reports:80/reportserver");
sr.ReportPath = reportName;

if (paramNames.Length != 0)
{
    List<ReportParameter> paramList = paramNames.Select((t, i) => new ReportParameter(t, paramDic[i])).ToList();
    rv.ServerReport.SetParameters(paramList);
}

return rv.ServerReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:27:21