我們有一個相當複雜的處理圖像的httphandler。基本上它以任何要求的大小流式傳輸圖像的任何部分。有些客戶端沒有任何問題使用這個處理程但是我們有一個位置給我們帶來了問題,現在它也給我的開發環境帶來了問題。HttpHandler響應永遠不會返回
會發生什麼情況是客戶端在某些請求中從不接收任何內容。所以請求1和2都很好,但請求3和4永不結束。
- 在調試時,我可以看到服務器已準備就緒並已完成請求。
- 客戶端上。然而其結果仍在等待(與fiddler2調試表明,有沒有接收到響應)
,我們使用以流的圖像中的代碼是
if (!context.Response.IsClientConnected)
{
imageStream.Close();
imageStream.Dispose();
return;
}
context.Response.BufferOutput = true;
context.Response.ContentType = "image/" + imageformat;
context.Response.AppendHeader("Content-Length", imageStream.Length.ToString());
if (imageStream != null && imageStream.Length > 0 && context.Response.IsClientConnected)
context.Response.BinaryWrite(imageStream.ToArray());
if (context.Response.IsClientConnected)
context.Response.Flush();
imageStream.Close();
imageStream.Dispose();
的的ImageStream是帶有圖像內容的MemoryStream。
在對response.Flush()的調用之後,我們做了一些更多的清理工作,並將總結寫入事件日誌。
我們在每次請求後都會調用GC.Collect(),因爲我們在內存中使用的對象變得非常大。我知道這不是一種好的做法,但它會給我們帶來麻煩嗎?
在IIS 5(Win XP)和IIS 6(Win 2003)都沒有返回請求的問題,我們使用.NET Framework v2。
這不是解決方案,但仍然有用! – 2008-11-11 11:54:15
但是,如果您擁有MemoryStream,則有一種更簡單的方法:MemoryStream.WriteTo(Stream) – 2008-11-11 12:37:03