1

我们使用第三方库来操作 Pdf。我们的应用程序作为 Windows 服务运行,每月处理数千个文件。偶尔有人上传格式错误的 Pdf,这使库运行异常并最终引发 StackOverflowException。

库制造商在过去 2 年中没有修复该错误,当有人愿意时,我们不能让我们的生产崩溃。

自动重新启动服务似乎不是一个选项,因为应用程序会重试格式错误的文件。由于我们并行处理许多文件,因此在启动时我们无法知道哪个是格式错误的。

由于默认情况下无法捕获stackoverflow,我想知道是否可以调整服务的CLR以捕获异常。

4

1 回答 1

3

您可以重新构建应用程序以创建新的子进程,每个子进程都有自己的库实例来执行工作。

最重要的是,使用这种方法,失败的实例不会使整个应用程序崩溃或导致其他子进程崩溃。您还有一个优势,即管理器进程可以跟踪哪些文件正在进行中(以及在哪个进程上),因此它会知道哪些文件在失败后不重试。

于 2017-10-04T20:28:54.640 回答