この質問はこれに関連しています: Cannot render image to HttpContext.Response.OutputStream。重複ではありません。
PNG を Response.OutputStream に保存しようとすると、ローカルの開発環境と運用環境の間で一貫性のない動作が発生します。つまり、私が最初に使用していたコードは、ローカルでは正常に動作しましたが、運用サーバーでは失敗しました。
ローカルで動作する元のコードは次のとおりです。
using (Bitmap bmp = challenge.RenderImage()) {
bmp.Save(context.Response.OutputStream, ImageFormat.Png);
}
ローカルで作業しているにもかかわらず、それを本番サーバーにデプロイすると、アプリケーション エラーが発生しました。
GDI+ で一般的なエラーが発生しました。
掘り下げた後、問題は「 PNG画像を保存するにはシーク可能なストリームが必要である」という事実にあると判断しました。' - 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);
}
}
私が知りたいのは、元のコードがローカルでは問題なく動作したのに、運用サーバーでは失敗した理由です。コードの失敗の背後にある理由は、私には非常に白黒に聞こえるので、環境固有の不整合が存在する理由がまったくわかりません。