如何在Azure上托管的WebAPI中使用PresentationCore?

时间:2017-12-15 16:11:17

标签: wpf azure

我开发了一个“简单”的测试用例:

[HttpPost]
[Route("GetImage")]
public HttpResponseMessage GetImage()
{
    try
    {
        int bmpX = 50;
        int bmpY = 50;
        DrawingVisual drawingVisual = new DrawingVisual();
        var dc = drawingVisual.RenderOpen();
        dc.DrawRectangle(Brushes.Green, new Pen(Brushes.Green, 3), new System.Windows.Rect(0, 0, bmpX, bmpY));
        dc.DrawLine(new Pen(Brushes.Red, 2.0), new System.Windows.Point(0, 0), new System.Windows.Point(bmpX, bmpY));
        dc.DrawLine(new Pen(Brushes.Red, 2.0), new System.Windows.Point(0, bmpY), new System.Windows.Point(bmpX, 0));
        dc.Close();
        var bmp = new RenderTargetBitmap(bmpX, bmpY, 96, 96, PixelFormats.Pbgra32);
        bmp.Render(drawingVisual);
        var encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bmp));
        MemoryStream memoryStream = new MemoryStream();
        encoder.Save(memoryStream);
        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
        httpResponseMessage.Content = new ByteArrayContent(memoryStream.ToArray());
        httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
        httpResponseMessage.StatusCode = HttpStatusCode.OK;
        return httpResponseMessage;
    }
    catch (Exception ex)
    {
        var message = Request.CreateResponse(HttpStatusCode.Created, ex.ToString());
        return message;
    }
}

这是我的ASP.Net WebAPI项目中的一个函数,作为Controller的一部分(如果发生了ValuesController,那么将它添加到默认项目应该可以很容易地重现问题)。 如果我将其部署到Azure并在本地运行,然后从Fiddler调用两者,本地工作按预期工作并在绿色背景上返回一个红色X,但Azure返回一个空白图像。

如果我使用GDI(System.Drawing.Bitmap),那么即使从Azure也可以正常工作。不幸的是,这不是解决方案;我正在将已经编写的应用程序从桌面移植到Azure API服务,并且PresentationCore代码非常广泛,转换为GDI需要很长时间。

编辑:如果有人有我可以选择的工作Azure / Web API / PresentationCore应用程序,那可能会非常有帮助。

0 个答案:

没有答案