我正在尝试从 Windows 服务以 PDF 格式发送 SSRS 报告。这在我的本地机器和登台设置上对我来说很好,但我在生产环境中遇到错误。这对我来说似乎是一些权限问题,但我无法确定确切的问题。以下是 Windows 服务日志中出现的错误:
<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);
}
此方法获取报告路径,如“文件夹名称/报告名称”。
我还使用来自 webApp(在同一台服务器上)的 reportViewer 控件显示相同的报告,并且它运行良好。我的报表服务器、windows服务和webApp都在同一台服务器上
我试图在报告站点设置中授予用户“NT AUTHORITY\SYSTEM”权限,并将reportPath 更改为带有服务器名称的完整路径(如http:///reportserver/folderName/ReportName),但这些都没有帮助。请建议我还能检查和修复什么。谢谢。