[asp.net]从 SSRS 的间歇 401 未经授权响应

标签: Asp.net SQLServer C#
发布时间: 2017/3/26 1:59:39
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

(使用 C#、 Web API、 SQL Server2012 w/报表服务器,身份验证是 NTLM)

我得到间歇出现的错误时,尝试从 SSRS 下载 (作为一个 excel 文档) 的一份报告。我建立了正确的 URL 来呈现像报表︰

http://sqlServer/ReportServer/Pages/ReportViewer.aspx?/TheReportName&rs:Command = 渲染 & rs︰ 格式 = excel & rc:Parameters = false & 地区西 = & CutOffDate = 2015/10/25

WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential("myDom\\myReportReader", "P@55W0rd");
     //string credentials = Convert.ToBase64String(
     //    Encoding.ASCII.GetBytes("myDom\\myReportReader" + ":" + P@55W0rd"));
     //webClient.Headers[HttpRequestHeader.Authorization] = string.Format("Basic {0}", credentials);

//401 Unauthorized thrown here:
return new MemoryStream(webClient.DownloadData(reportUrl));

这里的目标是对公众面对 IIS Web API 控制器从内部防火墙/下载 filestream 保护 SSRS,然后继电器的流到浏览器。 这种作品有时当它不是返回的最后一行上有 401 错误... 说出的线代表试图解决的问题,没有工作。

解决方法 1:

一个解决方案是更改请求的 URL。

SSRS 响应通过重定向 (http 状态 302),当你想要导出通过 ReportViewer.aspx 的一份报告。并 WebClient 重新到重定向页面的凭据不发送。

你应该要求以这种格式报告︰ http://sqlServer/ReportServer?/TheReportName&rs:Format = EXCEL & rc:Parameters...那么简单地从 URL 中删除此序列︰ /Pages/ReportViewer.aspx

更多关于导出报表使用 URL 访问是在这里︰ https://msdn.microsoft.com/en-us/library/ms154040.aspx

另一个解决方案是离开非最优的 URL,使用 CredentialCache ,它将提供的凭据到重定向的页面,但不要忘记设置 Uri 只到 URL前缀,'http://sqlServer' 或 'http://sqlServer/ReportServer',不是更多的参数。

WebClient webClient = new WebClient();
var nc = new NetworkCredential("myReportReader", "P@55W0rd", "myDom");
var cc = new CredentialCache{{new Uri("http://sqlServer"), "Ntlm", nc}};
webClient.Credentials = cc;
return new MemoryStream(webClient.DownloadData(reportUrl));
赞助商