如果 RenderType 属性设置为 ImageTag,则图表控件会将呈现的图表图像以文件形式保存在内存或磁盘中(有关更多信息,请参见图表图像呈现)。可以指定图表控件管理图像文件的方式。为此,请使用 ImageStorageMode 属性。
在 ImageStorageMode 属性中,可选择使用图表 HTTP 处理程序管理图像文件或手动管理它们。
使用图表 HTTP 处理程序
默认情况下,ImageStorageMode 属性设置为 UseHttpHandler。这将使图表控件使用 Web.config 文件中注册的 ChartHttpHandler 来管理呈现的图表图像。
使用图表 HTTP 处理程序可以:
防止在服务器群集或多进程站点中出现文件覆盖冲突。
通过阻止用户下载为其他用户呈现的图表图像保护所呈现图表图像的安全。
通过将图像文件存储在内存或其他存储选项(例如 Microsoft SQL Server)中减少磁盘操作。
用法
当从工具箱中将图表控件拖动到 ASP.NET 页的设计图面上时,ChartHttpHandler 将在 Web.config 文件中自动注册为“ChartImageHandler”。可以在 <appSettings> 元素中配置 ChartImageHandler 的行为。下面提供了相应的代码部分及自动生成的设置:
<appSettings>
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>
使用 value 特性中的参数配置图表 HTTP 处理程序。有关每个参数的说明,请参见下表。
参数 |
说明 |
---|---|
storage |
存储模式。有三个选项可供选择:
|
url |
图像存储位置的相对 URL。如果指定 dir 参数,将使用它代替 url。 默认值为“~/”。 |
dir |
图像存储位置的绝对目录路径。它可以是本地路径或网络路径。在服务器群集环境中,使用网络路径可将临时文件存储在一个共享位置。为了防止不当地覆盖文件,将为每个临时文件分配一个唯一的计算机 ID。 |
timeout |
所呈现图表图像的超时时间(以秒为单位)。图像的超时时间结束后,它可能会被新图像替换。 默认值为 30。 |
handler |
一个自定义 IChartStorageHandler 实现。应将该值格式化为完全限定的程序集名称。例如:MyNamespace.MyClass.MyHandler。 |
privateImages |
隐私保护。若设置为 true,在强制使用以下某些类型的标识时,所生成的图像仅可供其所有者下载:
默认值为 true。 |
deleteAfterServicing |
从客户端成功下载图像后是否应将其删除。 默认值为 true。 |
webDevServerUseConfigSettings |
在使用 Visual Studio 开发服务器以完全信任级别运行应用程序时,是否将所呈现的图表图像保存在内存中。 默认值为 true。这可能表示当从 Visual Studio 运行 ASP.NET 应用程序时,Web.config 文件中的设置不起作用。 |
不同信任级别的配置设置
下面列出了各个信任级别以及它们如何影响 Web.config 文件中的配置设置。
完全信任:所有配置变体均适用。
高度信任:检测不到 ASP.NET 开发服务器。因此,webDevServerUseConfigSettings 不起作用。
中等信任:与高度信任相同。
低信任:除禁止文件访问外其他与高度信任相同。storage 参数必须设置为 session 或 memory。
最小信任:除图表 HTTP 处理程序检测失败外其他与低信任相同。这表示 Web.config 文件中 ChartImageHandler 项是必选项。
手动管理图像
若要手动管理所呈现的图表图像,请将 ImageStorageMode 属性设置为 UseImageLocation,然后将 ImageLocation 属性设置为绝对路径或相对路径。
提示
在此模式下,每个图表控件独立地管理自己的一个图像存储。
ImageLocation 属性可以包含路径以及特定的关键字。例如,“~/Temp/ChartPic_#SEQ(300,5)”。此字符串由三个元素组成:
绝对或相对目录路径。例如,“~/Temp/”。
文件名或所有图像文件名的前导文本。例如,“ChartPicture_”。
关键字。例如,“#SEQ(300, 5)”。
不带关键字的 ImageLocation
如果指定不带关键字的图像位置,图表控件会将单个文件用于所有图像呈现。生成的文件路径包含带有指定前导文本的目录和在 ImageType 属性中指定的文件扩展名。例如,“~/Temp/ChartPicture_.png”。
请注意,如果图表数据或图表外观频繁更改,图像文件可能在发送到客户端之前被覆盖,这会导致客户端收到不正确的图像。若要避免这一问题,请使用一个关键字。
带关键字的 ImageLocation
可以在 ImageLocation 属性中插入三个不同的关键字。
关键字 |
说明 |
---|---|
#UID |
为每个呈现的图表图像生成唯一的标识符。例如,“~/Temp/ChartPicture#UID”。 使用此关键字可确保服务器使用正确的呈现图像答复每个页请求。必须手动删除旧文件。否则,文件数目将无限增加。 |
#SEQ(maxFiles,minutes) |
生成文件序列号,直到达到 maxFiles 所定义的数目,此后将重新开始生成序列并替换现有序列中的第一个文件。例如,“Picture_#SEQ(300,5)”生成下面的文件名(假定 ImageType 设置为 Png):Picture_000001.jpg、Picture_000002.jpg... minutes 参数指定序列中每个文件的超时时间。但是,它不能保证文件名在指定时段内的有效性。如果文件在其超时时间结束前被回收,会针对该文件在应用程序事件日志中插入一则警告消息。应将 maxFile 参数设置为一个大小合理的数,避免不恰当地覆盖图像文件。 |
#NOGUIDPARAM |
删除图像文件 URL 中的 GUID 字符串。例如,“Picture_#SEQ(300,5)#NOGUIDPARAM”。 默认情况下,图表控件会将一个 GUID 字符串添加到图像 URL。 |
图像类型和压缩
若要在将图表图像保存到临时文件中时指定图像类型,请使用图表控件的 ImageType 属性。如果将此属性设置为 Jpeg,则还可以在图表控件的 Compression 属性中指定 JPEG 压缩。