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

C# SSIS脚本任务:FireError()挂起在Catch块中,c#,sql-server,ssis,winscp-net,C#,Sql Server,Ssis,Winscp Net,使用SQL Server 2014。我有一个脚本任务,它通过WinSCPnet.dll程序集下载文件,我试图通过catch块中的firererror()将错误记录到SSIS日志中。不幸的是,当程序到达FireError()时,它只是挂起而没有失败或没有任何消息。我遵循了MSDN上提供的示例(参见下面的代码),但没有成功。有人能帮忙吗 注意:我有一个FireInformation()事件,它在成功下载后工作 发现了问题。我有一个OneError事件处理程序设置,可以在任何任务失败时发送电子邮件。

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

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


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

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

    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;
        }
    }