2012-10-08 43 views
5

我們已經在過去幾年進行得相當好了ASHX圖像處理程序掛起,但我們最近注意到一些奇怪的間歇性行爲IE8IE9。我們有一個圖庫頁面,多次調用圖像處理程序作爲圖像的src屬性的一部分,此頁面在彈出窗口中打開。但被打開,快速連續關閉時,當窗口多個圖像處理程序調用IE造成在彈出的窗口中

頁工作正常(所有的頁面上的圖像是否已完成加載之前),它會導致瀏覽器掛起,隨後必須重新啓動。

以下是我們的圖像處理程序代碼的一個示例,我懷疑當窗口關閉時瀏覽器和服務器之間的連接仍在運行並導致它對圖像的請求不「結束」墜毀。

看着日誌有多次嘗試通過處理程序獲取相同的圖像,所以它看起來像瀏覽器重試,因爲它認爲它未能完成請求。

是否有任何變化,我可以作出的處理程序(或客戶端代碼),以確保瀏覽器在窗口關閉後不會繼續請求圖像,或者這是一個烤入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(); 
+0

@buUKaneer對返回圖像的_using_語句很好的調用,我已經做了這個改變,但問題仍然存在。我仍在挖掘,看看我是否可以追蹤更多信息。謝謝。 – Mitul

+0

您是否嘗試過在同一時間運行提琴手來看,在原始請求/響應數據 - 可能會揭示什麼實際發生的一些輕? – bUKaneer

+0

使用招它掛起之前簡介的最後請求是彈出窗口中的POST,請求以前POST請求其成功地完成比賽。現在,我想這件事情做與IE瀏覽器的內存管理或事實,它只是沒有在處理窗口彈出窗口之間的快速多次請求非常好。仍然在挖掘... – Mitul