5

ここ数年かなりうまく機能しているashxイメージ ハンドラーがありますが、最近、 IE8IE9で奇妙な断続的な動作が見られることに気付きました。画像の 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();
4

1 に答える 1

1

returnImage.dispose()が呼び出されることを「保証」するために、usingaroundをラップしてみましたか?

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();
于 2012-10-09T14:14:30.747 に答える