我正在尝试通过ASP.NET Web ReportViewer控件连接到ReportingServices:
rvContract.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
rvContract.ServerReport.ReportServerCredentials = new ReportServerCredentials("myUsername", "myNetworkPassword", "DOMAIN");
rvContract.ServerReport.ReportServerUrl = new Uri(ReportConfiguration.ReportServerUrl);
string rptPath = ReportConfiguration.RootPath;
if (!rptPath.EndsWith("/"))
{
rptPath += "/";
}
rvContract.ServerReport.ReportPath = rptPath + "AdminReports/Contract";
List<ReportParameter> reportParams = new List<ReportParameter>();
if (MkoSession.AccountId.HasValue)
{
ReportParameter accountId = new ReportParameter("AccountId", MkoSession.AccountId.Value.ToString());
}
rvContract.ServerReport.SetParameters(reportParams);
rvContract.ShowParameterPrompts = false;
rvContract.ShowZoomControl = false;
rvContract.ServerReport.Refresh();
rvContract.DataBind();
凭据的实现如下所示:
public class ReportServerCredentials : IReportServerCredentials
{
private string _userName;
private string _password;
private string _domain;
public ReportServerCredentials(string userName, string password, string domain)
{
_userName = userName;
_password = password;
_domain = domain;
}
public WindowsIdentity ImpersonationUser
{
get
{
// Use default identity.
return null;
}
}
public ICredentials NetworkCredentials
{
get
{
// Use default identity.
return new NetworkCredential(_userName, _password, _domain);
}
}
public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority)
{
// Do not use forms credentials to authenticate.
authCookie = null;
user = null;
password = null;
authority = null;
return false;
}
}
在测试时只需对我的凭据进行硬编码。在办理登机手续之前,我们必须为此创建一个域帐户。
我可以通过浏览器点击ReportService2005.asmx和ReportExecution2005.asmx(这是我的ReportServerUrl成为)没问题。
当我进入SetParameters调用时,我得到一个WebException。查看异常中响应中的标题:
{RSNotAuthenticated:是的 RSAuthenticationHeader:.ASPXFORMSAUTH 内容长度:206 缓存控制:私有 内容类型:text / html;字符集= utf-8的 日期:2013年9月24日星期二16:15:08 GMT 位置:/ReportServer/logon.aspx?ReturnUrl=%2freportserver%2fReportExecution2005.asmx 服务器:Microsoft-HTTPAPI / 2.0 X-AspNet-Version:2.0.50727
}
好像它告诉我我还没有登录。如果是这样的话,完全相同的凭据如何让我通过浏览器看到Web服务?
BTW,我确实在ReportServerCredentials实现中的每个方法中设置了断点,并看到了每个断点。不确定是什么告诉我们,但NetworkCredentials界面返回我的网络凭证就好了。
答案 0 :(得分:0)
我想我可能会偶然发现它。如果其他人有类似的麻烦。
首先,我四处寻找并在服务器上找到了报告服务web.config。看到它使用的是certnticaion mode = forms。
然后,我实现了GetFormsCredentials以返回true并传递通用用户名。我从ReportServer数据库的Users表中获取了此用户名。
不再获取WebException,但我的ReportViewer也没有显示。所以,还没有走出困境,但似乎更接近了。
FWIW,我想我记得有人说我们在数据库服务器上进行了奇怪的自定义表单身份验证。所以,对于任何发生这种情况的人,YMMV。所有这些都早于我,所以我不确定如何检查它。