2012-10-08 29 views
5

emergente Tenemos un ashx manejador de imagen que ha realizado bastante bien en los últimos años, pero recientemente he notado un comportamiento extraño en intermitente IE8 yIE9. Tenemos una página de galería que llama al manejador de imágenes varias veces como parte del atributo src de una imagen, esta página se abre en una ventana emergente.múltiples llamadas de controlador de imagen que causan IE para colgar en la ventana

La página funciona bien cuando, pero cuando la ventana se abre y se cierra en sucesión rápida (antes de que todas las imágenes de la página hayan terminado de cargarse) hace que el navegador se cuelgue y posteriormente se debe reiniciar.

A continuación se muestra un ejemplo de nuestro controlador de imagen, tengo la sospecha de que la solicitud de la imagen no está "terminando" cuando la ventana está cerrada y la conexión entre el navegador y el servidor todavía se está ejecutando y causando chocar.

En cuanto a los registros, hay varios intentos de OBTENER la misma imagen a través del controlador para que parezca que el navegador está reintentando, ya que cree que no se pudo completar la solicitud.

¿Hay algún cambio que pueda hacer en el controlador (o el código del cliente) para garantizar que el navegador no continúe solicitando las imágenes después de que se cierre la ventana o esto es una intrincada complejidad de IE? Safari, Firefox y Chrome manejan bien este tipo de comportamiento.

Nota Alos: La página que muestra las imágenes tiene un panel de actualización alrededor de la cuadrícula, pero no creo que esto esté relacionado.

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(); 

Respuesta

1

has necesitado envolver una alrededor usando returnImage de "garantizar" que .Dispose() se llama?

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(); 
+0

@buUKaneer Buena llamada en la declaración _using_ para la imagen de retorno, he hecho ese cambio, pero el problema todavía ocurre. Todavía estoy cavando para ver si puedo rastrear más información. Gracias. – Mitul

+0

¿Ha intentado ejecutar el violinista al mismo tiempo y ver los datos de solicitud/respuesta sin procesar, podría arrojar algo de luz sobre lo que realmente está sucediendo? – bUKaneer

+0

El uso de Fiddler para perfilar la última solicitud antes de que cuelgue es una POST dentro de la ventana emergente, la solicitud coincide con las solicitudes POST anteriores que se completan satisfactoriamente. Ahora estoy pensando que tiene algo que ver con la administración de memoria de IE o con el hecho de que no es muy bueno en el manejo de múltiples solicitudes entre ventanas emergentes. Aún estoy cavando ... – Mitul

Cuestiones relacionadas