【问题标题】:ImageResizer: System.BadImageFormatException is causing Web app crash despite being in try ... catchImageResizer:System.BadImageFormatException 正在导致 Web 应用程序崩溃,尽管在 try ... catch
【发布时间】:2019-11-01 09:52:15
【问题描述】:

用户上传的 PNG 文件看起来好像以某种方式损坏。但最大的问题是,每当我们的系统尝试对其进行缩略图时,整个应用程序池都会崩溃并重新启动。我已经尝试使用直接 URL 并在 try ... catch 块中使用代码。

这是图片的副本:https://drive.google.com/file/d/1GpmnIbia3rtqfKrhpg_nKHpjxdC-AxR3

如果我将它加载到 Paint.NET 并再次保存它,它工作正常,所以我很满意图像存在问题。但是我需要阻止任何损坏的图像完全使我的网络应用程序崩溃。我很乐意处理并记录错误,但我需要一切正常继续。

例如,作为测试在本地运行,我可以直接查看图像而不会出现问题。浏览器不介意:

http://localhost:60148/Content/artwork/2019/06/img_0021-9.png

但如果我尝试缩略图版本:

http://localhost:60148/Content/artwork/2019/06/img_0021-9.png?w=160&mode=max&otf=y&quality=90&format=jpg&bgcolor=white

Visual Studio 将报告以下内容并停止调试:

System.BadImageFormatException: 'An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)'

我有一些旧代码也可以将缩略图写入响应流。即使这是在 try catch 中,VS 在报告错误后仍然会停止调试。我有本地和全局错误处理,所以我不会期望崩溃。

try
{
    ImageBuilder.Current.Build(pathname.StartsWith("/") ? "~" + pathname : pathname, outputStream,
                new ResizeSettings(resizeSettings));
}
catch (Exception ex)
{
    Console.WriteLine("Could not output to stream: " + ex.Message);
}

在这种方法上,我尝试添加以下属性但没有成功:

[HandleProcessCorruptedStateExceptions]

[SecurityCritical]

我尝试将它放在它自己的任务中,希望它能本地化它,但没有任何乐趣。反正也无所谓。我们几乎只为 ImageResizer 使用 URL,这正在扼杀我们的网络池。

这不仅仅是在本地。之所以注意到这一点,是因为我们将它作为一个测试版网站运行,它正在扼杀它。

【问题讨论】:

    标签: png imageresizer


    【解决方案1】:

    System.BadImageFormatException 从不引用图像。这是 .dll 和 .exe 文件专用的例外,是指使用错误的文件位数(如 64 对 32)。

    这里发生了其他事情。 ImageResizer 也不知道杀死应用程序池。你安装了哪些插件?发布诊断页面 (/resizer.debug) 会有所帮助。

    【讨论】:

    • 哦,这很有趣!谢谢。我什至不认为 BadImageFormatException 与 PNG 本身无关。我已经放弃回答这个问题了,但多亏了这个提示,它给了我一些其他测试的东西,而且我找到了一些关于诊断特定异常的建议。
    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多