本文档描述了如何让使用了 XtraReports 的 Web 控件 的 Web 应用程序,在群集 Web 环境 (也叫做 Web 场或 Web 园) 中正确工作。
Web 场和 Web 园技术允许在几个 Web 服务器 (Web 场) 上运行 Web 应用程序,或者在相同的服务器但在不同的进程中、每个进程都在特有的处理器上被执行 (Web 园)。 这是由 部署 Web 应用程序的服务器主机的 Internet 信息服务(IIS) 设置规定的。
通过使用群集环境,可以较大地提升大型 Web 应用程序的性能。 但是,当报表被生成、打印或导出时,这要求 XtraReports 在多个进程/服务器之间共享数据。
为了调整 Web 应用程序,以便于在 Web 场 和 Web 园 中正确地操作,ReportViewer 控件推出了 FileStore 设计时刻属性。
FileStore 属性提供了下列设置:
名称 |
说明 |
---|---|
Directory | 指定 XtraReports 在报表文档生成期间可以存储临时文件的目录路径。 注意,可以设置为绝对路径或相对路径。
默认设置为 ~/App_Data/XtraReports/FileStore。 |
KeepInterval | 指定在创建临时文件之后存储的时间间隔 (毫秒)。
默认设置为 120000。 |
CheckInterval | 对于生命周期大于 KeepInterval 的应被删除的文件,指定两次连续的 Directory 检测之间的时间间隔。
默认设置为 60000。 |
如果这些属性被设置为默认值,那么它们不被序列到 Web.config 文件中。 因此,对于项目中的任意 ReportViewer 控件,如果这些属性的某些或全部被设置为非默认值,那么就被添加到 Web.config 文件的 appSettings 段。
Web.config |
---|
<appSettings> <add key="XtraReportsFileStore-Directory" value="~/MyFileStore" /> <add key="XtraReportsFileStore-CheckInterval" value="100000" /> <add key="XtraReportsFileStore-KeepInterval" value="200000" /> </appSettings> |
注意 |
---|
ReportViewer.FileStore 属性仅在 Visual Studio 设计时刻可用。 因此,不能通过代码设置它,而可以人工把这些设置添加到 Web.config 文件的 appSettings 段。 |
重要:
在群集环境中,对于由 FileStore.Directory 属性 (或 XtraReportsFileStore-Directory 键) 指定的目录,应该把读写权限授予 ASP.NET 工作进程。 此进程的用户在 IIS 5.0 (Windows XP) 中被称为 ASPNET,在 IIS 6.0 (Windows Server 2003) 和 IIS 7.0 (Windows Vista) 或更高版本中,则被称为 NETWORK_SERVICE。 当在 Web 园和 Web 场中使用此目录时,有一些特殊事项:
- Web 园
自然地,需要只把 "~/App_Data/" 目录的读/写权限给予 ASP.NET 工作进程 (在没有修改 FileStore.Directory 属性的默认值的情况下)。 因此,XtraReports 将在需要时创建 "~/App_Data/XtraReports/FileStore" 目录。 但是,如果不想让 ASP.NET 工作进程拥有读/写访问整个 "~/App_Data/" 目录的权限,那么可以人工创建文件存储的目录 (例如 "~/App_Data/XtraReports/FileStore"),并只对此目录给予读/写权限。 - Web 场
在 Web 场中有多个服务器的情况下,需要在一个服务器上创建 FileStore 的目录,此目录可以被 Web 场中的其他服务器访问。 因此,首先需要在共享服务器上创建一个共享目录,然后把读/写权限给予 Web 场中所有 Web 服务器的 ASP.NET 工作进程。
注意 |
---|
注意,如果通过 FileStore.Directory 属性 (或 XtraReportsFileStore-Directory 键) 指定的路径不能被 XtraReports 找到,或者 ASP.NET 工作进程没有成功把临时数据写入此路径,那么 XtraReports 尝试使用由 System.Web.HttpRuntime.CodegenDir 属性返回的路径来代替。 在大部分情形中,这种方法工作正常。 但是,在 中度信任环境 中则拒绝访问此路径。 |