画像をダウンストリームするための WCF REST サービス (.NET 4.0) が動作しています。しかし、このサービスが Azure Web サイト (.NET 4.5) に公開されると、読み込まれた画像がランダムに破損します。これはローカルでは発生せず、ドメイン内でも発生しません。
Azure では一貫性がありません。読み込まれることもあれば、読み込まれないこともあります。ここで破損を確認できます。
これは私のコードです(基本的に):
契約:
[OperationContract]
[WebGet(UriTemplate = "get?id={id}&format={format}",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare)]
Stream GetImage(String id, String format);
実装:
public Stream GetImage(String id, String format)
{
// stuff, stuff, stuff
using (Stream original = GetImageStream())
{
Stream result = CreateThumbnailStream(original, width, height);
result.Seek(0, SeekOrigin.Begin);
return result;
}
}
private Stream GetImageStream()
{
Bitmap copy = new Bitmap(Resource.SomePicture);
Stream result = new MemoryStream();
image.Save(result, ImageFormat.Png);
return result;
}
private Stream CreateThumbnailStream(Image image, Int32 width, Int32 height)
{
Image image = Image.FromStream(stream);
Image result = new Bitmap(width, height, PixelFormat.Format32bppArgb);
// shrinking routine skipped for brevity
return result;
}
これまでのところ、私はこれを試しました:
- すべての 'usings' を削除 -> 効果なし (ただし、メモリ リークの可能性あり)
- MemoryStream を BufferedStream にラップする -> いいえ
- Seek() の削除 -> 画像なし (予想どおり)
私は何を間違っていますか?さまざまなプロジェクトで機能しました (Azure ではありません)。.NET 4.0 と 4.5 の互換性が原因ですか?