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

沙箱解決方案支援哪些類型的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開發來說是個革命性的設計,不同的團隊可以執行各自所開發出來的沙箱解決方案, 而且不會相互影響. 確實帶來了安全性與方便性.

时间: 2024-08-25 11:01:50

[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.Web.PasteJson.dll 下载 2.https://dotblogs.com.tw/terrychuang/archive/2014/11/18/147350.aspx 開啟Visual Studio 2013時,出現Microsoft.VisualStudio.Web.PasteJson.

關於php接ICBC的支付接口的解決方案

一:背景: 目前項目使用的是php語言開發,需要接入中國工商銀行的ICBC的線上支付接口. 二:遇到的問題:支付時需要對數據簽名,但是銀行那邊不提供php版本的程序,只有java版本的,以下是對接人回復的郵件: 三:思路: 目前大概有3種解決方案: 1.  通過使用一個叫 php-java-bridge 的插件,在php中調用java的函數 2. 把java的函數改寫成php版本 3. 在服務器配置javaWeb環境,通過http請求把簽名的參數傳入,從而獲取簽名 四: 具體做法: 我採取的是第

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

Python格式錯誤解決方案及案例 這幾天在玩爬蟲,在解析和提取内容時經常出現由於内容格式問題導致出錯,為防止以後出錯,整下一下,以下是這幾天的總結: 1. 特殊符號或表情符號等 背景:爬取一個烹飪教學網站,在用BeautifulSoup解析網頁時報錯: UnicodeEncodeError: 'UCS-2' codec can't encode character '\U0001f44d' in position 0: Non-BMP character not supported in Tk

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

未使用 VPN Cisco Anyconnect 已連線到公司的網路: google-chrome-stable --proxy-server="proxy.XXXcomm.com:3128" 未連線到公司的網路: google-chrome-stable 使用 VPN Cisco Anyconnect google-chrome-stable 為什麼實體連線要設 proxy 呢? 因為實體連線後,NB是屬於公司內部電腦的一份子,全部設定要依公司 為什麼 VPN 連線不需要設 prox

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 "[INS-20802] Oracle Net Configuration Assistant failed 2.問題描述 在window 7安裝Oracle Client12C的時候遇到INS-20802 Oracle Net Configuration Assistant失敗的問題,百度了很多

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

昨天碰到了一个问题,一个网站在从SharePoint 2010升级到SharePoint 2013后,人员都不能登录了,必须重加赋权,人员才能登录,这样非常麻烦. 原因:是认证方式的问题.在SharePoint 2010中,通过管理中心新建web application的时候,就会发现提供了两种不同的认证方式,第一种是classic auth(也就是我们通俗的称为windows 认证,其实这种叫法也不全面),另一种是claim base auth. 而当时claim base的认证方式微软还没有

通过PowerShell卸载所有的SharePoint 2010 解决方案

通过PowerShell卸载所有的SharePoint 2010 解决方案 为了演示,我经常需要拆毁再重建SharePoint 2010 环境. 我经常需要用到的操作就是移除demo开发环境中所有安装的SharePoint 解决方案. 这里是PowerShell脚本.它节省了我大量的时间,我希望也能给你带来帮助. 脚本: function Uninstall-AllSPSolutions { param ( [switch] $Local, [switch] $Confirm ) Start-S

Sharepoint 2010 工作流启动时处理出错

在Sharepoint 2010 中使用Sharepoint 2010 designer做了一个工作流: 运行工作流时,当主办工程师是“张三”的时候,工作流一启动就报错. ------------------------------------------------------------------------------------ 排查方法 : 1.重新编制工作流,发送给其他用户.工作流正常运行. 2.新建审批工作流,把审批对象设置为“张三”.工作流运行时报错. ------------

通过PowerShell卸载全部的SharePoint 2010 解决方式

通过PowerShell卸载全部的SharePoint 2010 解决方式 为了演示.我常常须要拆毁再重建SharePoint 2010 环境. 我常常须要用到的操作就是移除demo开发环境中全部安装的SharePoint 解决方式. 这里是PowerShell脚本.它节省了我大量的时间.我希望也能给你带来帮助. 脚本: function Uninstall-AllSPSolutions { param ( [switch] $Local, [switch] $Confirm ) Start-S