我们有一个相当复杂的 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。