如何使用 SQL Server Reporting Services URL Access 将呈现的 PDF-Repor



我正在尝试将呈现的 pdf 报告从报表服务器存储回源数据库的表中作为变量。我目前的方法是在外部 python 脚本中使用 URL-Access 来获取呈现的报告,然后将它们保存到相应的表中。以下 URL 在浏览器中按预期工作: http://localhost/reportserver?/ReportingServicesTest/Report_Test&rs:Format=PDF

但是,当我尝试在外部python脚本中访问该URL时,我收到了401错误。 所以我然后尝试使用 requests_ntlm 库来传递用户名和密码,但不知何故它仍然不起作用。

import requests
from requests_ntlm import HttpNtlmAuth
url = 'http://localhost/reportserver?/ReportingServicesTest/Report_Test&rs:Format=PDF'
session = requests.Session()
session.auth = HttpNtlmAuth('Domain\Username','password')
response = session.get(url,stream=True)
open('C:/Path/Report_Test.pdf', 'wb').write(response.content)

我的方法原则上是正确的,还是有更好的方法来完成同样的事情? 我是 SQL Server Reporting Services 的新手,所以我愿意接受您的建议,并提前感谢您的帮助。

恕我直言,如果您需要历史数据进行保管或审计,我强烈建议将数据保存在数据库中。使用暂存环境向报表数据添加时间戳,以便快照更有意义。这样,以后可以使用 SSRS 门户筛选特定的历史版本(参数化(,而无需生成定制的 PDF 查看器。它还将节省一些数据库存储。或者,可以在 SSRS 中创建订阅,将 PDF 发送到文件共享。然后配置该目录的侦听器以获取元信息并将该引用存储在数据库表中。不用说,我不太喜欢在数据库中存储文件,因为大多数时候文件存储比数据库存储便宜。

要解决身份验证问题,您可能需要检查 Web 服务器上的 rsreportserver.config 文件,因为当前代码表明您的本地主机不知道任何域。在任何情况下,您都可以尝试更改<Authentication/>部分,使其如下所示:

<Authentication>
<AuthenticationTypes>
<RSWindowsBasic>
<LogonMethod>3</LogonMethod>
<Realm></Realm>
<DefaultDomain>putyourfullyqualifieddomainnamehere</DefaultDomain>
</RSWindowsBasic>
</AuthenticationTypes>
<RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel>
<RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario>
<EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>

如果您的 Web 服务器位于代理或防火墙后面,这也将起作用。

重要提示:DefaultDomain 的内容应为 FQDN,例如 contoso.microsoft.com 或 myprimarydomain.lan

最新更新