上一篇我讲解了如何利用微软提供的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. PHP, LDAPS and Apache

    要PHP可以连接到用self-signed certificate的ldaps服务器,需要在/etc/ldap.conf中添加一行: TLS_REQCERT     never 要PHP在Apache ...

  2. Python学习之路—Day1

    第1章 Python语言简介 1.1 Python是什么 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn)是什么呢?简单的说,它是一种计算机编程语言及一组配套的软件工具和库. ...

  3. iOS navigationcontroller pop 回到上一层视图 如何刷新

    1.从视图A中navigation controller push到视图B,当视图B navigationcontroller pop回到视图A时,并不会调用A的viewDidLoad,但是会调用vi ...

  4. linux的一些小问题

    1.需要使用root权限时提示xxx is not sudoers.... 1).root用户下输入visudo 2).在打开的文件中找到 root ALL=(ALL) ALL,以xxx为用户名,添加 ...

  5. Oracle Profile 使用

    一.目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该prof ...

  6. ASP.NET连接远程Oracle数据库,提示试图加载格式不正确的程序

    VS调试远程连接Oracle数据库,一直报错 由于本地计算机是64位的操作系统,而且也确定安装的Oracle客户端是64位的 ,但是一直提示这个错误. 试了很多方法,终于发现可能是 不能在VS中调试的 ...

  7. CrossOver 13.0 发布,Windows 模拟器

    允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...

  8. 亚马逊云服务器VPS Amazon EC2 免费VPS主机配置CentOS及其它内容

    Amazon目前提供为期一年的免费VPS服务,可到地址http://aws.amazon.com 进行申请. 现在对账号申请成功后,对VPS主机配置CentOS的过程做个图文介绍 1.创建实例(Ins ...

  9. 计划参照mysql-proxy编写mssql-proxy

    目前使用haproxy做了mssql多个读库的负载均衡,在生产环境中运行得不错. 不过,这个方案有缺点:客户端需要选择是使用读库,还是写库.这样还是不够方便,如果能够实现自动路由就更好了,即让hapr ...

  10. 软件测试基本理论-IBM模式

    软件测试基本理论(1) IBM生产模式 1   参考书目 <IBM-从菜鸟到测试架构师-一个测试工程师的成长日记> 出版社:电子工业出版社 印次:2013年6月 作者:IBM主要工程师 2 ...