上一篇我讲解了如何利用微软提供的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服务器,在正向查找区域中添加一个主机名

用*(星号)作为主机名,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

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

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

  1. App Management Service

  2. Microsoft SharePoint Foundation Subscription Settings Service

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

  1. App Management Service Application

  2. 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添加到了信任站点

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

SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境的更多相关文章

  1. SharePoint Server 2013开发之旅(四):配置工作流开发和测试环境

    工作流这个功能,在SharePoint Server 2013中做了很大的改动.我们可以从微软官方的文档中了解一下大概的情况 http://technet.microsoft.com/zh-cn/li ...

  2. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  3. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  5. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  6. SharePoint Server 2013开发之旅(一):新的开发平台和典型开发场景介绍

    我终于开始写这个系列文章,实际上确实有一段时间没有动笔了.最近重新安装了一套SharePoint Server 2013的环境,计划利用工作之余的时间为大家写一点新的东西. SharePoint Se ...

  7. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

  8. 如何结合整洁架构和MVP模式提升前端开发体验(三) - 项目工程化配置、规范篇

    工程化配置 还是开发体验的问题,跟开发体验有关的项目配置无非就是使用 eslint.prettier.stylelint 统一代码风格. formatting and lint eslint.pret ...

  9. Visual Studio 开发(二):VS 2017配置FFmpeg开发环境

    在上篇文章Visual Studio 开发(一):安装配置Visual Studio Code 中,我们讲了一下如何配置VS CODE,来编写和调试C的代码.如果你已经使用VS Code回顾和复习好C ...

随机推荐

  1. debian8-server install record

    1. install necessary softwares apt-get install vim git ssh 2. install input method apt-get install f ...

  2. xml笔记

    <?xml version="1.0" encoding="UTF-8"?> ----------------------------------- ...

  3. HTTP03--DNS知识

    一.域名解析过程 1. 浏览器检查自身缓存,缓存时间为几分钟到小时不等,通过设置TTL属性确定. 2. 若1未找到,则查OS缓存,如windows下的host文件,linux的/etc/hosts文件 ...

  4. SqlServer2012 数据库的同步问题汇总

    1.当订阅由发布服务器集中管理时正常,而把这些订阅分由订阅服务器管理,在发布服务器初始化订阅时,这些订阅就会出现无法访问某地址的问题,即使添加Everyone的完全控制权限也无用. 2.SqlServ ...

  5. 细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一

    细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一(转) ADO.NET Entity Framework        ADO.NET Entity Framework 是微软以 ADO.N ...

  6. 【腾许Bugly干货分享】“HTTPS”安全在哪里?

    背景 最近基于兴趣学学习了下 HTTPS 相关的知识,在此记录下学习心得. 在上网获取信息的过程中,我们接触最多的信息加密传输方式也莫过于 HTTPS 了.每当访问一个站点,浏览器的地址栏中出现绿色图 ...

  7. Java多线程19:定时器Timer

    前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单.定时更新某些缓存.定时清理一批不活跃用户等等.定时计划任务功能在Java中主要使用的就是Tim ...

  8. Silverlight无法启动调试,错误“Unable to start debugging. The Silverlight Developer Runtime is not installed. Please install a matching version.” 解决办法

    今天调试Silverlight出现了以下错误: 意思是“无法启动调试,因为Silverlight Developer Runtime没有安装,请安装一个匹配的版本”.但是按Ctrl + F5可以调试运 ...

  9. Silverlight4中实现Theme的动态切换

    Silverlight一般用来开发一些企业的应用系统,如果用户一直面对同一种风格的页面,时间长了难免厌烦,所以一般都会提供好几种风格及Theme供用户选中,下面就来说一下如何在不重新登录系统的情况下, ...

  10. java提高篇(十五)-----关键字final

    在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是“这部分是无法修改的”.不想被改变的原因有两个:效率.设计.使用到fi ...