[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上可以做到執行資源的絕對限制,或是封鎖某個