Многочисленные вызовы обработчиков изображений, приводящие к зависанию IE во всплывающем окне

У нас есть обработчик изображений Ashx, который работал довольно хорошо в течение последних нескольких лет, но недавно мы заметили некоторые странные прерывистые действия в IE8 и IE9. У нас есть страница галереи, которая вызывает обработчик изображения несколько раз как часть атрибута src изображения, эта страница открывается во всплывающем окне.

Страница работает нормально, но когда окно открывается и закрывается в быстрой последовательности (до завершения загрузки всех изображений на странице), это приводит к зависанию браузера и впоследствии должно быть перезапущено.

Ниже приведен пример кода нашего обработчика изображений, у меня есть подозрение, что запрос к изображению не "заканчивается", когда окно закрывается, а соединение между браузером и сервером все еще работает и вызывает его сбой.

Просматривая журналы, можно сделать несколько попыток ПОЛУЧИТЬ одно и то же изображение с помощью обработчика, поэтому создается впечатление, что браузер повторяет попытку, так как считает, что не смог выполнить запрос.

Могу ли я внести какие-либо изменения в обработчик (или код клиента), чтобы браузер не продолжал запрашивать изображения после закрытия окна, или это запутанная сложность IE? Safari, Firefox и Chrome прекрасно справляются с этим типом поведения.

Примечание Алоса: страница, отображающая изображения, имеет панель обновления вокруг сетки - но я не думаю, что это связано.

Response.Clear();
Response.ContentType = "image/jpeg";
System.Drawing.Image returnImage = System.Drawing.Image.FromFile(completeImageFilePath);
using (MemoryStream stream = new MemoryStream())
{
    returnImage.Save(stream, ImageFormat.Jpeg);
    stream.WriteTo(Response.OutputStream);
}
returnImage.Dispose();
if (Response.IsClientConnected)
{
    Response.Flush();
}
Response.End();

1 ответ

Решение

Вы пытались обернуть использование вокруг returnImage "гарантировать", что.dispose() вызывается?

Response.Clear();
Response.ContentType = "image/jpeg";
using (System.Drawing.Image returnImage = System.Drawing.Image.FromFile(completeImageFilePath))
{
    using (MemoryStream stream = new MemoryStream())
    {
        returnImage.Save(stream, ImageFormat.Jpeg);
        stream.WriteTo(Response.OutputStream);
    }
}
if (Response.IsClientConnected)
{
    Response.Flush();
}
Response.End();
Другие вопросы по тегам