我有一个连接到 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
我已经阅读了很多关于此的帖子和页面,但我无法得到适合我的答案。