У меня есть проект ASP.NET-MVC, где мне нужно динамически генерировать некоторые PNG-изображения. Это легко. Я просто создаю ActionResult, который возвращает объект FileSreamResult. Для создания изображений я использовал классы из System.Drawing, такие как Bitmap и Image. Все отлично работает на локальной машине и на производственном сервере. Но когда IIS на рабочем сервере отключает мой пул приложений из-за неактивности и запускает его снова, генерация образа начинает давать сбой.
Проблема в коде, который пытается сохранить изображение в поток:
var imageStream = new MemoryStream();
bmp.Save(imageStream, ImageFormat.Png);
Исключение составляет: System.Runtime.InteropServices.ExternalException (0x80004005): в GDI + произошла общая ошибка. Так что тут особой помощи нет. Я пробовал разные решения и ничего не помогает. После того, как я нашел эту тему Альтернативы System.Drawing для использования с ASP.NET?
Основная идея этой темы:
Классы в пространстве имен System.Drawing не поддерживаются для использования в службе Windows или ASP.NET. Попытка использовать эти классы из одного из этих типов приложений может привести к непредвиденным проблемам, таким как снижение производительности службы и исключения во время выполнения.
Поэтому я решил использовать классы WPF для генерации изображений. Я переписал весь код генерации изображений, но теперь я получаю еще одну ошибку после перезапуска пула приложений. Исключение:
System.Runtime.InteropServices.COMException (0x88982F8A): Исключение из HRESULT: 0x88982F8A . Это происходит, когда я пытаюсь сохранить свой PngBitmapEncoder в поток
var stream = new MemoryStream();
encoder.Save(stream);
Может, кто-нибудь сталкивался с этой проблемой или просто есть идеи?