前言

本文期图阐述在SP2010里面Sandboxed的原理极其相关使用。写这篇文章的时候正好遇到一个用户的case,这个case需要在某个列表里输入数据点击保存后数据能按照一定的格式插到Calendar列表里面去。当时想了很多种方法(虽然最后才意识到居然忽略了SharePoint Designer工作流,汗。。。),由于对SP2010接触不多,隐隐约约觉得Sandboxed Solution会是一种解法,之后的学习和试验证明了这个猜想,SP2010在客户端的开发里面费力很多,Client Object Model, Sandboxed Solution等为客户端的开发提供了很大的助力,我在的公司所有的IT Infrastructure都托管给了第三方的公司,所有的部署都需要经过很长的流程来在服务器端进行部署,动辄就碰到类似于财务上的季结、年结很多系统都冻结掉上线,尽管SharePoint跟这些财务系统没有半毛钱关系但城门失火殃及池鱼每次要做部署都很难,而SP2010的Sandboxed Solution还有Client Object Model将给部署带来太多的方便。罗里罗嗦很多其实只想说明这些新的特性的引进对我们日常工作的帮助会有多大。

概要

Sandboxed Solution被打包成WSP文件,里面包含编译后的类DLL,其他非编译部件以及XML描述清单文件,站点管理员或者其他有足够权限的用户可以将WSP文件上传到根站点下的Solutions Gallery,每个Sandboxed Solution都运行在独立的application domain下面这样SharePoint可以监控每个Solution的性能情况以及资源使用情况,如果超过了IT配置的限制后Code的执行将被终止。Application domain运行在隔离的进程里,使用低于web application的应用程序池帐号的权限的账户来运行。

Sandboxed Solution运行模型

当客户端的请求需要使用Sandboxed Solution Code的时候,请求首先被分发到IIS工作进程,然后IIS会转发此请求到Execution Manager,一个运行在同一个工作进程里的组件,Execution Manager将此请求转到运行SharePoint User Code Service(SPUCHostService.exe)的服务器(根据服务器场的配置不同,可以是一个web前端服务器或者一台单独的应用程序服务器),当User Code Service收到请求后它会将此请求再次转发到一个既存的Sandbox工作进程(SPUCWorkerProcess.exe)或者启动一个新的Sandbox工作进程,如果工作进程已经host了相应的Solution则请求会被直接转发到此工作进程,否则负载最小的工作进程将被优先转发,之后工作进程会创建新的applicaiton domain并加载solution assembly,如果工作进程里设置允许最大的applicaiton domain数超过设置的限制后会卸载既存的applicaiton domaim。

由于code在Sandbox的上下文中运行,其只能使用有限的SharePoint对象模型,而且不能和任何其他的API,服务或者资源交互。

Sandbox工作进程的配置文件描述了其访问SharePoint对象模型的安全策略。当Sandbox工作进程访问允许的SharePoint API子集的时候,工作进程会将请求转发给一个代理进程(SPUCWorkProcessProxy.exe)来执行SharePoint对象模型。

以下是一些常用场景Sandbox限制的描述,此表并不包括所有场景。

场景

Sandbox 混合 Full-Trust
创建web part,从本站点内多列表读取数据 Y Y Y
创建web part,从同服务器场内不同站点读取多列表数据   Y Y
创建web part,从不同服务器场内不同站点读取多列表数据   Y Y
创建web part,从外部列表读取数据   Y Y
创建web part,和web服务或者WCF交互   Y Y
创建SharePoint Designer工作流 Y Y Y
创建沙盒工作流动作(a method call). Y    
创建完全信任的工作流动作   Y Y
在SharePoint Designer创建工作流,使用完全信任的自定义code的工作流   Y Y
创建一个完全code的工作流     Y
开发一个新的列表定义 Y Y Y
开发一个带list item event receivers的列表定义 Y Y Y
部署一个带list event receivers的列表定义 Y Y Y
部署一个站点定义 Y Y Y
创建内容类型 Y   Y
创建外部内容类型     Y
创建ribbon元素 Y Y Y
创建新的Site Actions菜单条目 Y Y Y
创建SharePoint列表实例 Y Y Y
通过程序创建SharePoint子站点 Y Y Y
绑定内容类型到SharePoint子站点   Y Y
部署新的application page     Y
创建timer job.     Y
创建service application.     Y

*可视web part不能够在Sandbox里运行,原因是因为其host了ascx文件,这些文件部署在_controltemplates虚拟路径下面,而Sandbox是不允许访问外部资源的。此限制可以通过下载Visual Studio 2010 SharePoint Power Tools来绕过,此工具将ascx编译成assembly的一部分并因此而绕过。

代码访问安全限制

沙盒Solution通过受限制代码安全策略来控制,这个策略限制沙盒Solution只能访问Microsoft.SharePoint命名空间的一个子集,同时策略也阻止沙盒Solution访问外部资源或者系统。14\UserCode包含web.config文件指定了相关的CAS策略(实际里面会配置一个具体的CAS控制描述文件地址)。有两点需要注意:

  1. 如果不在沙盒环境内(比如将DLL部署到GAC)使用沙盒,可以包含受阻止的类型和方法;
  2. 沙盒里面调用的任何方法不能够包含受阻止的类型和方法,即便当方法被调用时候受阻止的类型和方法并没有被调用到。

Visual Studio 2010 SharePoint Power Tools包含了一个沙盒编译扩展,当使用受阻止的类型和方法的时候此扩展会生成编译错误。

权限限制

除了代码访问限制,沙盒工作进程使用一个受权限限制的帐号,进一步的防止沙盒对生产环境的危害,由于沙盒执行在部分信任的环境里面,任何代码集都要包含AllowPartiallyTrustedCallerAttribute。

获得用户识别

在沙盒里面,能够通过代码获取和当前请求相关的SPUser,但是不能够当前用户认证Token。大多数情况下,这个并不是个问题。

使用Event Receivers

在沙盒里只能使用三种Receiver: SPItemEventReceiver, SPListEventReceiver, SPWebReceiver,在沙盒里面不能使用对象模型注册Event receiver,比如不能使用feature receiver类在feature被激活的时候注册event receiver。但是,你能够通过在feature的element 文件里面通过描述来注册event receiver。

可以通过以下代码来判断是否在沙盒环境下面运行:

if(System.AppDomain.CurrentDomain.FriendlyName.Contains(“Sandbox”))

{

//Your code is running in the sandbox

}

访问外部数据

广义来讲,在SharePoint2010里面有两种主要的方式来访问外部数据:

  1. Business Data Connectivity Object Model(BDC OM),可以使用此模型访问外部内容类型和外部列表;
  2. SharePoint Object Model,可以使用SPList API访问外部列表
  3. 实际上SPList API使用BDC OM来访问外部列表,但是在沙盒里面SPList API是可以使用的,而BDC OM不可以。

使用工作流

在沙盒里可以部署通过SharePoint Designer创建的工作流,这些工作流存储在数据库,不能通过Sandbox创建基于Code的工作流。

workflow activities和workflow actions是相关联的概念。workflow activity是继承自System.Workflow.ComponentModel.Activity的任何类。而workflow actions指的是SharePoint Designer里面使用的一个具体的可以交互的行为。workflow action可以定义在feature清单文件或者.actions文件。

部署和升级沙盒Solutions

可以通过上传相关WSP文件到根站点的Solutions Gallery,站点集管理员可以激活停用Solution。如果希望将Solution部署到多个站点需要在每个站点单独上传并激活,不过可以创建一个集中的管理Solution的地方,然后为每个站点的Solutions Gallery创建自定义的Solution Provider。

Solution监控

SharePoint通过资源点系统来监控沙盒的性能和对资源的使用。服务器场管理员可以设置一个站点集能够对资源点的每日使用限制。注意此设置是站点集级别的,所以此设置会在相应站点集的每个沙盒之间共享,站点集管理员可以监控站点集内每个沙盒Solution对资源的使用情况,如果站点集里面的Solution对资源的使用超出了设置的最大值,SharePoint会暂时在当天剩下的时间里禁止掉该站点集沙盒的使用。

资源点根据14个不同的指标来进行计算,包括CPU执行时间、内存消耗和未处理异常等。每个指标都定义了一个叫Resources Per Point,比如部署了一个叫Contoso的项目管理站点到沙盒环境,下表显示了假想情况下两个资源指标的情况:

资源指标 Resources Per Point 每日ContoSo项目Solution使用情况 使用了点
SharePointDatabaseQueryCount 20个查询 300查询 15
SharePointDatabaseQueryTime 累积120秒 累积240秒 2

为阻止恶意的沙盒Solution造成SharePoint服务器性能不稳定,这14个资源指标都HardCode了一个叫AbsoluteLimit的属性定义了一个沙盒Solution一次请求能够消耗的资源数。如果一旦超过了这个绝对设置,SharePoint会停止这个请求并重启沙盒工作进程。比如,CPU执行时间指标默认绝对限制为60秒,如果单个请求执行时间超过了60秒,用户代码服务会停掉并重启执行这个请求的沙盒工作进程,相应的沙盒Solution不会因此而被禁止掉。

此外,用户代码服务包含一个叫做WorkerProcessExecutionTimeout的进程,默认值为30秒,如果单次请求的执行时间超过限制,

转载于:https://www.cnblogs.com/johnsonwong/archive/2011/04/06/2007311.html

SharePoint 2010 沙盒开发相关推荐

  1. SharePoint 2010 沙盒解决方案以及 Visual Studio 2010 模板

    SharePoint 2010中的沙盒解决方案为SharePoint开发提供了很好的支持.我们在不做场部署的情况下,可以使用很多伟大的功能.但是,沙盒解决方案也有它自有的限制,不是所有的项目模板(pr ...

  2. android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改

    [原创]Android沙盒开发之系统libc库定制修改 2013-7-29 22:29 11525 [原创]Android沙盒开发之系统libc库定制修改 2013-7-29 22:29 11525 ...

  3. sharepoint 2010 培训公司课程内容

    sharepoint 2010 培训公司课程内容:用之学习参考,引导. 1>sharepoint 2010开发概述; 2>VS2010 开发SHAREPOINT 2010; 3>sh ...

  4. 了解 SharePoint 2010 开发中的关键点

    **摘要:**了解为 Microsoft SharePoint 2010 规划和开发业务解决方案时必须做出的关键点. 上次修改时间: 2012年3月13日 适用范围: Business Connect ...

  5. SharePoint 2010应用开发系列

    这段时间一直在忙着写SharePoint 2010的MSDN,花了很大的精力来研究,在这里记录一下一些心得体会,希望能给大家带来帮助,共同进步.     各位如果也在研究SharePoint 2010 ...

  6. SharePoint 2010在WIN7系统下建立开发环境

    SharePoint 2010在WIN7系统下建立开发环境 (MSDN上有比较详细的介绍,地址:http://msdn.microsoft.com/en-us/library/ee554869%28o ...

  7. 关闭SharePoint 2010 customErrors

    在SharePoint 2010上做开发时,如果不把customErrors 关掉,那调试起来那真叫一个费劲.但在2010里,关闭customErrors还有点费劲,不像2007那么直接,只要修改we ...

  8. sharepoint 2010学习资源汇总

    上周五微软宣布 SharePoint 2010 RTM 发布了,这两天一直等着邮件,今天(美国太平洋时间22日上午10时,北京时间23日凌晨1时),MSDN 和 TechNet 订阅用户终于可以下载了 ...

  9. 将 SharePoint 2010 网站集升级到 2013 (含沙盒方案)

    SharePoint 2013 已经迫近眼前,提新的基于 SharePoint 的方案时,已经不能不考虑和解释与 2013 有关的内容了. 在这些需要考虑和解释的部分里面,沙盒解决方案的去留是我最关心 ...

最新文章

  1. Calendar类点点滴滴积累
  2. MySQL基于SSL协议的主从复制
  3. 十问十答 Ms-PL 许可证
  4. c语言格式对齐填充_C ++中类的大小 课堂上的填充和对齐| 派生类的大小
  5. Java笔记-Servlet相关记录
  6. 《机器人学导论--Join J.Craig》第一章 绪论
  7. U盘分区与启动是怎么回事?
  8. k1658停运到什么时候_2021年春运就要开始啦!快来看看各大快递的停运时间吧
  9. socket 网络通信(基于tcp协议)以及粘包解决方案
  10. TY_GASPX SQL
  11. MySQL的安装和基本操作
  12. 阿里HBase的GC优化实践,能够降低java垃圾回收时间!
  13. 用计算机绘制工作表,实用计算机机械图样绘制技法
  14. html ui windows 风格,5个最佳开源Metro风格(Windows UI)CSS框架
  15. 【WORD技巧合集】
  16. 手把手教你下载在线地图?!再也不用下了
  17. 如何清理windows server 2008 R2 中winsxs文件夹
  18. Win32消息集合----方便查阅
  19. 方舟原始恐惧mod生物代码_重磅!《命令与征服》和《红色警戒》源代码在GitHub公布了...
  20. Codeforces 1280C: Jeremy Bearimy

热门文章

  1. leetcode - 120. 三角形最小路径和
  2. 设计模式学习笔记——工厂(Factory)模式
  3. redis入门——服务器篇
  4. Vmware 连接局域网通过桥接方式
  5. 蔡高厅老师 - 高等数学阅读笔记 - 07 - 函数的微分 - 微分中值定理 罗尔、拉格朗日中值定理 (31、32、33、34、35)
  6. linux进程管理init,浅谈init进程
  7. java不同进程的相互唤醒_JAVA多线程之线程间的通信方式
  8. python人工自动抠图_python实现人工智能Ai抠图功能
  9. python读取音频文件_python 读取wav 音频文件的两种方式
  10. linux系统5.5安装教程,图解安装Debian 9.5全过程