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最终使用的时候,有一个很特殊的地址,例如

https://xizhangdev-ece5e3f97ecd25.sharepoint.com/SharePointAppSample/Pages/Default.aspx?SPHostUrl=https%3A%2F%2Fxizhangdev%2Esharepoint%2Ecom&SPLanguage=zh%2DCN&SPClientTag=0&SPProductNumber=16%2E0%2E2120%2E1226&SPAppWebUrl=https%3A%2F%2Fxizhangdev%2Dece5e3f97ecd25%2Esharepoint%2Ecom%2FSharePointAppSample

也就是说,所有的App,其实都是共用了一个域名 sharepoint.com。但有一个特殊的前缀(你的站点标识,一个App序列号),并且有一个特殊的后缀(App的名称)。

如果我们希望配置自己的服务器也能实现这样的功能,就需要用到一个泛域名解析的功能。也就是说,不管App具体的序列号是多少,我们都解析到同一个地址。

要实现这样的功能,请登录到你配置的DNS服务器,在正向查找区域中添加一个主机名

image

用*(星号)作为主机名,IP地址写127.0.0.1,就是让它指向本地服务器。

image

如何验证这个功能是否生效呢?很简单,我们开一个命令行提示符。随便ping两个域名,分别用apps和my作为前缀,我们看到都能ping通,而且他们返回的地址都是127.0.0.1

image

 

修改两个注册表选项,来禁止环回检查

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

image

image

上面的代码其实说复杂也不复杂,它会检查两个服务的状态,如果没有启动,则会启动他们

  1. App Management Service
  2. Microsoft SharePoint Foundation Subscription Settings Service

image

然后,它会检查是否存在下面两个服务应用程序,如果不存在,则会创建并且启动他们

  1. App Management Service Application
  2. Subscription Settings Service Application

image

然后,它会注册一个域名(apps.corp.contoso.com)和地址前缀(app)。

image

第三步:创建App Catalog

接下来我们要做的是创建一个所谓的App Catalog,这个相当于是一个存储App的具体位置。

image

image

image

image

 

经过上面三个步骤,我们就能通过Visual Studio来测试开发一个简单的App,并且看看部署起来的效果了

image

image

默认生成的项目结构中有一些脚本文件,CSS文件,并且还有一个aspx页面。【备注:具体App的开发细节以后会有文章介绍,这里不做展开】

image

我这里不准备对其做任何修改,直接选择解决方案,然后选择“部署解决方案”即可,如果不出意外的话,你应该能部署成功。

image

【备注】如果你直接使用安装SharePoint Farm的账号打开Visual Studio ,创建App项目并且部署,你会发现其实是部署不了的,错误消息如下。

image

解决方法就是再创建一个账号,用这个账号登陆来做开发,并且将这个账号添加为Farm Administrator,默认网站集的Site collection administrator,并且在数据库服务器中,将其添加为sysadmin这个角色。

 

如果完成了部署,你可以打开默认的站点,在左侧导航区域会出现刚刚你建立和部署的App的链接。点击这个链接,可以运行这个App(其实是打开了其中的Default.aspx页面)

image

【备注】实际上,你如果第一次打开的话,可能会要求你输入用户名和密码。我是通过设置了IE选项,而避免了每次输入用户名和密码的。

首先,我将*.apps.corp.contoso.com添加到了信任站点

image

然后,我设置了信任站点的安全选项,让它自动地以当前用户的身份登陆。

image

posted @ 2013-10-30 19:49  陈希章  阅读(4548)  评论(2编辑  收藏  举报