我有一个工作的 WCF REST 服务 (.NET 4.0) 用于下游图像。但是,当此服务发布到 Azure 网站 (.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;
}
到目前为止,我已经尝试过:
- 删除所有“使用”-> 无效(但可能存在内存泄漏)
- 将 MemoryStream 包装在 BufferedStream -> 不
- 删除 Seek() -> 没有图像(如预期的那样)
我做错了什么?它适用于不同的项目(虽然不是 Azure)。.NET 4.0 与 4.5 的兼容性是罪魁祸首吗?