系统升级日记(3)- 升级SharePoint解决方案和Infopath
最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013。本记录旨在记录升级过程中的一般性准备工作及在升级中可能存在的各种坑的解决方案。本记录会大量引用外部文章来作为解释说明,并不是一个step by step的指引,本文章并不适合小白用户而适合具有一定IT管理经验的人阅读。另外本文也并不保证完全正确。
第三篇:升级SharePoint解决方案和Infopath
本篇将介绍如何将一个SharePoint 2010解决方案升级到SharePoint 2013解决方案,及Infpath表单在SharePoint 2013中遇到的问题。
1. 解决方案升级
因为SharePoint 2010 是基于.NET3.5,而SharePoint 2013则是基于.NET4.0,其.NET Runtime不同,所以以前有一个最大的痛处,就是无法在SharePoint 2010解决方案中使用.NET4.0 framework的优秀特性。
我将原先的SharePoint 2010 解决方案用Visual Studio 2013打开,并没有预期的出现升级的向导,而且我也并没有找到相应的菜单将项目升级。我想因为Visual Studio 2013本来就同时支持SharePoint 2010和SharePoint 2013项目,所以不支持升级也有可能。
后来我找到一个简单的方法来解决这个问题:
1) 将项目文件用记事本打开,在<TargetFrameworkVersion>标签下面(或上面)再添加一个标签:<TargetOfficeVersion>15.0</TargetOfficeVersion>
2) 保存后用Visual Studio 2013重新打开项目,然后在项目属性中将Target Framework从.NET3.5更改为.NET4.5。
3) 将SharePoint相关的引用(比如Microsoft.SharePoint)都删除掉后重新添加。因为原先的引用是SharePoint2010的,而之后添加的则是SharePoint2013的。
2. 解决方案的安装
解决方案的安装很容易,使用Add-SPSolution和Install-SPSolution即可。我这里只强调一点,那就是SharePoint2013同时支持14模式和15模式的站点,一个Feature可以被同时安装在14\和15\两个目录下面来支持这两种模式,所以根据需求,我们最好加一个- CompatibilityLevel参数,比如我想让解决方案同时支持14、15模式,则用如下命令:
Install-SPSolution -Identity contoso_solution.wsp -GACDeployment -CompatibilityLevel {14,15}
3. Infopath的升级
从我现在的升级来看,Infopath升级后唯一遇到的问题就是在Infopath中调用Web Services失败的问题。当然这个问题同样适应于你新建的SharePoint 2013站点中,Infopath调用Web Services的问题。换句话说,只要你在SharePoint 2013中使用Infopath调用Web Services,则都会遇到这个问题。
我先介绍一下我的场景,我在一个List中采用自定义表单的方式自定义了表单,当然这个表单是采用Infopath来定义的,在这个表单中,调用了SharePoint2013自己的Web Services,这个Web Services是UserProifle里面的GetUserProfileByName(string name)方法,我的实际目的是通过这个方法返回当前用户的部门。
1) Windows Server 2012的回环检查(Loop back check)问题
我首先遇到的错误是新建列表项目时,Infopath表单打开后提示无法连接数据源,这个数据源当然就是指Web Service。然后查找日志,发现一个错误“远程服务器返回错误: (401) 未经授权”。
此错误是由于Windows Server 2012默认启用了回环检查所导致的。其实回环检查在Windows Server 2008就默认开启了,后来到了R2后又默认关闭了,谁知道在2012里面又默认开启了。由于Infopath forms services和SharePoint Web Services在同一台机器上,这时就形成了回环调用,被回环检查给阻止了,最方便的方法就是直接禁用掉回环检查。我采用修改注册表的方法来解决此问题,大家可以参考:
http://www.c-sharpcorner.com/UploadFile/shyjumohan/disable-loop-back-check-in-windows-server-2012/
2) Infopath forms services不支持claims-based认证的问题
解决掉回环检查后,界面上错误依旧,但是日志中已经提示”500 服务器内部错误”了。401改为500,很有进步,但是此错误信息很难定位。所以又查看了IIS日志,在IIS日志中有访问这个asmx地址的访问记录,但是我们看到使用的用户是一个nt\iuser的用户,而不是我当前的访问用户。这是因为Infopath forms services不支持claims-based认证,所以无法把当前用户身份传递过去,这是一个很麻烦的事情,我们必须指定一个公共的账户来访问Web Services。通过下面的文章来解决此问题:
InfoPath over Claims Authentication (SharePoint 2010 & 2013)
要点就是建立一个secure store app,然后给infopath建立一个udc文件,并且在udc中使用secure store app中存储的用户名密码,最后在Infopath中使用这个udc来连接数据源。
3) 在SharePoint管理中心中允许用户表单使用udc
当完成上面这一步后,界面上仍然是同样的错误,但是日志中显示错误“不允许用户表单使用udc”,这时才想起来在管理中心里面需要开启这个选项。这一步比较容易。
4) Infopath函数userName()返回格式的问题
当完成上面这一步后,界面上仍然是同样的问题,但是日志中显示错误是调用Web Services失败,因为调用GetUserProfileByName(string name)方法有一个参数,以前是不用传递的(实际上是传递了一个空字符串),当不传递时自动返回当前用户的信息。但是因为我们使用claims-based认证,所以再也没法使用当前用户身份(我觉得这是一个非常难受的地方),所以使用Infopath函数userName()来获得当前用户登录名,并且传入Web Services。我们发现这个函数在Infopath客户端预览时表现正常,但是在发布之后返回一个类似” i:0#.w|Domain\UserName”这样的一个字符串,这是因为用户是claims-based引起的。具体的格式可以参考下面的文章:
http://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx
这个问题也好解决,使用Infopath函数substring-after(userName(), "|")来处理一下就可以准确的得到domain\username这样的格式了。
总结:Infopath调用Web Services的问题应该是我从升级以来遇到最大的问题,无论哪种情况,界面上的报错都是一样的,还是要分析SharePoint日志,同时还分析了IIS日志。这个问题足足花了我4个多小时才完全解决,在此总结下来避免以后遗忘。
系统升级日记(3)- 升级SharePoint解决方案和Infopath的更多相关文章
- IBM Domino 9 出现 Domino Designer 您正在试图升级多用户安装。请获取正确的安装包以完成升级。 解决方案
如果网上搜索的其他方法解决不了,那么我的这个方法可以试一下. 出现的场景: 先装好了Notes,后准备装Designer. 在装Designer解压包之后,出现下面的错误,不能安装: 您正在试图升级多 ...
- SharePoint 解决方案手动打包简单介绍
介绍:在使用SharePoint中,我们经常需要做的就是打包解决方案,我们来介绍下SharePoint解决方案的手动部署,我自己觉得,解决方案是SharePoint中非常好的一个功能,部署和使用起来相 ...
- 在SharePoint解决方案中使用JavaScript (2) – 模块化
本文是在SharePoint中使用JavaScript的第二篇文章,前面的文章包括: 在SharePoint解决方案中使用JavaScript (0) 在SharePoint解决方案中使用JavaSc ...
- 在SharePoint解决方案中使用JavaScript (1) – 引用.js文件
本文是系列文章的第一篇. 在SharePoint解决方案中使用JavaScript (0) 作为在SharePoint应用程序中使用JavaScript的第一步,就是要知道如何将一个写好的.js文件, ...
- 在SharePoint解决方案中使用JavaScript (0)
随着Web前段技术(JavaScript/HTML5)的日益发扬光大,在Web应用程序中,我们开始更多的使用JavaScript.很多以往是放在服务器上运行的逻辑,现在都开始逐渐的向前段转移.这种趋势 ...
- 系统升级日记(2)- 升级到SharePoint Server 2013
最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...
- 系统升级日记(4):如何快速的修改Infopath中的各种URL
摘要: 最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记 ...
- 系统升级日记(1)- 升级到SQL Server 2012
最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...
- BPM SharePoint解决方案分享
一.需求分析 SharePoint作为微软推出的协同类平台产品,为客户提供了门户.内容.文档.流程.社区.搜索.BI等一系列的解决方案,然而其流程功能由于设计理念差异,不能完全满足客户的需求,主要原因 ...
随机推荐
- MySQL [Warning]: IP address 'xxxx' could not be resolved: Name or service not known
MySQL的error log 出现大量的 DNS反解析错误. DNS解析是指,将 域名解析成ip地址: DNS反解析是指,将IP地址反解析成域名: Version: MySQL Community ...
- 与POS机通信时的3DES(双倍长)加密解密
项目中有个SocketServer要和移动便携POS机通信,POS开发商就告诉我们他们用的3DES(双倍长)加密,给了个Key.数据和结果,让我们实现. c#用TripleDESCryptoServi ...
- n枚硬币问题(找假币)
问题描述: 在n枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重.可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币. 解题思路: ...
- 工作中常用的Linux命令:mkdir命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...
- GNU C 内联汇编介绍
GNU C 内联汇编介绍 简介 1.很早之前就听说 C 语言能够直接内嵌汇编指令.但是之前始终没有去详细了解过.最近由于某种需求,看到了相关的 C 语言代码.也就自然去简单的学习了一下如何在 C 代码 ...
- AI(Adobe Illustrator)简单入门——米老鼠
成果: 步骤如下: 一.新建文档 二.选椭圆工具,在画布中间点一下,画一个100px*100px的圆,如下 三.同上,再画两个50px*50px小圆.点左上角的选择工具,点小圆中心,放好位置. 四.全 ...
- [转]Oracle 修改或者删除临时表 ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引
本文转自:http://blog.csdn.net/treasurelifelhf/article/details/7290729 由于存储过程出现问题,导致前台页面无法显示数据.执行存储过程发现临时 ...
- 搭建PHP官方框架zend framework 2(LINUX)
在五花八门的语言里,PHP作为我第一个觉得欣赏的理由,就是它的简单和快捷,因为它封装了许多的常用函数.PHP作为网站中一种算作比较流行的语言,也产生各种优秀的框架.我所接触过的有zend framew ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- 第16章 调色板管理器_16.4 一个DIB位图库的实现(2)
//接上一篇 //DibPal.h /*----------------------------------------------------------------- DIBPAL.H heade ...