设为首页 收藏本站
查看: 988|回复: 0

[经验分享] 系统升级日记(3)- 升级SharePoint解决方案和Infopath

[复制链接]

尚未签到

发表于 2015-9-24 10:02:31 | 显示全部楼层 |阅读模式
  最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将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)
  http://blogs.technet.com/b/rajbugga/archive/2013/08/07/infopath-over-claims-authentication-sharepoint-2010-amp-2013.aspx
  要点就是建立一个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个多小时才完全解决,在此总结下来避免以后遗忘。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118068-1-1.html 上篇帖子: SharePoint 2013 图文开发系列之InfoPath入门 下篇帖子: SharePoint 2013 InfoPath 无法保存下列表单
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表