2017-12-20 8 views
0

私のアプリケーションではライブグラフの画像を生成するために以下のリンクをたどっていますが、ローカルマシンで正常に動作していますが、私はそれ以上のグラフを含んでいない空のイメージを取得しています。ログにエラーも例外もスローされていないことを確認しました。それはAzureで動作していないようです。私は次のコード行コメントで、今、私のローカル環境で問題を再現することができます ライブチャートはAzureでレンダリングされません

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

myChart.Updateを(真、真)。 //強制的にチャートを再描画します
viewbox.UpdateLayout();

Azureではコントロールを更新できないようです。私も "Dispatcher"を使ってコントロールを更新しようとしましたが、Azureで同じ問題が発生しました。

誰でも助けてくれますか?

+1

あなたはytouは紺碧のWebアプリケーションや紺碧のVMまたはコンテナの話アトレAzureのために配備言いますか? –

+1

私はMicrosoft Bot Framework(Web API)でこのLiveChartライブラリを使用しており、それを紺色に配置しています。 –

+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" /> 

次インストール

、あなたのボットアプリケーションプロジェクトを作成し、ボットアプリケーション可能な場合にLiveChart用画像を生成するコードを入れてください新しい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); 
} 

注:私のテストでは、IMGフォルダをKudu Console経由で手動で作成し、コードでは作成しません。

Webチャットで

テストやボットにメッセージを送信し、サイトフォルダを確認し、画像chart.pngKudu Consoleをchart.png

enter image description here

を介して生成されて見つけることができます

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

関連する問題