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

[经验分享] SharePoint Client Object Model API 介绍以及工作原理解析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-25 13:06:17 | 显示全部楼层 |阅读模式
CSOM和ServerAPI 的对比
  SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客户端的应用程序的。有这个这套API,使得所有SharePoint的终端用户 可以开发自己的应用程序来访问,修改SharePoint。下面的列表简述了CSOM和Server API的区别:

  COM

  Server

  运行端


  • 可以在任何能够访问SharePoint的机器上运行
  • 可以再浏览器上,.Net应用程序上,Silver light,JavaScript,Jscript运行
  运行在SharePoint的服务器端

  权限要求

  必须指定一个用户,以该用户的权限操作SharePoint

  运行Server代码本身有一定的权限要求,可以通过管理员身份来操作SharePoint数据

  支持功能

  较少,智能实现客户端常用的功能

  更强大,实现大部分SharePoint管理操作

  

COM工作原理
  COM通过WCF来实现的,在SharePoint的服务器端寄宿在.../_vti_bin/client.svc,通过Web Binding来实现请求的批处理。处理的整个过程为:


  • 把请求命令序列化成XML

  • 通过HttpRequest的形式发送给服务器
  • 服务器对于每一个命令,都会调用对于的Server 方法
  • 服务器端将结果序列化成JSON格式返回给客户端
  • CSOM将JSON转换成对于的Object给调用者
  由于Http本身是无状态的,COM不需要和服务器一直保持一个连接。CSOM同时也具有WebRequest具有的一系列特点。
  

COM实例介绍
  本段简单的介绍一下COM的使用的基本方式,如果获取一个SiteCollection对象的Id:



        private static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = delegate
{
return true;
};

using (ClientContext clientContext = new ClientContext("https://cnblogtest.sharepoint.com"))
{
var pasword = new SecureString();
"abc123!@#".ToCharArray().ToList().ForEach(pasword.AppendChar);
clientContext.Credentials = new SharePointOnlineCredentials("test001@cnblogtest.onmicrosoft.com", pasword);//设置权限
var testsite = clientContext.Site;
clientContext.Load(testsite);//设置查询信息
//此处会出异常因为没有执行查询
//Console.WriteLine("Sitecollection info:" + testsite.Id);
clientContext.ExecuteQuery();//执行查询
//此处可以正常返回SiteId
Console.WriteLine("Sitecollection info:" + testsite.Id);
}
}

  
  下面我们简单看一下这段代码的请求:
  Http的头信息:
  POST https://cnblogtest.sharepoint.com/_vti_bin/client.svc/ProcessQuery HTTP/1.1
  X-RequestDigest: 0x5EBACC6A87E51042B53355DCD0AC99A30F055126FC18752E5F2C9DFFAD327A37EB8818EE48677BF9434002DDA05E0F420106E17313DFF9F7A951D891A3021FE3,27 Sep 2014 10:41:29 -0000
  Content-Type: text/xml
  X-RequestForceAuthentication: true
  X-FORMS_BASED_AUTH_ACCEPTED: f
  Cookie: SPOIDCRL=77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48U1A+VHJ1ZSwwaC5mfG1lbWJlcnNoaXB8MTAwMzdmZmU4YjQ5Y2M3M0BsaXZlLmNvbSwwIy5mfG1lbWJlcnNoaXB8dGVzdDAwMUBjbmJsb2d0ZXN0Lm9ubWljcm9zb2Z0LmNvbSwxMzA1NjcyMDA4ODY4MTM0NTEsRmFsc2UsVDBJWUFlWVRiMEc0bHNuZVBIMTB4R3lvYVQyd3FIS3JMaTU0bXE0bXZNOGlKUXl0MlFFRjNTT29qWmI2Nk1iOVZjOUJjKzhPNkx3RG42UWtacGxzVGtHOUd5OHFiczhFUnYyK2NZQkJGeFlXWkNXSGxiV2wrUEdWc3FkeWJyOXZSYWFtQ3FLSkRrejVEYnZOYnFHTDcvRy9LWUF1RjV3LzNIK1RQbXFYaXJ2MUo4eWFEYzh3KzFyTmxRTG9objVma3NDWUdUNVVHcmdWNFNOd1UrTnRnQ2xUNEtqSE1yOHFSR0VnblJ0clp6MnU2VEVPMkZsRnFMSUtTY2hrSGdrU01OdzdTMzUzczdQMUY3MmhQVVErQ3pZQkU4VGVDTFovMy90VmZwdWdnOWkxS1dTenNEL0MwZ2ZIQnJRSExUS2RDVE9vYVo1VVlGYTZmczRVOFZmbmV3PT0saHR0cHM6Ly9jbmJsb2d0ZXN0LnNoYXJlcG9pbnQuY29tL192dGlfYmluL2lkY3JsLnN2Yy88L1NQPg==
  Host: cnblogtest.sharepoint.com
  Content-Length: 548
  Expect: 100-continue
  Accept-Encoding: gzip, deflate
  这里面一些关键点我们可以看到:


  • 请求方式HttpPost
  • X-RequestForceAuthentication,需要Server端强制验证
  Http请求内容:
DSC0000.png
  这里面简单的解释一下:


  • ObjectPathId=1 的对象为content.Current对象
  • ObjectPathId=3的对象为content.Current.Site对象    
  • 我们对ObjectPathId为3的对象,请求所有的属性,因此SelectAllProperties=true

  实际上,我们每一次在Client端创建一个对象的时候,都会分配一个对应ObjectPathId,这个Id是自增的。这个Id存储在Microsoft.SharePoint.Client.ObjectPath中,所有的Client API对象都从这个类中,继承ObjectPathId属性。

  Reponse信息:
  这个请求返回的Response的JSON内容如下:
DSC0001.png
  可以看到,JSON对象里面包含了我们要请求的Site对象的所有属性信息,CSOM在接收到Response的时候,用JSON对象组装成COM对象,我们就可以调用了。因此Console.Writeline会显示出Site的Id。
  

运维网声明 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-118726-1-1.html 上篇帖子: Sharepoint 2010 正式版 KEY 下篇帖子: Sharepoint学习笔记---Linq to Sharepoint--另一种生成Entity classes for sharepoint site的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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