基于这个问题中的问题,我发现自己处于同样的情况,我有一个报表生成器Web 服务,它在服务器上,我无法从客户端访问它。
为了允许我访问,我遵循了这些说明,但徒劳无功,我的连接代码是这样的:
连接字符串:
private int _commandTimeout = 600;
private Uri _reportServerUrl = new Uri("http://<Servidor>:80/ReportServer");
private string _connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
private ReportViewer _reportViewer = new ReportViewer();
访问功能:
public string CargaInforme(int reportId)
{
string nomInforme = "";
using (SqlConnection sqlConn = new SqlConnection(_connectionString))
{
DataSet reportAccessInfo = SP_RPT_GET_REPORT_INFO(sqlConn, reportId);
if (reportAccessInfo != null && reportAccessInfo.Tables.Count > 0 && reportAccessInfo.Tables[0].Rows.Count > 0)
{
Uri _reportServerUrl = new Uri(GetReportServer());
this._reportViewer.ProcessingMode = ProcessingMode.Remote;
this._reportViewer.SizeToReportContent = true;
this._reportViewer.ZoomMode = ZoomMode.FullPage;
DataRow row = reportAccessInfo.Tables[0].Rows[0];
ServerReport serverReport = this._reportViewer.ServerReport;
serverReport.ReportServerUrl = _reportServerUrl;
serverReport.ReportPath = (row["reportPath"].ToString().StartsWith("/") ? "" : "/") + row["reportPath"].ToString();
string uriString = row["reportServerPath"].ToString().Trim();
Uri uri = (Uri)null;
int num = 0;
ref Uri local = ref uri;
if (Uri.TryCreate(uriString, (UriKind)num, out local))
{
serverReport.ReportServerUrl = uri;
}
//Aqui me produce el 401
ReportParameterInfoCollection parameters = this._reportViewer.ServerReport.GetParameters();
if (parameters.Count == 0)
this._reportViewer.ServerReport.Refresh();
ViewBag.ReportViewer = this._reportViewer;
nomInforme = row["reportDesc"].ToString();
}
}
return nomInforme;
}
为什么某些客户端会出现此错误,我该如何解决?
编辑 1
服务器和客户端在同一个域中。这个问题也无法为我提供解决方案,因为它已经过时了
添加类
ReportServerCredentials
并定义如下:并在函数中调用它:
根据 Mozilla,这
401
意味着:因此,您必须将凭据发送到服务器,
WWW-Authenticate
以便它允许您使用服务或禁用您在 IIS 中配置的身份验证并将其更改为匿名。