2012-10-08 10 views
5

Abbiamo un ashx gestore immagine che ha eseguito abbastanza bene nel corso degli ultimi anni, ma abbiamo recentemente notato alcuni comportamenti intermittente strano IE8 e IE9. Abbiamo una pagina della galleria che chiama il gestore di immagini più volte come parte dell'attributo src di un'immagine, questa pagina è aperta in una finestra pop-up.Più chiamate handler immagine causando IE da appendere in finestra pop-up

La pagina funziona correttamente quando, ma quando la finestra viene aperta e chiusa in rapida successione (prima che tutte le immagini sulla pagina abbiano completato il caricamento), il browser si blocca e successivamente deve essere riavviato.

Di seguito è riportato un esempio del nostro codice di gestione immagine, ho il sospetto che la richiesta dell'immagine non stia 'terminando' quando la finestra è chiusa e la connessione tra il browser e il server è ancora in esecuzione e la causa fare un incidente.

Guardando i log ci sono più tentativi per ottenere la stessa immagine tramite il gestore di così sembra che il browser è riprovare come si pensa che non è riuscito a completare la richiesta.

Ci sono delle modifiche che posso apportare al gestore (o al codice client) per garantire che il browser non continui a richiedere le immagini dopo che la finestra è chiusa o si tratta di un'intricata complessità di IE? Safari, Firefox e Chrome gestiscono bene questo tipo di comportamento.

Alos note: la pagina che visualizza le immagini ha un riquadro di aggiornamento attorno alla griglia, ma non penso che questo sia correlato.

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

risposta

1

Hai provato avvolgendo un utilizzando intorno returnImage per "assicurare" che .Dispose() si chiama?

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 Buona chiamata sulla frase _using_ per l'immagine di ritorno, ho apportato tale modifica ma il problema si verifica ancora. Sto ancora scavando per vedere se riesco a rintracciare ulteriori informazioni. Grazie. – Mitul

+0

Hai provato a eseguire il violinista allo stesso tempo e guardando i dati grezzi di richiesta/risposta, potresti far luce su ciò che sta realmente accadendo? – bUKaneer

+0

Usando Fiddler per profilare l'ultima richiesta prima che si blocchi è un POST all'interno della finestra popup, la richiesta corrisponde alle precedenti richieste POST che completano con successo. Ora sto pensando che sia qualcosa a che fare con la gestione della memoria di IE o il fatto che non è molto bravo a gestire richieste multiple veloci tra finestre pop-up. Sto ancora scavando ... – Mitul