Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过SQL Server代理在SSIS包中运行的C#脚本有时会触发调用目标引发的异常_C#_Sql Server_Exception Handling_Ssis - Fatal编程技术网

通过SQL Server代理在SSIS包中运行的C#脚本有时会触发调用目标引发的异常

通过SQL Server代理在SSIS包中运行的C#脚本有时会触发调用目标引发的异常,c#,sql-server,exception-handling,ssis,C#,Sql Server,Exception Handling,Ssis,据我所知:第三方软件在Java上后台运行。我无法控制这个软件中的代码。它的工作是从外部服务器获取可用的新zip文件。这些文件应在0100之前提交,但第三方无法遵守此请求。凌晨1点,任务Iam-in-control(一个C#script)运行以解压缩已下载的文件,提取必要的文件,并将我们想要的文件压缩回不同的位置,并删除任何不必要的内容。此程序设置为运行1小时,并获取已存在的任何文件,以及在该小时内出现在文件夹中的任何文件。此程序编译良好,在Visual Studio中运行良好,通常通过SQL S

据我所知:第三方软件在Java上后台运行。我无法控制这个软件中的代码。它的工作是从外部服务器获取可用的新zip文件。这些文件应在0100之前提交,但第三方无法遵守此请求。凌晨1点,任务Iam-in-control(一个C#script)运行以解压缩已下载的文件,提取必要的文件,并将我们想要的文件压缩回不同的位置,并删除任何不必要的内容。此程序设置为运行1小时,并获取已存在的任何文件,以及在该小时内出现在文件夹中的任何文件。此程序编译良好,在Visual Studio中运行良好,通常通过SQL Server代理成功运行到完成

但有时(比如5次中的1-2次),它会失败,并显示一条微妙的消息“异常已被调用的目标抛出”

我的理论是:来自第三方的zip文件非常小。平均可能是80-90KB。它们通常在不到一秒钟的时间内下载。然而,我和我的同事怀疑,基于SSD的服务器速度足够快,因此,虽然我们运行的程序可以解包目标文件夹中的任何内容,但有时它会拾取一个zip文件,该文件当前被第三方下载程序“占用”,甚至未完成。这导致我们的程序崩溃,因为它无法访问zip文件

(我不会在这里粘贴代码,因为这个程序正常运行,所以我看不出代码是问题所在)

我认为出现这种情况的原因之一是,任务设置为在失败时重试一次。有时它会在重试时运行到完成,其他时候它会运行10秒到20分钟,然后再次崩溃。由于第二个作业设置为当天晚些时候启动,因此我们无法将此任务设置为在失败时重新运行几次

最好的解决方案是将第三方程序更改为在特定时间暂停,但我们无法对此程序进行此类更改。我们也不确定如果我们将一个预定任务设置为在0100终止这个进程,会发生什么。如果该程序当前正在下载一个zip文件,我们将面临该文件被破坏的风险,这只会导致解包任务再次失败

我们考虑的第二个解决方案是在程序中添加一个try-catch子句来捕获这个异常,我们让程序等待1或2秒,然后重试。问题在于,我们似乎无法找到强制转换的特定异常类型。据我所知,可能没有。我认为唯一可以做到这一点的方法是生成一个泛型catch any exception子句,其中重试是在内部强制转换的。然而,这意味着在少数情况下,当损坏的zip文件到达时,我们只能看到无限循环

我想问的是: -有人知道这种问题引发了什么特殊的异常吗?(如有的话)。
-为什么try-catch-wait(1)方法是一种非常糟糕的方法?

其他任何人都无法比您知道的更具体的异常情况,最好的调查方法是使用Try-Catch并创建更健壮的错误处理。

其他任何人都不可能比您更了解您的异常,最好的调查方法是使用Try-Catch并创建更健壮的错误处理。

即使对我这样一个能看到眼前一切的人来说,从本质上理解出问题所在也是一个非常没有希望的错误,所以我并不认为有人知道问题出在哪里,但我确实有希望。在任何情况下,我从别处得到了一个技巧,可以为任何类型的异常设置一个try-catch,并实现一些日志记录来存储错误时的更多信息。我会试试这个。我也会这么做。祝你好运。这是一个相当无望的错误,仅仅从本质上理解什么是错的,即使对我来说,谁都可以看到我面前的一切,所以我真的认为没有人知道问题是什么,但我确实有希望。在任何情况下,我从别处得到了一个技巧,可以为任何类型的异常设置一个try-catch,并实现一些日志记录来存储错误时的更多信息。我会试试这个。我也会这么做。祝你好运