sql-server - SSRS 2008 报告订阅电子邮件随机收到传递扩展加载错误

标签 sql-server email reporting-services ssrs-2008 subscription

我创建了 3 份报告,并为它们设置了每日订阅,以便将每份报告通过电子邮件发送给收件人列表。

当我查看“我的订阅”时,我看到消息“无法加载此订阅的传递扩展程序”,有时甚至显示已成功通过电子邮件发送给收件人。

一些报告已发送,但我收到的报告是随机的。

这不是 SSRS2008R2,这是 SSRS2008

我已确保所有电子邮件地址都不是别名 我已确保 SMTP 服务器允许来自报表服务器的中继 我已确保所有电子邮件地址仍然有效 我在日志中没有看到错误。

有什么想法吗?

谢谢

最佳答案

这个问题已经很老了,但是今天在 SQL Server 2014 中仍然会出现该错误消息,并且在编写该错误消息时排名最高的搜索结果并不是特别有用,也不包含任何解释为什么错误会不一致地发生。

以下是解决此问题的步骤:

1) 确认已为 SSRS 实例启用电子邮件传送(即查看 Reporting Services 配置管理器的“电子邮件设置”部分。

请注意,如果您有横向扩展配置,则需要在加入横向扩展配置的每个实例上启用电子邮件传送,即使客户端不访问这些实例。即使您没有设置任何类型的网络级负载平衡,订阅事件的任务也将在横向扩展配置中的实例之间实现平衡。我不确定平衡如何工作的确切细节,但是 this post on blogs.msdn.com提供有关如何在 SSRS 中处理事件的一些详细信息:

When the subscription runs several things happen:

  • SQL Server 代理作业触发并在 RS 目录的事件表中放入一行,其中包含处理订阅所需的设置

  • RS 服务器服务的线程数量有限(每个 CPU 2 个),每隔几秒轮询事件表以查找进程订阅

  • 当它找到事件时,它会在通知表中放入一行并开始处理订阅,其中包括执行数据驱动的订阅查询(如果存在)、处理报告、将其呈现为指定格式( HTML、PDF、Excel 等),并将最终结果发送到电子邮件地址或文件共享。请注意,ExecutionLog 表中还将有一行用于报告执行。

2) 查看 SSRS 错误日志(通常在 C:\Program Files\Microsoft SQL Server\MSRS??.<instance name>\Reporting Services\LogFiles 中)。如果您正在运行横向扩展配置,则需要在横向扩展配置中的每个实例上执行此操作;仅无法处理订阅事件的实例才会记录错误。

顺便说一句,如果您在订阅触发时对 SSRS 数据库运行 SQL Server 跟踪或扩展事件 session ,您应该能够看到哪个 SSRS 实例正在处理订阅事件并失败。

3) 如果您在执行步骤 1 和 2 后仍然遇到困难,则可能值得使用 Sysinternals 中的 Process Explorer 在订阅运行时监视文件系统和网络访问。电子邮件传送扩展 DLL 似乎是 C:\Program Files\Microsoft SQL Server\MSRS??.<instance name>\Reporting Services\ReportManager\Bin\ReportingServicesEmailDeliveryProvider.dll ,错误消息可能意味着无法加载该文件。我相信这个文件将被复制到 RSTempFiles加载时的目录。

如果您正在运行防病毒软件,您可能需要遵循 Microsoft 的指南 here对于 SSRS 特定的排除:

File and Directory Exclusions

  • 保存 Reporting Services 临时文件和日志(RSTempFiles 和 LogFiles)的目录

Process Exclusions

  • %ProgramFiles%\Microsoft SQL Server\MSRS??.\Reporting Services\ReportServer\Bin\ReportingServicesService.exe

在我调查此问题的情况下,这是由于横向扩展配置中的灾难恢复服务器未配置为电子邮件传送而引起的。 DR 服务器大约有 1/3 的时间正在处理订阅事件,因此错误是间歇性发生的。我最初并没有想到要查看 DR 服务器,因为没有客户端访问它。

关于sql-server - SSRS 2008 报告订阅电子邮件随机收到传递扩展加载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7166325/

相关文章:

java - 如何只向某人发送邮件?

php - SMTP 配置在生产中不起作用

sql - Visual Studio for SSRS 2008 - 如何将报告组织到解决方案资源管理器中的子文件夹中?

sql-server - 根据条件过滤重复行

sql - 无法连接到 (LocalDB)\MSSQLLocalDB -> 用户 'User-PC\User' 登录失败

sql - 在选择的 CASE 中检查 NULL

c# - 使用 SQL Server 2014 将项目部署到 Azure 时出错

php - 将所有行放入变量中,然后为每个 PHP 发送邮件

c# - 是否有可能以及如何从 SQL Server 中的本地报告服务针对在线动态 CRM 数据源运行 SSRS 报告?

reporting-services - 在 SSRS 中隐藏子报告(并且不执行存储过程)