Live Chart未在Azure上呈现

问题描述 投票:0回答:1

我已经按照下面提到的链接在我的应用程序中生成实时图形的图像,它在我的本地机器上工作正常但是当我在azure上部署它时它没有做任何事情。我得到一个不包含图形的空图像我已经检查了日志没有错误或异常被抛出。它似乎不适用于Azure。

https://github.com/beto-rodriguez/Live-Charts/blob/develop/Examples/Wpf/CartesianChart/Chart%20to%20Image/ChartToImageSample.xaml.cs

我现在可以通过评论以下代码行来重现我当地环境中的问题:

myChart.Update(true,true); //强制图表重绘 viewbox.UpdateLayout();

似乎无法在Azure上更新控件。我还尝试通过“Dispatcher”更新控件,但仍然在Azure上遇到相同的问题。

有人能帮帮我吗?

c# azure botframework livecharts
1个回答
1
投票

我在我身边创建了一个测试样本,我发现用于为LiveChart生成图像的代码可以在Azure上的Bot应用程序中运行。

安装在LiveCharts和LiveCharts.Wpf NuGet之后

<package id="LiveCharts" version="0.9.7" targetFramework="net46" />
<package id="LiveCharts.Wpf" version="0.9.7" targetFramework="net46" />

创建Bot应用程序项目并将生成图像的生成代码放在Bot应用程序中(如果可能,您可以重新创建一个新的Bot应用程序并测试以下代码以检查它是否适合您)

string sfp = "";

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
    var activity = await result as Activity;

    // calculate something for us to return
    int length = (activity.Text ?? string.Empty).Length;
    sfp = System.Web.HttpContext.Current.Server.MapPath($"~/IMG/chart.png");

    Thread STAThread = new Thread(() =>
    {
        var myChart = new LiveCharts.Wpf.CartesianChart
        {
            DisableAnimations = true,
            Width = 600,
            Height = 200,
            Series = new SeriesCollection
            {
                new LineSeries
                {
                    Values = new ChartValues<double> {1, 6, 7, 2, 9, 3, 6, 5}
                }
            }
        };

        var viewbox = new System.Windows.Controls.Viewbox();
        viewbox.Child = myChart;
        viewbox.Measure(myChart.RenderSize);
        viewbox.Arrange(new System.Windows.Rect(new Point(0, 0), myChart.RenderSize));
        myChart.Update(true, true); //force chart redraw
        viewbox.UpdateLayout();

        SaveToPng(myChart, "chart.png");
    });

    STAThread.SetApartmentState(ApartmentState.STA);

    STAThread.Start();

    STAThread.Join();

    await context.PostAsync($"You sent {activity.Text} which was {length} characters1");

    context.Wait(MessageReceivedAsync);
}

注意:在我的测试中,我通过Kudu控制台手动创建IMG文件夹,而不是在代码中创建它。

在Web Chat中测试并向Bot发送消息,然后检查站点文件夹,可以找到图像chart.png是通过Kudu Console生成的

enter image description here

chart.png

enter image description here

此外,我使用以下测试代码将图像作为附件发送到客户端,chart.png可以在客户端呈现。

var replymes = context.MakeMessage();

replymes.Attachments.Add(new Attachment()
{
    Name = "chart.png",
    ContentType = "image/png",
    ContentUrl = "https://xxxx.azurewebsites.net/IMG/chart.png"
});

await context.PostAsync(replymes);

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.