【发布时间】:2011-04-24 15:11:01
【问题描述】:
这个问题与这个问题有关: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 不是。通过首先将位图写入 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);
}
}
我很想知道为什么原始代码在本地运行良好,但在生产服务器上却失败了?代码失败背后的原因对我来说听起来很黑白,所以我不明白为什么会存在特定于环境的不一致。
【问题讨论】:
-
您在本地和生产环境中使用相同的网络服务器吗?我正在思考 VS 或 Cassini 中的嵌入式服务器与 IIS 之间的区别。
-
@BurningIce 这也是我想到的第一个想法。我只在本地测试了 Cassini 中的行为,而生产环境运行的是 IIS。
-
嗯,应该很容易找到...在本地代码中放置一个调试点,并与调试器一起检查 context.Response.OutputStream 是否似乎是可搜索的。
标签: asp.net gdi+ png memorystream outputstream