Этот вопрос связан с этим вопросом: Невозможно отобразить изображение в HttpContext.Response.OutputStream . Это не дубликат.
При попытке сохранить PNG в Response.OutputStream я наблюдаю противоречивое поведение между локальной средой разработки и производственной средой. А именно, код, который я использовал, изначально работал нормально локально, но не работал на рабочем сервере.
Вот оригинальный код, который работал локально:
using (Bitmap bmp = challenge.RenderImage()) {
bmp.Save(context.Response.OutputStream, ImageFormat.Png);
}
Несмотря на локальную работу, при развертывании на рабочем сервере я получил сообщение об ошибке приложения:
В GDI + произошла общая ошибка.
После некоторого копания я определил, что проблема была в том, что ' Сохранение изображения PNG требует доступного для поиска потока. ' - чем не является Response.OutputStream. Эту проблему легко устранить, сначала записав растровое изображение в System.IO.MemoryStream, а затем в Response.OutputStream.
using (Bitmap bmp = challenge.RenderImage()) {
using(MemoryStream ms = new MemoryStream()) {
bmp.Save(ms, ImageFormat.Png);
ms.WriteTo(context.Response.OutputStream);
}
}
Мне любопытно узнать, почему оригинальный код работал локально, но не работал на рабочем сервере? Причины сбоя кода кажутся мне черно-белыми, поэтому я не понимаю, почему может существовать несоответствие, связанное с окружающей средой.