SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境
上一篇我讲解了如何利用微软提供的Office 365开发人员网站,进行在线的SharePoint App开发,这当然是不错的一个选择,因为你可以快速地进行开发和调试。(仅仅针对App开发而言)。但是,你可能会想到一个问题,假设我们在企业中已经有了一组SharePoint Server服务器,那么如何让他们也能用来进行App开发、部署并且最终用来统一管理所有的App呢?这一篇文章我们将揭开这个面纱。
关于这个配置过程,微软官方也有一个文档(http://msdn.microsoft.com/en-us/library/fp179923(office.15).aspx),我下面总结的方法可能与官方的文档有些不一样。但这是我验证下来有效的方法。但我建议你也将官方的文档看一遍。
第一步:配置泛域名解析,并且禁用回环检查
为什么要配置这个域名解析呢?上一篇我已经提到了App最终使用的时候,有一个很特殊的地址,例如
也就是说,所有的App,其实都是共用了一个域名 sharepoint.com。但有一个特殊的前缀(你的站点标识,一个App序列号),并且有一个特殊的后缀(App的名称)。
如果我们希望配置自己的服务器也能实现这样的功能,就需要用到一个泛域名解析的功能。也就是说,不管App具体的序列号是多少,我们都解析到同一个地址。
要实现这样的功能,请登录到你配置的DNS服务器,在正向查找区域中添加一个主机名
用*(星号)作为主机名,IP地址写127.0.0.1,就是让它指向本地服务器。
如何验证这个功能是否生效呢?很简单,我们开一个命令行提示符。随便ping两个域名,分别用apps和my作为前缀,我们看到都能ping通,而且他们返回的地址都是127.0.0.1
修改两个注册表选项,来禁止环回检查
1. 启动注册表编辑器 (Regedt32.exe)。
2. 在注册表中找到并单击以下项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters
3. 在编辑菜单上,单击添加数值,然后添加以下注册表值:
数值名称:DisableStrictNameChecking
数据类型:REG_DWORD
基数:十进制
数值: 1
2. 在注册表编辑器中,找到并单击下面的注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
3. 右键单击“Lsa”,指向“新建”,然后单击“DWORD 值”。
4. 键入 DisableLoopbackCheck,然后按 Enter。
5. 右键单击 DisableLoopbackCheck,然后单击“修改”。
6. 在“数值数据”框中,键入 1,然后单击“确定”。
7. 退出注册表编辑器,然后重新启动您的计算机。
第二步:配置SharePoint服务和服务应用程序
请将如下的代码保存为一个ps1文件,例如命令为enableappscript.ps1,放在c:\scripts目录中,红色字体部分可能需要修改为你的域名
$appManagementService = Get-SPServiceInstance | where {$_.TypeName -like 'App Management Service'} if($appManagementService.Status -ne 'Online') { Write-Host 'Starting App Management Service' Start-SPServiceInstance $appManagementService | Out-Null } else{ Write-Host 'App Management Service was already started' } # wait for App Management Service to start” while ($service.Status -ne 'Online') { # delay 5 seconds then check to see if service has started sleep 5 $service = Get-SPServiceInstance | where {$_.TypeName -like 'App Management Service'} } $subscriptionSettingsService = Get-SPServiceInstance | where {$_.TypeName -like 'Microsoft SharePoint Foundation Subscription Settings Service'} if($subscriptionSettingsService.Status -ne 'Online') { Write-Host 'Starting Subscription Settings Service' Start-SPServiceInstance $subscriptionSettingsService | Out-Null } else{ Write-Host 'Subscription Settings Service was already started' } while ($service.Status -ne 'Online') { # delay 5 seconds then check to see if service has started sleep 5 $service = Get-SPServiceInstance | where {$_.TypeName -like 'Microsoft SharePoint Foundation Subscription Settings Service'} } $appManagemetnServiceApplicationName = 'App Management Service' $appManagementServiceApplication = Get-SPServiceApplication | where {$_.Name -eq $appManagemetnServiceApplicationName} # create an instance App Management Service Application and proxy if they do not exist if($appManagementServiceApplication -eq $null) { Write-Host 'Creating App Management Service Application' $pool = Get-SPServiceApplicationPool 'SharePoint Web Services Default' $appManagementServiceDB= 'Sharepoint_AppManagementServiceDB' $appManagementServiceApplication = New-SPAppManagementServiceApplication ` -ApplicationPool $pool ` -Name $appManagemetnServiceApplicationName ` -DatabaseName $appManagementServiceDB Write-Host 'Creating App Management Service Application Proxy' $appManagementServicApplicationProxy = New-SPAppManagementServiceApplicationProxy ` -ServiceApplication $appManagementServiceApplication } else{ Write-Host 'App Management Service Application already exist' } $subscriptionSettingsServiceApplicationName = 'Subscription Settings Service Application' $subscriptionSettingsServiceApplication = Get-SPServiceApplication | where {$_.Name -eq $subscriptionSettingsServiceApplicationName} # create an instance Subscription Service Application and proxy if they do not exist if($subscriptionSettingsServiceApplication -eq $null) { Write-Host 'Creating Subscription Settings Service Application' $pool = Get-SPServiceApplicationPool 'SharePoint Web Services Default' $subscriptionSettingsServiceDB= 'Sharepoint_SiteSubscriptionSettingsServiceDB' $subscriptionSettingsServiceApplication = New-SPSubscriptionSettingsServiceApplication ` -ApplicationPool $pool ` -Name $subscriptionSettingsServiceApplicationName ` -DatabaseName $subscriptionSettingsServiceDB Write-Host 'Creating Subscription Settings Service Application Proxy' $subscriptionSettingsServicApplicationProxy = New-SPSubscriptionSettingsServiceApplicationProxy ` -ServiceApplication $subscriptionSettingsServiceApplication } else{ Write-Host 'Subscription Settings Service Application already exist' } Set-SPAppDomain 'apps.corp.contoso.com' -Confirm:$false Set-SPAppSiteSubscriptionName -Name 'app' -Confirm:$false
上面的代码其实说复杂也不复杂,它会检查两个服务的状态,如果没有启动,则会启动他们
- App Management Service
- Microsoft SharePoint Foundation Subscription Settings Service
然后,它会检查是否存在下面两个服务应用程序,如果不存在,则会创建并且启动他们
- App Management Service Application
- Subscription Settings Service Application
然后,它会注册一个域名(apps.corp.contoso.com)和地址前缀(app)。
第三步:创建App Catalog
接下来我们要做的是创建一个所谓的App Catalog,这个相当于是一个存储App的具体位置。
经过上面三个步骤,我们就能通过Visual Studio来测试开发一个简单的App,并且看看部署起来的效果了
默认生成的项目结构中有一些脚本文件,CSS文件,并且还有一个aspx页面。【备注:具体App的开发细节以后会有文章介绍,这里不做展开】
我这里不准备对其做任何修改,直接选择解决方案,然后选择“部署解决方案”即可,如果不出意外的话,你应该能部署成功。
【备注】如果你直接使用安装SharePoint Farm的账号打开Visual Studio ,创建App项目并且部署,你会发现其实是部署不了的,错误消息如下。
解决方法就是再创建一个账号,用这个账号登陆来做开发,并且将这个账号添加为Farm Administrator,默认网站集的Site collection administrator,并且在数据库服务器中,将其添加为sysadmin这个角色。
如果完成了部署,你可以打开默认的站点,在左侧导航区域会出现刚刚你建立和部署的App的链接。点击这个链接,可以运行这个App(其实是打开了其中的Default.aspx页面)
【备注】实际上,你如果第一次打开的话,可能会要求你输入用户名和密码。我是通过设置了IE选项,而避免了每次输入用户名和密码的。
首先,我将*.apps.corp.contoso.com添加到了信任站点
然后,我设置了信任站点的安全选项,让它自动地以当前用户的身份登陆。