InfoPath Forms Services 最佳做法

建议您在管理 InfoPath Forms Services 环境时遵循这些最佳做法。

Windows SharePoint Services 文档库中的文档限制为 2,000 个

如果一个表单模板的填写及提交总次数超过 2,000 次,则您应在表单模板中编写代码以使用 Web 服务提交给数据库,或者创建一个自定义提交函数以将表单放入多个库中。这是因为 Windows SharePoint Services 3.0 的文档库中存在容量限制,如果库中存在的文档数多于 2,000,则可能会导致其性能下降。

如果您认为表单模板的提交次数可能会超过 2,000 次,一开始就应对表单进行编程以使用另一种提交方法,这样会比在表单模板出现问题后再纠正问题更容易一些,尤其是在可公共访问的网站能够使用该表单模板的情况下。

当为 InfoPath Forms Services 配置会话状态时使用表单视图

您可以将 InfoPath Forms Services 配置为使用会话状态服务(默认选项)或表单视图,以控制如何管理用户会话。当将 InfoPath Forms Services 配置为使用会话状态服务时,所有浏览器会话都会保留在一个 SQL Server 数据库中,该数据库对应于与承载表单模板的 Web 应用程序关联的共享服务提供程序 (SSP)。这种方案虽然使用的网络带宽很少,但是对运行 SQL Server 的计算机的性能影响会日益加剧。当您使用表单视图时,会话会保留在客户端浏览器中,且在发往服务器的每个回发中均会包括所有会话数据(最多 40 KB 的会话数据)。与使用会话状态相比,这种方案使用更多的带宽,但是不会影响运行 SQL Server 的计算机。在会话数据的大小达到 40 KB 之后,会话会自动转换为会话状态管理。

我们建议在具有较小用户组的环境中使用表单视图,因为它可减少对 SQL Server 的影响。如果您的 InfoPath Forms Services 部署将拥有很多用户,特别是在许多高使用率的表单模板的会话数据低于 40 KB 时,会话状态可能是较好的选择。当使用表单视图时,如果担心网络性能可能受到负面影响,则可以监控由包含 40 KB 或更少数据的浏览器会话所使用的带宽。

不建议在前端 Web 服务器上运行 SQL Server

如果您在 Office SharePoint Server 前端 Web 服务器(例如在单台服务器评估部署中)上运行 SQL Server,则 ASP.NET 缓存将会在比 SQL Server 低的阈值处释放系统内存,这样可能导致 InfoPath Forms Services 内存匮乏。

ASP.NET 采用这样一种策略:将最大 Internet Information Services (IIS) 内存使用量设定为 800 MB 和可用物理 RAM 的 60% 这两个值中的较小值。这些设置可以在 IIS 管理器中进行配置。ASP.NET 不仅监视 w3wp.exe 进程使用物理 RAM 的情况,还监视整个系统对内存的使用情况。当调配使用的服务器物理内存达到 80% 时,ASP.NET 将开始定期释放 5% 的最早和最低优先级的缓存。当调配使用的物理内存达到 85%,ASP.NET 将定期释放 50% 的缓存。当达到 90% 或更多时,ASP.NET 将强行调整缓存并针对最大项数设置一个较低的限制,该设置将保持有效,直到 ASP.NET 重新评估服务器上的内存压力并提高阈值。

默认情况下,SQL Server 的内存使用量阈值比 ASP.NET 缓存要大。在这种情况下,SQL Server 从不释放内存,因为在达到 SQL Server 阈值之前 ASP.NET 缓存已经释放了内存。这种情况下会导致 InfoPath Forms Services 吞吐量减少,从而对性能产生后续的影响。

若要减轻此问题,当在安装了 Office SharePoint Server 的同一台计算机上安装 SQL Server 时,您应手动配置 SQL Server 内存限制。有关调整 SQL Server 内存设置的详细信息,请参阅 Microsoft 网站上的文章服务器内存选项 (https://msdn2.microsoft.com/zh-cn/library/aa196734(en-us).aspx)。

匿名访问表单的最佳做法

当将表单部署到向匿名用户公开的位置时(例如部署到 Internet 网页上的公用 SharePoint 文档库或嵌入的表单),请确保您的表单的完整性。为了降低表单用法不正确、拒绝服务 (DoS) 攻击和潜在性能问题的风险,您应执行几个额外的步骤。

  • 确保脚本或其他自动化进程无法访问表单模板。实现此目的的一个方法是强制提交表单模板的用户输入无法由脚本或自动化过程“读取”的标识代码(如图像中显示的一个简短的字母数字字符串)。

  • 包含敏感信息(如身份验证信息、服务器或数据库名称或者专有代码)的表单模板应永远不对匿名用户公开。

  • 不应将包含电子邮件提交数据连接的表单模板部署到可以匿名方式访问的服务器,因为提交表单时生成的电子邮件将在主题行中显示“由匿名用户发送”。

  • 如果表单模板中包含的代码或功能可以调用服务器上的进程,则应慎重评估和测试表单模板,以确保在使表单模板可供匿名用户访问之后不会危害安全性。

  • 为防止用户提交多份表单,可以考虑加入一段代码,以跟踪提交表单的每个用户的 IP 地址并防止从同一个 IP 地址重复进行提交。

  • 通过启用保护以防止更改表单模板来保护表单模板的完整性。