汤尼

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在SharePoint2010中,我们有很多中方法可以在客户端调用服务器段的API,直接获取数据,例如Silverlight,我可以用如下代码获取我需要的List中的数据.

public override void GetListItemsAsync(string listName, string viewXML, out ListItemCollection listItems)
      {
          clientContext.Load(clientContext.Web);
          List targetList = clientContext.Web.Lists.GetByTitle(listName);
          clientContext.Load(targetList);
          CamlQuery camlQuery = new CamlQuery();
          camlQuery.ViewXml = viewXML;
          listItems = targetList.GetItems(camlQuery);
          clientContext.Load(listItems);
          clientContext.ExecuteQueryAsync(successEventHandler, failEventHandler);
      }

如果用js也是如此,但是需要注意的是,这些方式获取数据都是异步的,而有关List的操作,SharePoint2010提供给我们的又是有限的几个,当我需要向服务器提交复杂的操作时,比如用户认证并且获取多方数据,就不能一次又一次的向Server端通过异步的方式取数据了。最好的办法是架设自己的Service层,接受来着客户端的请求,统一处理完成,返回给客户端,一次交互完成所有相关工作。

正是基于这样的思考,我们开始在SharePoint2010上架设Service(以前在SharePoint2007的时候,没有提供那么多的数据访问方式,架设这种Service更是常规解决方案),在这里记录下遇到的问题以及相应的Solution

1.首先要完成Service后端的Busniess layer,我们创建了class library,添加了Microsoft.SharePoint.dll, 完成了所有设计到SharePoint object model的busniess,这里简称为BizLayer,然后我们在本地进行了unit test,注意在编译引用过Microsoft.SharePoint.dll的library时,要做如下设置:选择此class library的 project property,在Application结,将

Target Framework设为 .net frame work 3.5, 在Build结将Target Platform设为x64,因为SharePoint2010是基于x64 平台的,如果不这么设置的话,在跑本地unit test时,默认在X86下运行,如果代码中包含了SPSite site = new SPSite(XXX)之类的,会报错 :找不到当前的Web Application…

2. 到目前位置,一切看起来进展的很顺利,我们又创建了WebService(基于ASMX或者WCF)项目,添加了刚才测试过的Busniess layer的library,然后完成了Service Contact的实现,很简单,只有调用几个Busniess Layer实现的接口就可以了。当我们现在VS2010上调试我们的WebService时,出错了:

Could not load file or assembly 'XXXXXX' or one of its dependencies. An attempt was made to load a program with an incorrect format.

我们意识到可能是我们刚才把BizLayer的Target Platform设为x64的缘故,貌似VS2010起的调试进程只是基于X86的,无法loadX64build的程序。这点和SharePoint2007不一样了,查阅了资料以后,我们决定直接用IIS作为载体来Deploy web service:

首先,我们把BizLayer的Target Platform设为Any Cpu,把Web Service的Target Platform也设为Any Cpu,然后在64位IIS7.5下创建新的Web Site,在Authentication中enable Windows Authentication,在相应的App pool中点击Set Application Pool Default,将Identity这一栏设为一个对SharePoint2010有读写权限的帐号(如果你愿意的话,可以根据你的Service的实现,给相应的权限)。完成这些后,在IE中输入我们在IIS中的地址,web service就可以访问了,不报错了。

这里记录了一次部署SharePoint2010 customization service的过程,可以发现由于SharePoint2010是基于64位系统平台的,和SharePoint2007还是有很大不同的。

posted on 2011-04-01 15:33  Tonnie  阅读(1624)  评论(6编辑  收藏  举报