我在我这边创建了一个测试样本,我发现用于为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 Application 项目并将为 LiveChart 生成图像的代码放入 Bot Application 中(如果可能,您可以重新创建一个新的 Bot Application 并测试以下代码以检查它是否适合您)
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);
}
注意:在我的测试中,我IMG
通过 Kudu 控制台手动创建文件夹,而不是在代码中创建它。
在Web Chat中测试并发送消息给Bot,然后检查站点文件夹,可以发现图像chart.png
是通过Kudu控制台生成的

图表.png

此外,我使用以下测试代码将图像作为附件发送给客户端,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);
