1

Web アプリケーションでチャート レンダリング機能を開発し、以下のように一時フォルダーにチャート イメージを保存するように次の設定を行いました。

<add key="ChartImageHandler" value="deleteAfterServicing=false;Storage=file;Timeout=20;URL=~/TempCharts/"/>

1 つのインスタンスのみでテストする場合は問題なく動作しますが、Web ロールの複数のインスタンスを作成し、いくつかのグラフをレンダリングしない場合、これはサーバーの複数のスタック (複数のインスタンス) の問題だと思います。

複数のインスタンスの場合、これに対する解決策は何ですか?

4

2 に答える 2

1

問題が何であるかは完全には明らかではありませんがグラフ作成コンポーネントがファイルを生成しており、後続のリクエストでそのファイルからレンダリングされたグラフを表示しようとしていると思います。

問題は、あるサーバーで生成し、別のサーバーから表示しようとしていて、そのマシンのローカルディスクに存在しないことである可能性が高いです。

理想的には、実装を変更して、グラフを生成してBlobストレージに保存します。Azure Driveを使用して、Blobストレージ内のドライブパーティションをシミュレートできます。これにより、コードを変更する必要がなくなりますが、一度に1つのVMインスタンスのみがAzure Driveへの書き込みアクセス権を持つことができるため、そもそも、どのインスタンスがチャートを作成するかを慎重に検討する必要があります。おそらくロールスタートで、書き込みアクセス用にAzureドライブをマウントし、成功した場合はグラフを生成することができます。これにより、読み取りアクセス権を持つ同じAzureドライブをマウントしている他のVMで使用できるようになります。

于 2011-12-22T08:06:50.707 に答える
1

独自にカートを開発しましたか、それとも ASP.NET チャート コントロールを使用していますか? 自分のものがあれば、成功するチャンスがあります。オプションにStorage=fileが表示されます。他のオプションは何ですか?

Windows Azure 向けに開発する場合、アプローチはBlobStorageを使用する必要があります。そうすれば、チャート コントロールを変更して、一時画像ファイルをBlobに保存できます。さらに、ユーザー コントロールを完全に制御できる場合は、それを BLOB に書き込み、BLOB 自体の画像へのパスをレンダリングすることができます。独自のドメイン (images.mysite.com という名前) を Azure Blob storageにポイントし、ユーザー コントロールがその URL をクライアントに直接レンダリングするようにすることができます (つまり、http://images.mysite.com/tempcharts/[guid] . png)。

編集

ASP.NET Chart コントロールの使用に関する明確化が行われた場合、Windows Azure で ASP.NET Chart コントロールを正常に実行するための 2 つのソリューションを以下に示します。

  1. このブログ投稿に従って構成を変更します。
  2. チャート用に独自の HttpHandler を実装します
于 2011-12-22T08:08:51.423 に答える