現有的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管理者去安裝. 所以,每個團隊可以製做自己所需要的沙箱解決方案並且安裝起來執行,這些沙箱解決方案是不會影響到其他的團隊程式運作的.

沙箱解決方案支援哪些類型的SharePoint 2010開發專案呢?
  • 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的資料夾,裡面有三隻程式,就是負責執行沙箱解決方案,它們分別是:

  1. SPUCHostService.exe: 
    主要的Windows服務,安裝在每一台伺服器農場的伺服器上面,可以透過服務管理介面來管理它.
  2. SPUCWorkerProcess.exe:
    實際執行執行沙箱解決方案的背景程式.
  3. SPUCWorkerProcessProxy.exe: 
    這是新一代SharePoint 2010架構下,服務應用程式(Service Application) 的代理人界面程式(Proxy). 外界要呼叫SPUCWorkerProcess.exe就是要透過這個代理人界面程式.

在沙箱解決方案中你可以呼叫Microsoft.SharePoint局部的功能.可呼叫的功能有:

  1. Microsoft.SharePoint (以下除外)
    • SPSite建構子
    • SPSecurity物件
    • SPWorkItem與SPWorkItemCollection物件
    • SPAlertCollection的Add方法
    • SPAlertTemplateCollection的Add方法
    • SPUserSolution與SPUserSolutionCollection物件
    • SPTransformUtilities類別
  2. Microsoft.SharePoint.Navigation
  3. Microsoft.SharePoint.Utilities (以下除外)
    • SPUtility的SendEmail方法
    • SPUtility的GetNTFullNameandEmailFromLogin方法
  4. Microsoft.SharePoint.Workflow
  5. Microsoft.SharePoint.WebPartPages (以下除外)
    • SPWebPartManager物件
    • SPWebPartConnection物件
    • WebPartZone物件
    • WebPartPage物件
    • ToolPane物件
    • ToolPart物件

在安全政策方面,在Code Access Security也做了一些限制,而採取的是局部信任而非完全信任,三個主要的允許的安全政策分別是:

  1. SharePointPermission.ObjectModel
  2. SecurityPermission.Execution
  3. 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中. 未來佈署到正式環境就只要把這個

.wsp檔案上傳到Site Collection管理介面的Solution Gallery中.

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

沙箱解決方案有哪些限制?

沙箱解決方案主要的限制有下列三項:

  • 只能執行局部Microsoft.SharePoint的功能
  • Code Acess Security政策限制
  • 自訂的API封鎖清單
第一項與第二項在前面的段落已經做過說明,由微軟提供. 第三項的部分是由我們自行做維護的.我們可以很輕易的維護清單內容來達到限制的效果.
 
沙箱解決方案是執行在局部信任的狀態下,有兩種執行模式:
  • 本機模式
    1. 在網站前端主機內運作
    2. 較低的管理負擔
    3. 延展能力較差
  • 遠端模式
    1. 在後端的機器上運作
    2. 可以做到平衡負載的效果
如果真的需要存取完全信任才能存取的資源,我們可以建立一個服務應用程式(Service Application)去存取完全信任才能存取的資源,這個服務應用程式(Service Application)開放出一個代理人介面(Proxy)讓我們的沙箱解決方案去呼叫,如此一來就可以執行完全信任才能做的事情.
 
要建立這樣一個服務應用程式(Service Application)與

代理人介面(Proxy),其步驟如下:
  • 繼承SPProxyOperationArgs建立自己的Args類別
  • 繼承SPProxyOperation建立Operation類別並且複寫Execute方法
  • 將服務應用程式(Service Application)註冊
  • 沙箱解決方案中,透過SPUtility.ExecuteRegisteredProxyOperation()呼叫代理人介面(Proxy)
如何管理沙箱解決方案?

有關沙箱解決方案的管理,在伺服器農場Farm上可以做到執行資源的絕對限制,或是封鎖某個

沙箱解決方案等等.在網站集合Site Collection上我們可以進行使用資源的監控.
封鎖沙箱解決方案與資源平衡負載設定的位置在Central Administration Page->System Settings->Manage User Solutions.

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

 
沙箱解決方案對SharePoint開發來說是個革命性的設計,不同的團隊可以執行各自所開發出來的沙箱解決方案, 而且不會相互影響. 確實帶來了安全性與方便性.

[SharePoint 2010]Sandboxed Solution (沙箱解決方案)的更多相关文章

  1. 开启Visual Studio 2013时,出现Microsoft.VisualStudio.Web.PasteJson.JsonPackage无法载入的可能解決方案

    1.先下载:http://www.jb51.net/dll/Microsoft.VisualStudio.Web.PasteJson.dll.html Microsoft.VisualStudio.W ...

  2. Python編碼格式錯誤解決方案及案例

    Python格式錯誤解決方案及案例 這幾天在玩爬蟲,在解析和提取内容時經常出現由於内容格式問題導致出錯,為防止以後出錯,整下一下,以下是這幾天的總結: 1. 特殊符號或表情符號等 背景:爬取一個烹飪教 ...

  3. NB實體連線到公司的網路,無法上網解決方案,需設 proxy。

    未使用 VPN Cisco Anyconnect 已連線到公司的網路: google-chrome-stable --proxy-server="proxy.XXXcomm.com:3128 ...

  4. 通过脚本调用MSBuild编译项目时指定Configuration(解決方案配置)和Platform(解決方案平台),Rebuid(重新生成解决方案),Clean(清理解决方案)

    为了方便打包测试,自己PowerShell写了一个编译和发布的脚本,调用msbuild通过命令行来编译当前解决方案 后来发现一个问题,用VS编译解决方案,我通过 项目属性-Build设置 Releas ...

  5. [解決方案]IIS配置后报错500.21

    如果报错这个信息,那么就是aspnet未注册造成的,需要安装一下 步骤: 1.打开CMD 2.输入cd %windir%\Microsoft.Net\Framework\v4.0.30319 3.执行 ...

  6. 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 ...

  7. 終于解決调用wordpress 4.3 xmlrpc api 发布包含分类的文章时返回“抱歉,文章类型不支持您的分类法”错误的問題

    這個問題我找了很多資料都沒有明說是如何解決,后來突發奇想得出我的解決方案如下,所以特此記錄一下: object postId = blogService.NewPost(0,"admin&q ...

  8. 解決從Ubuntu 12.04升級至12.10之後的Unity顯示問題

    FROM: http://blog.sina.com.cn/s/blog_97ef3ff4010190pe.html#bsh-75-306370781 今天中午經過系統自帶的“檢查更新”軟件從Ubun ...

  9. SharePoint 2010升级到sharePoint 2013后,人员失去对网站的权限的原因及解决方法。The reason and solution for permission lost after the upgrading

    昨天碰到了一个问题,一个网站在从SharePoint 2010升级到SharePoint 2013后,人员都不能登录了,必须重加赋权,人员才能登录,这样非常麻烦. 原因:是认证方式的问题.在Share ...

随机推荐

  1. 连载:面向对象葵花宝典:思想、技巧与实践(35) - NOP原则

    NOP.No Overdesign Priciple.不要过度设计原则. 这应该是你第一次看到这个原则.而且你也不用上网查了,由于这个不是大师们创造的,而是我创造的:) 之所以提出这个原则,是我自己吃 ...

  2. C# 添加,修改,删除Xml节点 摘录

    C# 添加,修改,删除Xml节点 //添加xml节点    private void AddXml(string image, string title)     {        XmlDocume ...

  3. Redis(十九):Redis压力测试工具benchmark

    redis-benchmark使用参数介绍 Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求. (类似于 Apache ab 程序).你可以使用 ...

  4. java后台分页实例一

    后台框架:jfinal + velocity.前台框架:jquery  页面 <!DOCTYPE html> <html> <head> <meta char ...

  5. C++ virtual继承

    C++ virtual继承的还有一种名称是菱形继承.主要目的是用于解决从不同类继承来的同名数据成员在内存中有不同的拷贝.造成数据不统一的问题,以致于在进行类释放时造成内存泄漏. 将共同的基类作为虚基类 ...

  6. django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息

    django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...

  7. Makefile学习之路5——通过函数增强功能

    通过函数能显著增强Makefile的功能.对于simple项目的Makefile,尽管使用了模式规则,但还是有一件比较麻烦的事情,就是要在Makefile中指明每一个项目源文件.下面介绍几个后期会使用 ...

  8. java服务端json结果集传值给前端的数据输出格式

    在服务端输出json数据时按照一定的格式输出时间字段,fastjson支持两种方式:1.使用JSON.toJSONStringWithDateFormat方法2.JSON.toJSONString方法 ...

  9. 【pywin32总结】

    #下面是必备的#注意!所有方法后面都要加括号()!!! import win32com from win32com.client import Dispatch,constants w = win32 ...

  10. HTTP Header Accept-Language的ctf

    题目也不知道该怎么取,但是是实在的一个案例.分享给大家. 种族歧视分值: 300 小明同学今天访问了一个网站,竟然不允许中国人访问!太坑了,于是小明同学决心一定要进去一探究竟!  发现accept-L ...