2013-10-18 195 views
2

我有一個連接到SQL Server 2008 R2中的Reporting Services的應用程序。Reporting Services 2008 - 401:未授權

的錯誤是:

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個不同的客戶,所以它不是一個codeing問題。

我正試圖在客戶的服務器上使用AD進行安裝。儘管SQL Server和IIS都在同一臺機器上,所以我並不關心AD。

它運行時,如果我以管理員身份運行IE,但它不適用於其他用戶。 ASP.NET應用程序使用在本地計算機中創建的用戶(稱爲ReportingServicesUser)成爲ReportingServicesUser組的成員,從而連接到SSRS。

事情我已經嘗試:

  • 在RS網站添加ReportingServicesUser站點設置(也做了同樣的網絡服務,IUSR,Authenticated Users組,本地服務等)
  • 添加ReportingServicesUser在RS網站上的文件夾權限(也做了同樣的網絡服務,IUSR,Authenticated Users組,本地服務等)
  • 一(應用數據庫和RS相關數據庫)
  • 向RS文件夾添加了NTFS權限(我將仔細檢查)。
  • 連接到使用http://localhosthttp://computernamehttp://domain.com

供參考RS,代碼是這樣的(簡本):

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 

我讀過很多關於這個的文章和網頁的但我無法得到適合我的答案。

回答

1

好了,我終於不得不更改代碼以:

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

和它的工作。可能還有另一種解決方案,但我找不到它。

+0

我不會說這是一個解決方案,因爲通常您希望報表服務器執行到除當前窗口標識之外的其他憑證之下(這就是您實質上正在執行的操作)。 –

0

您確定您爲ssrs中的特定報告提供了「ReportingServicesUser」瀏覽權限嗎?該請求從未將其發送到服務器,但我會檢查\ Reporting Services \ LogFiles,以確定它。

此外,您的「報告用戶」用戶需要使用您發送的憑據在報告服務器上定義。

+0

是的,我已經在站點設置和根文件夾設置中添加了所有權限的用戶,甚至是管理員!我會檢查日誌。 –