关于 InfoPath Forms Services 和业务逻辑程序集

上次修改时间: 2010年7月6日

适用范围: SharePoint Server 2010

本文内容
新的托管代码对象模型
安全性和性能
关于使用和引用程序集的说明

如果自定义业务逻辑使用了 Microsoft.Office.InfoPath 命名空间提供的新托管代码对象模型的受支持的类型和成员,则它受启用浏览器功能的表单模板的支持。集成 InfoPath Designer 的 Microsoft Visual Studio Tools for Applications 开发环境支持 Visual Basic 和 Visual C # 语言。

运行 InfoPath Forms Services 的服务器不支持通过使用 Microsoft Office InfoPath 2003 Service Pack 1 引入的 Microsoft.Office.Interop.InfoPath.SemiTrust 对象模型编写的 JScript、VBScript 和托管代码。

新的托管代码对象模型

新的托管代码对象模型使用 [System.Xml.XPath.XPathNavigator] 类导航和更新 XML 数据存储,而作为 InfoPath Forms Services 构建基础的 Microsoft SharePoint Foundation 技术需要 .NET Framework 2.0。有关新的托管代码对象模型和可用于 Microsoft InfoPath 2010 但不推荐使用的对象模型的详细信息,请参阅位于"InfoPath 2010 开发人员参考中的表单模板"(可通过 Microsoft Visual Studio Tools for Applications 帮助系统访问)中的"了解 InfoPath 对象模型和开发环境"主题。

有关包含在 InfoPath 和 Web 浏览器中均可使用的类型和成员的新托管代码对象模型的详细信息,请参阅一次性设计功能兼容性。可以通过编程方式确定运行时环境,以根据是在 InfoPath、桌面 Web 浏览器还是在移动浏览器中打开表单来更改自定义商业逻辑。有关如何确定运行时环境的详细信息,请参阅 Microsoft Visual Studio Tools for Applications 帮助系统中的"如何:编写确定运行时环境的条件逻辑"主题。

安全性和性能

在创建与浏览器兼容的表单模板时,默认的 InfoPath 表单代码文件将以 InfoPath.snk 强名称密钥文件签名。您可以对不同的业务逻辑程序集使用不同的强名称密钥文件。如果默认的表单代码文件或任何支持的程序集不是以强名称签名,而且包含业务逻辑程序集的表单模板得到升级,则必须回收 SharePoint 应用程序域 (AppDomain)。

InfoPath 业务逻辑程序集通过解析代码访问安全性 (CAS) 策略获得授权。服务器上的新的域信任级别概念等同于客户端上的域信任级别。SharePoint 包括三个策略文件:最小、中等和完全。InfoPath Forms Services 向业务逻辑程序集提供了相应的证据,这样这些程序集可以映射到策略文件中定义的代码组并获取正确的权限集。当业务程序集加载到 ASP.NET 应用程序域时,即将此权限集授予它;但是如果在 InfoPath 打开包含自定义逻辑程序集的表单模板,那么在大多数情况下,相同的程序集不一定会得到相同的权限集。为确保在业务逻辑程序集调用对象模型或 InfoPath Forms Services 将事件发送到业务逻辑程序时,能够在 InfoPath 和浏览器中打开表单模板,应将权限集的级别相应提高或降低至正确的级别。另外,如果一个 InfoPath 表单模板中包含多个程序集,应在同一时间加载所有程序集,以确保所有程序集获得相同的权限集。

备注

只有完全信任表单模板才能包含可在运行 InfoPath Forms Services 的服务器上动态创建程序集的代码。

必要时,运行 InfoPath Forms Services 的服务器上所有启用浏览器功能的表单模板的每个业务逻辑程序集都要加载到 SharePoint 所使用和控制的单个应用程序域。当应用程序域被回收时,除非收到重新加载请求,否则不会重新加载业务逻辑程序集。

业务逻辑程序集存储在每个前端 Web 服务器上,由使用 LoadFrom.NET Framework 类的 Assembly 方法的 InfoPath Forms Services 加载,其中包括了合并输入证据与加载器收集的证据语义,以创建用于解析策略的最终证据集。

关于使用和引用程序集的说明

  • 如果您要在多个表单模板之间共享程序集,请将共享程序集放到每个表单模板中。但是请注意,如果第二个或后续表单模板使用同一程序集,但安全级别更高或更低,那么共享程序集将继承第一个表单模板的安全级别所对应的应用程序域权限集。

  • 如果某表单包含多个自定义业务逻辑程序集,而所有表单程序集的标识与某个已经转换的表单中的程序集的标识相同,且这些程序集未执行按位比较,则该表单将无法成功转换。