我想從Windows服務發送PDF格式的SSRS報告。這對我的本地機器和分段安裝程序很好,但是我在生產環境中遇到了以下錯誤。這似乎是我的一些權限問題,但我無法查明確切的問題。下面是錯誤在Windows服務日誌looged:Windows服務失敗,同時發送報告爲PDF與System.Net.WebException:請求失敗,HTTP狀態401:未授權
<log4j:event logger="MyProjectNamespace.Logger" timestamp="1352927717254" level="ERROR" thread="377">
<log4j:message>The request failed with HTTP status 401: Unauthorized. </log4j:message>
<log4j:properties>
<log4j:data name="log4net:UserName" value="NT AUTHORITY\SYSTEM" />
<log4j:data name="log4jmachinename" value="<My server machine name>" />
<log4j:data name="log4japp" value="<My windows service exe name>" />
<log4j:data name="log4net:HostName" value="<My host name>" />
</log4j:properties>
<log4j:throwable>
System.Net.WebException:請求失敗,HTTP狀態401:未經授權。在System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage消息,WebResponse的響應,流responseStream,布爾asyncCall)在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串方法名,對象[]參數)
From stacktrace, line which is producing error is below:
Rse2005.ExecutionInfo ei = rsExec.LoadReport(reportPath, historyID);
here "rsExec" is object of type "Rse2005.ReportExecutionService", historyId is NULL
我的代碼來創建報告PDF低於:
private static void RenderReport(string reportFormat, string reportPath, string parameterLanguage, Rse2005.ParameterValue[] rptParameters, string outputFilePath)
{
string historyID = null;
string deviceInfo = null;
string encoding = String.Empty;
string mimeType = String.Empty;
string extension = String.Empty;
Rse2005.Warning[] warnings = null;
string[] streamIDs = null;
Rse2005.ReportExecutionService rsExec = new Rse2005.ReportExecutionService();
rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
Rse2005.ExecutionInfo ei = rsExec.LoadReport(reportPath, historyID);
rsExec.SetExecutionParameters(rptParameters, parameterLanguage);
Byte[] results = rsExec.Render(reportFormat, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
File.WriteAllBytes(outputFilePath, results);
}
此方法獲得reportPath像 「文件夾名/所以reportName」。
我也在使用來自webApp的reportViewer控件(在同一臺服務器上)顯示相同的報告,並且在那裏它完美地工作。 我的報告服務器,Windows服務和webApp都在同一臺服務器上
我試圖在報告站點設置中給用戶「NT AUTHORITY \ SYSTEM」權限並將reportPath更改爲帶有服務器名稱的完整路徑(如http:/// reportserver/folderName/ReportName),但這些都沒有幫助。請建議我還能檢查和修復哪些內容。謝謝。