传统的Farm部署方式有一些缺点,例如运行在SharePoint环境中的自定义代码会带来安全隐患。自定义代码很多时候要提升权限来做一些事情,虽然解决了权限不够的问题,但是有带来了权限过大的问题,这个问题更严重,有的时候会造成SharePoint的崩溃。另外就是当SharePoint升级的时候,自定义的代码,包括第三方的产品,很难顺利升级。而且这种部署方式安装和升级都比较麻烦。
App的设计目标
1. Office 365和本地部署环境(on-premises farm)都要支持App方式部署
2. App的代码不运行在SharePoint的代码运行环境中,有独立的运行环境。
3. App使用web service与SharePoint 通信,减少对SharePoint的版本依赖,不需要随着SharePoint的升级而升级(或者只改少量的代码)。
4. App代码运行在一个独立的账户中,可以为这个账号分配权限。
5. App易于分发,安装和升级。
App运行的前提条件
1. 组织或者租户(tenancy):一个SharePoint租户就是一组统一配置和管理site collection的集合。例如一个公司在Office 365上注册了一个账户,那么Office 365就为这个账户创建了一个tenancy,其中分配了一些SharePoint的站点供这个账户使用。
SharePont 2013可以在本地部署的环境中(on-premises farm)使用App,是因为SharePoint 2013默认整个farm是一个租户。SharePoint App必须运行在一个指定的租户环境中。
2. App管理服务(App Management Service):SharePoint 2013依赖于这个服务来管理App,这个服务有自己的数据库,来保存App的安装和配置信息,同时也负责处理App的权限和license等。
3. 站点订阅设置服务(Site Subscription Settings Service):SharePoint 2013依赖于这个服务来管理租户,这个服务有自己的数据库,每当添加新的租户,这个服务就将租户的配置信息保存到数据库中。
在Office 365的环境中,这两个服务是默认开启的,但是在本地部署的环境中(on-premises farm),需要自己创建这两个服务。App管理服务可以使用管理中心的配置向导创建,但是站点订阅设置服务需要使用PowerShell来创建,下面是PowerShell代码:
New-SPSubscriptionSettingsServiceApplication -ApplicationPool "SharePoint Web Services Default" -Name "Subscription Settings Service Application" -DatabaseName "SubscriptionSettingsDB" | New-SPSubscriptionSettingsServiceApplicationProxy
具体的配置App环境的方法可以参考:
点击打开链接
App的安装范围
站点范围(site scope) - App可以按安装到一个站点上在站点中使用。
租户范围(tenancy scope) - App可以安装到app catelog站点中,在整个租户内使用
App的两种运行方式
SharePoint-hosted : SharePoint本地环境运行
Provider-hosted:第三方托管运行
原本还有一个Auto-hosted:自动托管运行的方式,但是微软已经不再支持了
其中Provider-hosted属于云端运行,云端运行和本地运行的区别如下图所示:
可以看到,本地运行模式和云端运行模式都有一个开始页面(Start Page),这个页面是app的入口。本地运行只允许使用客户端代码,例如js,silverlight等等,云端运行除了允许使用客户端代码,还可以使用服务端代码(还允许创建和使用自己的数据库),但是服务端代码必须运行在remote web之中,而且,云端运行还有一个App Lancher用来将 用户访问重定向到remote web的开始页面。