2

我有一个连接到 SQL Server 2008 R2 中的 Reporting Services 的应用程序。

错误如下:

System.Net.WebException: The request failed with HTTP status 401: Unauthorized.
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse
   (SoapClientMessage message, WebResponse response, Stream responseStream, 
    Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke
   (String methodName, Object[] parameters)
at Microsoft.SqlServer.ReportingServices2005.Execution.ReportExecutionService.LoadReport
   (String Report, String HistoryID) 

该应用程序在 2 个不同的客户中运行良好,因此不是编码问题。

我现在正在尝试将它安装在使用 AD 的客户服务器上。SQL Server 和 IIS 都在同一台机器上,所以我并不关心 AD。

如果我以管理员身份运行 IE,它会运行,但它不适用于其他用户。ASP.NET 应用程序使用在本地计算机中创建的用户(称为ReportingServicesUser)连接到 SSRS,该用户是 ReportingServicesUser 组的成员。

我尝试过的事情:

  • ReportingServicesUser添加到 RS 网站的站点设置(对网络服务、IUSR、Authenticated Users 组、本地服务等执行相同操作)
  • ReportingServicesUser添加到 RS 网站中的文件夹权限(对网络服务、IUSR、Authenticated Users 组、本地服务等执行相同的操作)
  • 为该用户添加了对数据库的权限(应用程序数据库和 RS 相关数据库)
  • 为 RS 文件夹添加了 NTFS 权限(不过我会仔细检查)。
  • http://localhost使用和http://computername连接到 RShttp://domain.com

作为参考,代码是这样的(简化版):

var service = new ReportExecutionService();
service.Credentials = new NetworkCredential("ReportingServicesUser", "password");
service.Url = "http://computername:90/ReportServer/ReportExecution2005.asmx";

service.ExecutionHeaderValue = new ExecutionHeader();

var execInfo = new ExecutionInfo();
execInfo = service.LoadReport("path-to-the-report", null);
===>  Here it throws the exception

我已经阅读了很多关于此的帖子和页面,但我无法得到适合我的答案。

4

2 回答 2

2

好的,我终于不得不将代码更改为:

rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

它奏效了。可能还有另一种解决方案,但我找不到。

于 2013-10-21T14:47:52.490 回答
0

您确定您为 ssrs 中的特定报告授予“ReportingServicesUser”浏览权限吗?该请求似乎从未到达服务器,但我会检查 \Reporting Services\LogFiles 以确定。

此外,需要使用您发送的凭据在报告服务器上定义您的“报告用户”用户。

于 2013-10-20T01:40:02.303 回答