选择用于开发和托管 SharePoint 加载项的模式

SharePoint 外接程序模型引入了各种托管和开发模式。 部分模式可以相互结合使用。 例如,加载项可以将 SharePoint 承载的组件和远程承载的组件混合使用。 确定要使用的模式的最有用方法是从自己的要求、技术和目标开始,并将它们与 SharePoint 外接程序启用的选项和可能性相匹配。

选择开发模式时要注意的事项

SharePoint 外接程序扩大了使用 SharePoint 资源和服务时可以使用的可能的编程语言和技术堆栈的范围。 选项的准确范围取决于加载项的类型和选择的承载模式。 还可以将模式混合使用。

SharePoint 托管加载项

从最简单的选择入手:SharePoint 托管加载项,或其中所有组件都托管在本地或 Office 365 SharePoint 场上的加载项。 SharePoint 托管加载项安装在 SharePoint 网站(称为“主机 Web”)上。 它们的资源托管在主机 Web 的独立子网站(称为“加载项 Web”)上。 请务必了解主机 Web 与加载项 Web 的区别

图 1 展示了 SharePoint 托管加载项的基本体系结构。

图 1. SharePoint 承载的加载项的体系结构

SharePoint 托管的应用程序的组件在 SharePoint 服务器场的 appweb 上进行托管。

可以将 SharePoint 承载的加载项与具有远程承载组件的加载项结合使用,但是任何在加载项 Web 上运行的加载项或加载项的部分在加载项的承载位置、加载项获取授权的方式和加载项可使用的语言这三个关键组件方面都有以下一系列要求。

组件 SharePoint 承载的加载项的要求
外接程序组件的托管位置 在 SharePoint 场的隔离加载项域中
加载项获取授权的方式 已登录用户的权限
加载项可使用的语言 JavaScript(含 SharePoint JSOM 库)+ HTML
获取这些益处 但请考虑以下事项
重复使用常见的 SharePoint 项,如列表和 Web 部件。 您只能在加载项中使用 JavaScript,且无法使用任何服务器端代码。
创建和部署相对简单,所以适合业务规则复杂性较低的小型团队工作效率加载项和业务流程自动化。 外接程序仅具有已登录用户的授权特权。

开始创建 SharePoint 托管 SharePoint 加载项

提供商托管加载项

提供商托管 SharePoint 加载项包含在 SharePoint 场外部署和托管的组件。 此类加载项安装到主机 Web 上,但它们的远程组件却托管在另一个服务器上,此服务器不得位于 SharePoint 场中

图 2 展示了提供商托管加载项的基本体系结构。

图 2. 提供程序承载的加载项的体系结构

提供程序托管的应用程序的组件在任何 Web 服务器或托管服务上进行托管。

下表显示了在对承载位置、加载项授权和语言的要求方面,提供程序承载的加载项比 SharePoint 承载的加载项更加不固定。

组件 提供程序承载的加载项的要求
外接程序组件的托管位置 任何 Web 服务器或托管服务
加载项获取授权的方式 OAuth 或 JavaScript 跨域库
加载项可使用的语言 Web 服务器或托管服务支持的任何语言

提供程序承载的加载项与 SharePoint 网站交互,但也使用位于远程网站上的资源和服务。 在决定创建提供程序承载的加载项之前,您需要考虑以下事项。

获取这些益处 但请考虑以下事项
在 Microsoft Azure 或任何远程 Web 平台(包括非 Microsoft 平台)上托管外接程序。 你负责创建远程组件的安装、升级和卸载逻辑。
使用 SharePoint 客户端对象模型之一、JavaScript 跨域库或基于 SharePoint REST/OData 的 Web 服务 与 SharePoint 交互。 与 SharePoint 交互的每种方式都有相应的数据访问方法选项
使用以下三个授权系统之一获取对 SharePoint 数据的授权。 需要在 OAuth 和跨域库之间做出选择,以便向加载项授予对 SharePoint 的访问权限。

将托管模式与开发目标对应起来

除了考虑每个选项的技术优势和限制外,在决定承载模式时还需要考虑开发目标。 可以使用下表选出最能满足您需要的承载模式。

要求 建议的托管模式 示例
专门处理和设置新 SharePoint 实体 SharePoint 托管 包含人员选取器控件并且将有关 SharePoint 用户的信息存储在 SharePoint 列表中的加载项
使用现有 SharePoint 实体并与外部(非 SharePoint)Web 服务交互 提供程序托管 从主机 Web 中的现有 SharePoint 列表中获取客户地址并使用 Web 应用程序中的映射服务显示其位置的加载项
配置新的 SharePoint 实体并与外部 Web 服务交互 结合 SharePoint 承载和提供程序承载 在应用程序 Web 上配置 SharePoint 列表,以便能够存储地址(用户提供或从现有 SharePoint 列表中提取)的纬度和经度坐标的映射加载项

选择用于提供商托管加载项的托管模式时要注意的事项

SharePoint 托管加载项有固定的托管模式,因为它们托管在加载项 Web 上。 若为提供商托管加载项,可以更灵活地托管加载项的各种组件。因此,如果选择创建此类加载项,需要将目标和要求与相应的托管模式对应起来。

OAuth 或跨域库

考虑提供程序承载的加载项以及如何构建时需要询问的一个最重要的问题是加载项如何获取与 SharePoint 交互的授权。 提供程序承载的加载项为您提供了两个选择:JavaScript 跨域库和 OAuth。

使用跨域库,可以通过代理在加载项的远程组件中与多个域进行交互。 如果客户端代码和登录 SharePoint 的用户的权限足够,不妨考虑使用跨域库。 只要是通过防火墙进行远程调用,跨域库使用起来也很方便。

OAuth 是一种开放的授权协议,可以一种易于管理的方式在客户端应用(桌面、Web 和移动应用)中进行安全授权。 如果打算生成的 SharePoint 加载项不仅是在远程 Web 应用中运行,而且还与 SharePoint 重新通信,那么通常需要使用 OAuth。 只要是从不得以独占方式使用客户端代码 (HTML + JavaScript) 的远程托管 Web 应用中调用 SharePoint,就必须使用 OAuth。 详细了解 SharePoint 加载项中的 OAuth 工作原理

SharePoint 外接程序的安全数据访问和客户端对象模型SharePoint 外接程序的三个授权系统更加全面地介绍了 OAuth 和跨域库之间的选择。

OAuth 与本地 SharePoint 场

如果使用的是 SharePoint 本地部署,可以使用 OAuth,但需要在创建高信任加载项和使用 Office 365 租赁之间做出选择。 Office 365 将 Microsoft Azure 访问控制服务 (ACS) 用作信任代理。如果无权访问 Office 365 租赁,需要按照创建高信任 SharePoint 加载项中的说明操作,即使用证书在加载项和 SharePoint 之间建立信任。 可以向 SharePoint 场的加载项目录添加高信任加载项,但不能在 Office 应用商店中出售它们。 如果有权访问 Office 365 租赁,可以将它与 SharePoint 本地安装相关联,并对安装到本地 SharePoint 的加载项使用 ACS 作为信任代理

下表列出了承载加载项的 SharePoint 组件和远程组件的所有可能模式,以及使用 OAuth 时可用的信任代理。 请注意,您需要拥有对 Office 365 租户的访问权,才能使用 ACS 在 SharePoint 和安装到 SharePoint 本地安装的 SharePoint 外接程序之间建立信任。

SharePoint 组件位置 远程组件位置 信任代理
本地 云中 ACS、证书
本地 本地 ACS、证书
Office 365 SharePoint 网站 在云中 ACS
Office 365 SharePoint 网站 本地 ACS

结合使用提供商托管和 SharePoint 托管

还可以生成包含 SharePoint 托管组件和云托管组件的加载项。 例如,可以创建包含自定义 SharePoint 列表和内容类型的云托管加载项。 如果选用此体系结构,设计和方法必须考虑到模型中内置的安全限制。 只能在 SharePoint 托管的代码组件中使用 JavaScript,而且远程托管组件必须使用 OAuth 或跨域库与 SharePoint 网站进行交互。 考虑此方法时,请确保了解 外接程序授权在 SharePoint 中的工作原理

图 3 展示了使用 Azure 托管加载项的远程组件并使用 OAuth 时的体系结构。

图 3. 使用 OAuth 和 Windows Azure 时的 SharePoint 加载项服务器到服务器通信

服务器到服务器的通信限制

了解如何创建结合了云托管和 SharePoint 托管的加载项

考虑结合使用提供商托管和 SharePoint 托管时,请注意以下几点。

获取这些益处 但请考虑以下事项
这两种方法的全部优势。 体系结构更加复杂,需要仔细规划服务器间通信和跨网站脚本限制。

Azure Web 角色中的提供商托管加载项

可以在 Azure Web 角色(而不是 Web 应用,无论 Web 应用是本地网站还是 Azure 网站)中托管提供商托管 SharePoint 加载项。 Azure Web 角色实质上是基于 Internet Information Services (IIS) 且在 Azure 上托管的网站。 可以利用 Azure Web 角色的托管服务和可伸缩性。 此外,还可以提升 SharePoint 加载项的性能和可用性,尤其是当加载项的使用率高或需求随时间推移而变化时。 如果 SharePoint 加载项需要更多的服务器资源,那么 Azure 可以向加载项动态分配资源。

若要详细了解 Azure Web 角色,请参阅下面的链接。

需要安装用于 .NET 的 Microsoft Azure SDK (Visual Studio 2012) 1.8.1 这一必备组件。可以使用 Web 平台安装程序进行安装。

在 vsnv 中创建项目的方式取决于是先添加 SharePoint 加载项项目,再添加 Azure Web 角色项目,还是先添加 Azure 项目,再添加 SharePoint 项目。

将云服务添加到现有加载项

如果已有要在 Azure 上托管的提供商托管 SharePoint 加载项,请选择 SharePoint 加载项解决方案中的 Web 应用项目。 在菜单栏上,依次选择“项目”>“添加 Microsoft Azure 云服务项目”。 此时,Azure 项目 NameOfTheWebAppProject.Azure 会添加到 SharePoint 加载项解决方案中。 Web 项目的 Web 角色也会添加到 Azure 云服务项目中。 Visual Studio 2012 的 Office 开发人员工具设置必要的项目属性,以便 Web 角色能够处理 SharePoint 加载项。

将加载项添加到现有 Web 角色

如果在 Azure 云服务中已有要用作提供商托管 SharePoint 加载项主机的 Web 角色,请打开 Visual Studio 中的 Azure 云项目,再选择“解决方案资源管理器”中的 Web 角色项目。 在菜单栏上,依次选择“项目”>“为 SharePoint 项目添加加载项”。 此时,为提供商托管 SharePoint 加载项创建了项目 NameOfTheWebAppProject.Azure,并将它添加到了解决方案中。 Visual Studio 将 Azure Web 角色引用为 SharePoint 加载项的 Web 项目主机。

另请参阅