質問者
グラフ表示

質問
すべての返信
-
> Chartを利用かな・・・。
Chart を知っているなら自分で試して、自分で Chart が目的に合うか確認してはいかがですか?
質問者さんの目的に合えばここで聞く必要はないし、合わなければこれこれこういうところが目的に合わない等々書いてもらえると、もっと具体的に役に立ちそうな情報が集まり易いと思われます。
Sample がありますので使えそうなものを探してみては? サンプルの入手方法・設定方法は以下の記事を見てください。
Chart Samples
http://surferonwww.info/BlogEngine/post/2016/02/14/chart-samples.aspxAzure Web App には制約があるそうですが(GDI が使えないなど・・・詳しくは以下の記事参照)、それも実際に試せばわかるはず。
Azure Web App sandbox
https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox -
> Azureでは、Chartコントロールは使用できないですね。
そういう話は少なくとも自分は聞いたことがないです。(デフォルトの temporary フォルダのアクセス権の問題というのは聞いたことがありますが、それは Azure で Chart は使えないということではないです。もっとも、自分は Azure Web App は使ったことがないので、自分が知らないだけという可能性は否定できませんが)
Microsoft の公式文書もしくはそれに類する信頼できそうな文書に「使えない」という記述があるなど、情報をお持ちでしたら紹介していただけると幸いです。
-
返答をありがとうございます。
Azure Web App を使ったことがなくて、実際にできるという確証を示せない自分が言っても説得力はないですけど、興味があれば以下を読んでいただけると幸いです。
> C# MVCでSystem.Web.DataVisualizationを利用して実現できることをトライアル環境で確認できました。
ご存知かもしれませんが、Chart コントロールは Web サーバー側で画像(デフォルトで .png 形式)を生成して、Web サーバーのどこか(デフォルトで c:\TempImageFiles\ フォルダ。メモリ、Session も可)に一時的に保存し、img 要素の src 属性に取得先を指定してブラウザに送信するという仕組みになっています。詳しくは以下の記事を見てください。
Chart
http://surferonwww.info/BlogEngine/post/2010/11/27/Chart.aspxなので、上記の質問者さんのレスの「System.Web.DataVisualizationを利用して」というのが Web Forms アプリ用の Chart コントロールのことであれば、Web サーバーで Chart コントロールが画像を生成できたということは間違いないはずです。
そして、「トライアル環境」というのは Azure Web App 環境ということであれば、少なくとも Chart コントロールによる画像の生成は、上の私のレスで紹介した記事の Azure Web App 環境の制約(GDI が使えないなど)には引っかかってないということになるはずです。
上記の想像が間違っていなければ、Web Forms でうまくいかなかったというのは、Azure Web App の制約ではなくて、何か別の理由があったのではないかと思われます。
-
【追伸】
一つ気が付いたことがあるので以下に書いておきます。
> C# MVCでSystem.Web.DataVisualizationを利用して実現
上記のところは具体的にどのようなコードを書いたのですか?
もし、以下の記事のチェックマークがついている回答「Generating the Image from a Controller」のようにしたとすると、IIS のワーカープロセスのアクセス権の問題が避けられるので、MVC ではうまくいったという話ではないかと思います。
New asp.net charting controls - will they work with MVC (eventually)?
https://stackoverflow.com/questions/319835/new-asp-net-charting-controls-will-they-work-with-mvc-eventually#320891Web Forms アプリで Chart を使用する場合、デフォルトの設定では c:\TempImageFiles フォルダを Chart が生成した画像ファイルの一時保存場所に使います。なので、IIS のワーカープロセスが c:\TempImageFiles フォルダに対する書き込み・読み出し権限を持っていなければなりません。
一方、上の stackoverflow の記事のコードのように、MemoryStream に画像データを保存してそれから直接ブラウザにダウンロードさせるという形になっていると、ワーカープロセスのアクセス権の問題は発生しません。
Web Forms アプリでも、開発環境でならうまくいくが Azure Web App ではダメということですと、ワーカープロセスのアクセス権が違うからでしょう。
開発環境では IIS Express 上で Web アプリを動かしていると思いますが、その場合ワーカープロセスは質問者さんが Visual Studio を動かしているアカウントになっています。多分、そのアカウントは管理者権限を持っているので c:\TempImageFiles フォルダに対する権限を持っていると思います。
しかし、Azure Web App のワーカープロセスは c:\TempImageFiles フォルダに対するアクセス権は持っていないでしょうし、与えるのも無理でしょうから、web.config の設定でファイルの一時保存場所を変更して対応することになります。
上で紹介した記事にも書きましたが、Web Froms アプリでは web.config の設定はデフォルトでは以下のようになっているはずです。
<appSettings> <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" /> </appSettings>
この value の設定を、ワーカープロセスのアクセス権の問題を解決できるように変えることで対処できると思います。value の設定について、詳しくは以下の記事を見てください。
イメージ ファイルの管理
https://msdn.microsoft.com/ja-jp/library/dd456629(v=vs.120).aspx