現有的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. HTML十进制字符编号

    有时候写文章时,段落里引用的代码莫名的就被解释到原本的html中了,通过用一些HTML里特殊字符的编码即可回到原文,保留原格式. 字符 十进制字符编号 实体名字 说明 ! ! — 惊叹号Exclama ...

  2. obj 格式注意事项

    用Adreno Profiler分析图形效果的实现过程时,需要将特效涉及到的模型导出,以便进行多角度的详细查看,结果发现Adreno Profiler导出模型的功能有bug,总是报错并生成一个残缺的. ...

  3. OpenCV3+Python3

    OpenCV3计算机视觉Python语言实现笔记 图像处理与OpenCV Python3与OpenCV3.3 图像处理 OpenCV文摘 基于Python3 + OpenCV3.3.1的远程监控程序 ...

  4. How to Install Xcode, Homebrew, Git, RVM, Ruby & Rails on Snow Leopard, Lion, Mountain Lion, and Mavericks

    After following many outdated and incomplete instructions for setting up a web development environme ...

  5. C Pointer-to-Function 与 C++ Pointer-to-MemberFunction 的区别

    在看APUE Figure1.10的时候发现signal(SIGINT, sig_int)这里的sig_int直接用的函数名,但是看Thinking-in-C++ Vol.2的时候发现mem_fun( ...

  6. Git出现error: Your local changes to the following files would be overwritten by merge: ... Please, commit your changes or stash them before you can merge.的问题解决(Git代码冲突)

    在使用git pull拉取服务器最新版本时,如果出现error: Your local changes to the following files would be overwritten by m ...

  7. MongoDB(一):关系型数据库和非关系型数据库

    一.关系型数据库 1.概念 关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统.简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间 ...

  8. Windows 一键安装 Redmine 部署及配置

    Redmine的主要功能包括 添加和跟踪问题(或让您的团队完成). 使用Redmine内置的甘特图和日历计划和管理您的项目. 使用项目wiki和文档管理器来存储项目文档. 配置通知以保持有关问题状态和 ...

  9. 关于Aspose强大的应用--EXECL

    protected void btnConfirg_Click(object sender, EventArgs e) { genExcel(); } //设置内容文字色 表中有一个蓝色文字列和绿色文 ...

  10. Hadoop周边生态软件和简要工作原理(一)

    转自:http://www.it165.net/admin/html/201307/1531.html 基本都是在群里讨论的时候,别人问的入门问题,以后想到新的问题再补充进来.但是其实入门问题也很重要 ...