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
相关产品推荐
相关产品推荐

