1

我已经在我的 Web 应用程序中开发了图表渲染功能,并设置了以下设置以将图表图像存储在临时文件夹中,如下所示

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

当我们只在一个实例中测试它时它会很好用,但是当我们制作一个以上的 web 角色实例然后在一些不渲染一些图表时,我认为这是多个服务器堆栈(多个实例)的问题。

多实例的解决方案是什么?

4

2 回答 2

1

目前尚不完全清楚您的问题是什么,但我认为您的图表组件正在生成一个文件,并且您正尝试在后续请求中显示该文件中的渲染图表。

问题很可能是您已经在一台服务器上生成它并试图从另一台服务器上显示它,并且它不会存在于该计算机的本地磁盘上。

理想情况下,更改您的实现以生成图表并将其存储在 Blob 存储中。您可以使用 Azure 驱动器模拟 Blob 存储中的驱动器分区,这可能避免更改代码的需要,但您需要记住,一次只有一个 VM 实例可以对 Azure 驱动器具有写访问权限,因此您首先需要仔细考虑哪个实例将创建图表。也许在角色启动时,您可以尝试安装 Azure 驱动器以进行写入访问,如果成功,则生成图表。然后,它可用于已安装具有读取访问权限的同一 Azure 驱动器的其他 VM。

于 2011-12-22T08:06:50.707 回答
1

您是自己开发carting,还是使用ASP.NET 图表控件?如果你有自己的,那么你就有成功的机会。在选项中我看到Storage=file。还有什么其他选择?

为 Windows Azure 开发您的方法应该是使用BlobStorage。这样,您可以更改图表控件以将临时图像文件存储到Blob中。此外,如果您可以完全控制用户控件,则可以将其写入 blob,并在 blob 本身中呈现图像的路径。您可以将您自己的域(命名为 images.mysite.com)指向 Azure Blob 存储,然后让用户控件将该 URL 直接呈现给客户端(即 http://images.mysite.com/tempcharts/[guid]。 .png)。

编辑

在明确使用 ASP.NET Chart 控件后,这里有两个解决方案可以在 Windows Azure 中成功运行 ASP.NET Chart 控件:

  1. 按照此博客文章更改配置。
  2. 为图表实现您自己的 HttpHandler
于 2011-12-22T08:08:51.423 回答