SSIS 脚本任务:FireError() 在 Catch 块中挂起

SSIS Script task: FireError() hangs in Catch block

使用 SQL Server 2014。我有一个脚本任务,它通过 WinSCPnet.dll 程序集下载文件,我试图通过 catch 中的 FireError() 将错误记录到 SSIS 日志堵塞。不幸的是,当程序到达 FireError() 时,它只是挂起而没有失败或没有任何消息。我遵循了 MSDN 上提供的示例(请参阅下面的代码)但没有成功。有人可以帮忙吗?

注意:我有一个 FireInformation() 事件,它在成功下载后起作用。

https://docs.microsoft.com/en-us/sql/integration-services/extending-packages-scripting/task/logging-in-the-script-task?view=sql-server-2014

    public void Main()
    {
        // Set variable declaration(s).            
        string strTaskName = (string)Dts.Variables["System::TaskName"].Value; // Has been selected as read-only.

        SessionOptions sessionOptions = new SessionOptions
        {
            // Set SessionOptions here
        };

        try
        {
            using (Session session = new Session())
            {
                // Create error here by downloading a file from a folder path that does not exist.

                foreach (TransferEventArgs transfer in transferOperationResult.Transfers)
                {
                    // Print results to SSIS log. The FireInformation() works here.
                    Dts.Events.FireInformation(0, string.Format("Script Task {0}", strTaskName), string.Format("Download of file {0} succeeded.", transfer.FileName), null, 0, ref fireAgain);
                }
            }

            Dts.TaskResult = (int)ScriptResults.Success;
        }
        catch (Exception ex)
        {                
            // Print results to SSIS log. The program hangs here without message.
            Dts.Events.FireError(0, string.Format("Script Task {0}", strTaskName), ex.Message, null, 0);

            Dts.TaskResult = (int)ScriptResults.Failure;
        }
    }

找到问题了。我有一个 OnError 事件处理程序设置,可以在任何任务失败时发送电子邮件。问题源于发送邮件任务选择了错误的连接管理器这一事实。我通过 运行 逻辑链上的每个任务(即右键单击 + 执行任务)找到问题,以找到问题并在发送邮件任务结束,它告诉我连接管理器无法找到了。

奇怪的是,SSIS 调试器在尝试 运行 整个程序包时没有在执行结果中报告相同的错误。我不知道这是 normal/expected 行为。也许脚本任务、错误事件处理程序和发送邮件任务之间存在错误?