这个问题与此有关:Cannot render image to HttpContext.Response.OutputStream。这不是重复。
尝试将PNG保存到Response.OutputStream时,我遇到本地开发环境和生产环境之间的不一致行为。也就是说,我最初使用的代码在本地工作正常,但在生产服务器上失败了。
以下是本地工作的原始代码:
using (Bitmap bmp = challenge.RenderImage()) {
bmp.Save(context.Response.OutputStream, ImageFormat.Png);
}
尽管在本地工作,当我在生产服务器上部署它时,我收到了一个应用程序错误:
GDI +中发生了一般性错误。
经过一番挖掘后,我确定问题出现在'Saving a PNG image requires a seekable stream.'这一事实中 - Response.OutputStream不是。首先将Bitmap写入System.IO.MemoryStream,然后再写入Response.OutputStream,可以轻松缓解此问题。
using (Bitmap bmp = challenge.RenderImage()) {
using(MemoryStream ms = new MemoryStream()) {
bmp.Save(ms, ImageFormat.Png);
ms.WriteTo(context.Response.OutputStream);
}
}
我很想知道为什么原始代码在本地工作正常,但在生产服务器上失败了?代码失败的原因对我来说听起来很黑白,所以我不明白为什么环境特定的不一致可能存在。
答案 0 :(得分:0)
从理论上讲,你可以实现自己的可搜索流,并将其作为过滤器添加到你的Response.Filter属性上,所以也许Cassini正在做类似的事情。这是一个连接您自己的流的示例:http://www.ericis.com/2007/6/21/Obtaining%20ResponseOutputStreamLength