【问题标题】:Multiple image handler calls causing IE to hang in pop-up window多个图像处理程序调用导致 IE 在弹出窗口中挂起
【发布时间】:2012-09-29 02:37:33
【问题描述】:

我们有一个 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();

【问题讨论】:

    标签: c# asp.net image internet-explorer ashx


    【解决方案1】:

    您是否尝试过在 returnImage 周围使用 using 来“确保”调用 .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();
    

    【讨论】:

    • @buUKaneer 很好地调用了返回图像的 using 语句,我已经进行了更改,但问题仍然存在。我仍在挖掘以查看是否可以追踪更多信息。谢谢。
    • 您是否尝试过同时运行 fiddler 并查看原始请求/响应数据 - 可能会对实际发生的情况有所了解?
    • 使用 Fiddler 分析挂起之前的最后一个请求是弹出窗口中的 POST,该请求与成功完成的先前 POST 请求匹配。我现在认为这与 IE 的内存管理有关,或者它不擅长处理窗口弹出窗口之间的快速多个请求。还在挖……
    • 我一直在阅读有关该主题的内容-您是否可以尝试将 ContentLength 标头与图像文件的大小(以字节为单位)添加到响应中-可能有助于为 IE 提供更多线索什么时候项目应该完成?真的不知道它是否会有所帮助,但要尝试另一件事?!
    • 另一件可能会产生影响的事情是将响应分块(一次发送 4069 个字节) - 可能会导致 IE 以不同方式处理它并规避问题 - 请参阅此处接受的答案stackoverflow.com/questions/2687677/…
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2022-01-13
    • 2021-03-07
    • 2018-05-10
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多