[SharePoint 2010]Sandboxed Solution (沙箱解決方案)
現有的SharePoint 2007系統中,我們如果要安裝客製化的程式碼到系統中,我們必須製作一個解決方案包裝檔(Solution Package),然後在系統的中央管理後台中,真對整個伺服器農場Farm發佈出去. 使用解決方案包裝檔(Solution Package)的好處是在一個多台伺服器的環境中可以一次性將客製化程式碼發佈出去. 然而, 現有的解決方案包裝檔可以存取每一台伺服器上的資源,而且我們為了方便通常會給予很高的執行權限或者是將它部屬到Global Assembly Cache中. 對整體的系統而言,傳統的解決方案包裝檔是不安全的做法.
為何我們需要沙箱解決方案?
現有的SharePoint 2007系統中,我們如果要安裝客製化的程式碼到系統中,我們必須製作一個解決方案包裝檔(Solution Package),然後在系統的中央管理後台中,真對整個伺服器農場Farm發佈出去. 使用解決方案包裝檔(Solution Package)的好處是在一個多台伺服器的環境中可以一次性將客製化程式碼發佈出去. 然而, 現有的解決方案包裝檔可以存取每一台伺服器上的資源,而且我們為了方便通常會給予很高的執行權限或者是將它部屬到Global Assembly Cache中. 對整體的系統而言,傳統的解決方案包裝檔是不安全的做法.
新版的SharePoint 2010中,我們可以製作新的解決方案:沙箱解決方案. 沙箱解決方案的執行範圍被限制在一個Site Collection網站集合內. 對整個系統而言是較為安全的做法. 管理上而言,沙箱解決方案可以由Site Collection管理者自行上傳到Solution Gallery內並且啟動或是停止. 這些都不需要傳統的伺服器農場Farm管理者去安裝. 所以,每個團隊可以製做自己所需要的沙箱解決方案並且安裝起來執行,這些沙箱解決方案是不會影響到其他的團隊程式運作的.
- Content Types, Site Columns
- Custom Actions
- Declarative Workflows
- Event Receivers, Feature Receivers
- InfoPath Forms Services, JavaScript, AJAX, jQuery, Silverlight
- List Definitions
- Non-visual web parts
- Site Pages
- SharePoint Online
沙箱解決方案如何運作呢?
新的SharePoint 2010系統中,是透過一個名為Microsoft SharePoint Foundation Sandboxed Code Service的服務來執行沙箱解決方案,你可以在後台管理介面中,選擇System Settings->Manage services on server找到它.
在SharePoint 2010安裝路徑中,你也可以看到在%Program File%\Common Files\Microsoft Shared\Web server extension\14底下有一個User Code的資料夾,裡面有三隻程式,就是負責執行沙箱解決方案,它們分別是:
- SPUCHostService.exe:
主要的Windows服務,安裝在每一台伺服器農場的伺服器上面,可以透過服務管理介面來管理它. - SPUCWorkerProcess.exe:
實際執行執行沙箱解決方案的背景程式. - SPUCWorkerProcessProxy.exe:
這是新一代SharePoint 2010架構下,服務應用程式(Service Application) 的代理人界面程式(Proxy). 外界要呼叫SPUCWorkerProcess.exe就是要透過這個代理人界面程式.

在沙箱解決方案中你可以呼叫Microsoft.SharePoint局部的功能.可呼叫的功能有:
- Microsoft.SharePoint (以下除外)
- SPSite建構子
- SPSecurity物件
- SPWorkItem與SPWorkItemCollection物件
- SPAlertCollection的Add方法
- SPAlertTemplateCollection的Add方法
- SPUserSolution與SPUserSolutionCollection物件
- SPTransformUtilities類別
- Microsoft.SharePoint.Navigation
- Microsoft.SharePoint.Utilities (以下除外)
- SPUtility的SendEmail方法
- SPUtility的GetNTFullNameandEmailFromLogin方法
- Microsoft.SharePoint.Workflow
- Microsoft.SharePoint.WebPartPages (以下除外)
- SPWebPartManager物件
- SPWebPartConnection物件
- WebPartZone物件
- WebPartPage物件
- ToolPane物件
- ToolPart物件
在安全政策方面,在Code Access Security也做了一些限制,而採取的是局部信任而非完全信任,三個主要的允許的安全政策分別是:
- SharePointPermission.ObjectModel
- SecurityPermission.Execution
- AspNetHostingPermission.Level = Minimal
如果你想要有完全信任的設定去使用重要的資源,你可以建立一個自己的 服務應用程式(Service Application),這個程式擁有完全信任的設定. 然後對外開放一個代理人介面(Proxy),讓沙箱解決方案來透過呼叫代理人介面(Proxy).
要建立沙箱解決方案,可以在Visual Studio 2010中去建立SharePoint 2010的專案,如果專案的類型是可以用沙箱解決方案去執行的.那麼系統會讓你選擇建立一個沙箱解決方案或是一般的伺服器農場方案. 下列的例子,就是我們要去建立一個沙箱解決方案,裡面含有一個自訂動作Custom Action,啟動它可以在 Site Action的功能表中,發現Youtube的網頁連結.
首先,在Visual Studio 2010中,建立一個空白的SharePoint 2010專案, .NET Framework版本要選擇3.5版. 接下來Visual Studio 2010就會問你要建立一個沙箱解決方案或是一般的伺服器農場方案. 專案開起來之後,您也可以在專案屬性式窗中變更解決方案輸出的類型.這時就可以切為一般的伺服器農場方案.

在新的專案中,我們需要新增加一個Feature,它的步驟是在Features目錄上按右鍵然後選擇Add Feature.下一個步驟就是在專案中. 下一步,就是新增一個空白的Element檔案,我們可以在專案上,按右鍵去新增一個項目,在對話框中選擇空白的Element檔案. 接下來在空白的Element檔案中,填入下面的範例程式,他會建立一個Site Action項目連結到Youtube.


接下來,你就可以將專案做佈署的動作了. 這時你就會看到瀏覽器被開起來, 我們所製作的沙箱解決方案就會出現在Site Collection Administration->Solution中,而且狀態是啟動的. 事實上Visual Studio 2010是將你的專案包裝成附檔名為.wsp沙箱解決方案,然後將它上傳到Solution Gallery中. 未來佈署到正式環境就只要把這個

接下來可以去Site Action選單中找尋我們加入項目並且測試可否連接到Youtube.

沙箱解決方案有哪些限制?
沙箱解決方案主要的限制有下列三項:
- 只能執行局部Microsoft.SharePoint的功能
- Code Acess Security政策限制
- 自訂的API封鎖清單
- 本機模式
- 在網站前端主機內運作
- 較低的管理負擔
- 延展能力較差
- 遠端模式
- 在後端的機器上運作
- 可以做到平衡負載的效果
- 繼承SPProxyOperationArgs建立自己的Args類別
- 繼承SPProxyOperation建立Operation類別並且複寫Execute方法
- 將服務應用程式(Service Application)註冊
- 沙箱解決方案中,透過SPUtility.ExecuteRegisteredProxyOperation()呼叫代理人介面(Proxy)
有關沙箱解決方案的管理,在伺服器農場Farm上可以做到執行資源的絕對限制,或是封鎖某個

資源使用上限的設定位於: Central Administration Page->Application Management->Configure quotas and locks.


[SharePoint 2010]Sandboxed Solution (沙箱解決方案)的更多相关文章
- 开启Visual Studio 2013时,出现Microsoft.VisualStudio.Web.PasteJson.JsonPackage无法载入的可能解決方案
1.先下载:http://www.jb51.net/dll/Microsoft.VisualStudio.Web.PasteJson.dll.html Microsoft.VisualStudio.W ...
- Python編碼格式錯誤解決方案及案例
Python格式錯誤解決方案及案例 這幾天在玩爬蟲,在解析和提取内容時經常出現由於内容格式問題導致出錯,為防止以後出錯,整下一下,以下是這幾天的總結: 1. 特殊符號或表情符號等 背景:爬取一個烹飪教 ...
- NB實體連線到公司的網路,無法上網解決方案,需設 proxy。
未使用 VPN Cisco Anyconnect 已連線到公司的網路: google-chrome-stable --proxy-server="proxy.XXXcomm.com:3128 ...
- 通过脚本调用MSBuild编译项目时指定Configuration(解決方案配置)和Platform(解決方案平台),Rebuid(重新生成解决方案),Clean(清理解决方案)
为了方便打包测试,自己PowerShell写了一个编译和发布的脚本,调用msbuild通过命令行来编译当前解决方案 后来发现一个问题,用VS编译解决方案,我通过 项目属性-Build设置 Releas ...
- [解決方案]IIS配置后报错500.21
如果报错这个信息,那么就是aspnet未注册造成的,需要安装一下 步骤: 1.打开CMD 2.输入cd %windir%\Microsoft.Net\Framework\v4.0.30319 3.执行 ...
- Oracle12c client安裝報錯[INS-20802] Oracle Net Configuration Assistant failed完美解決
Doc ID 2082662.1 1.錯誤碼 Installation Of Oracle Client 12.1.0.2.0 (32-bit) Fails With An Error Message ...
- 終于解決调用wordpress 4.3 xmlrpc api 发布包含分类的文章时返回“抱歉,文章类型不支持您的分类法”错误的問題
這個問題我找了很多資料都沒有明說是如何解決,后來突發奇想得出我的解決方案如下,所以特此記錄一下: object postId = blogService.NewPost(0,"admin&q ...
- 解決從Ubuntu 12.04升級至12.10之後的Unity顯示問題
FROM: http://blog.sina.com.cn/s/blog_97ef3ff4010190pe.html#bsh-75-306370781 今天中午經過系統自帶的“檢查更新”軟件從Ubun ...
- SharePoint 2010升级到sharePoint 2013后,人员失去对网站的权限的原因及解决方法。The reason and solution for permission lost after the upgrading
昨天碰到了一个问题,一个网站在从SharePoint 2010升级到SharePoint 2013后,人员都不能登录了,必须重加赋权,人员才能登录,这样非常麻烦. 原因:是认证方式的问题.在Share ...
随机推荐
- REST测试工具之curl(URL多参数)
在微服务理念满天飞的今天,面对REST接口的机会越来越多. 除了打开浏览器的方法,我们还有一个很方便的方法测试REST接口,尤其是接口返回JSON数据格式时. 这就是curl. 一.安装篇 给一个可以 ...
- c# ComboBox绑定枚举
定义枚举 public enum UserLevel { Commmon = , Administrator, Developer } 方法一 private void Method1() { com ...
- string.Format字符串格式化说明
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- hibernate 中集合的保存
一.开发流程 1)引入jar包,注意引入数据库驱动包 2)创建数据库表 //创建用户表 CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, un ...
- [Jobdu] 题目1504:把数组排成最小的数
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...
- html中iframe子页面与父页面元素的访问以及js变量的访问
1.子页面访问父页面元素 parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素 document.ge ...
- iOS状态栏标志
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; //显示 [UIApplication sharedA ...
- Makefile 9——为依赖关系文件建立依赖关系
现在我们再对complicated项目做一些更改,增加程序文件间依赖关系的复杂度. /× main.c ×/ #include"foo.h" int main(void) { fo ...
- phan—php语法静态检查在windows下的配置
php7推出了语法树,于是静态语法分析更方便了.(可以直接下载我配置好的,传送门百度网盘) 1.先安装php7,到http://windows.php.net/下载php7带openssl的. 2.修 ...
- EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
EAGAIN.EWOULDBLOCK.EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 EINTR指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到 ...