Sharepoint學習筆記 –架構系列—Sharepoint的服務器端對象模型(Server Object Model) 2.內容層次結構


     Sharepoint的內容層次結構(Content Hierarchy)包括表示可發布數據項(publishable items),如列表項的類,還包括表示嵌套的數據容器(nested containers of data),如列表、內容數據庫、網站、網站集以及稱為"Web 應用程序"的網站集分組)的類。

    內容層次結構中的主要對象如下圖:

                

這里我們把Sharepoint的內容層次結構進一步細分成三個層次分別描述:

 一、高層次的對象模型(High Level Object Model)

在Sharepoint場中最高級別的內容容器(Content Container)就是Web應用程序(Web Application),它是由SPWebApplication類來表示的。

SPWebApplication 對象

    SPWebApplication對象在SharePoint Foundation 中表示用於發布內容的 Web 應用程序。該對象包含一個或多個內容數據庫(Content Database)以用於存儲一個或多個網站集數據。每個此類 Web 應用程序都由 IIS 網站提供服務並且在 IIS 中通常具有自己的應用程序池。 而且每個Web應用程序都有它們自己的安全(security)和身份認證(authentication)的相關設置。

    一個由SPWebApplication類表示的 SharePoint Foundation Web 應用程序,它基本上就是一組內容數據庫,其中每個內容數據庫均包含網站集;而網站集自身是網站的集合,這些網站又是文件的集合。

    但SharePoint Foundation Web 應用程序並不僅僅是最高級別的網站分組,它還是 SharePoint Foundation 部署在其上對 IIS 可見的層。每個 SharePoint Foundation Web 應用程序均通過一個 IIS 網站公開,並在 IIS 管理器的網站樹中出現。 下圖就是在一個SharePoint Foundation 前端 Web 服務器上顯示應用程序池和 IIS 網站的 IIS 管理器:

              

   上圖顯示的是在單一服務器上剛安裝 SharePoint Foundation 之后的 IIS 管理器。請注意,此安裝創建了兩個 IIS 網站,每個網站均具有它自己的應用程序池(和進程)。

   其中一個 IIS 網站針對的是用於向最終用戶提供內容的主要 SharePoint Foundation Web 應用程序,此網站名為"SharePoint - 80""80"為服務器端口號,將通過此端口號傳入 SharePoint Foundation 頁面的請求);

   另一個 IIS 網站名為"SharePoint Central Administration v3",可供 IT 專業人士用來執行高級管理任務。您也許能夠猜到為什么要創建單獨的 SharePoint Foundation Web 應用程序,而不是在"SharePoint - 80"內創建一個網站集或網站。通過將兩個 SharePoint Foundation Web 應用程序的進程隔離,即使"SharePoint - 80"內的某個網站上的錯誤代碼導致后面的 Web 應用程序在每次重啟后立即崩潰,網絡管理員仍然可以訪問管理中心。此外,通過使管理應用程序成為一個單獨的 Web 應用程序,管理員能夠為其指定與身份驗證和匿名用戶相關的不同策略。

    如果在具有多台服務器的場中安裝 SharePoint Foundation,並且前端服務器和后端服務器(在 SharePoint Foundation 中稱作"應用程序服務器")的配置不同,則"SharePoint 80"僅在前端服務器上運行。"SharePoint Central Administration v3"在一台應用程序服務器上(且僅在一台應用程序服務器上)運行。

"SharePoint Central Administration v3"應用程序之外的 SharePoint Foundation Web 應用程序稱作"內容發布 Web 應用程序"

     當創建初始"SharePoint - 80"Web 應用程序時以及創建任何內容發布 Web 應用程序時,都將為相應的 Web 應用程序創建新的內容數據庫。然后依次為新建的數據庫創建一個網站集,並為新建的網站集創建一個首要網站。

因此,SharePoint Foundation Web 應用程序中的所有網站集和網站(以及子網站)對於 IIS 來說只是一個大的網站而已。

     在創建 IIS 網站后,IIS 將自動為每個 IIS 網站提供它自己的應用程序池,並且每個應用程序池具有自己的進程。這樣,每個 SharePoint Foundation Web 應用程序將在自己的進程中運行。如果其中的某一個進程發生崩潰,則其他進程將繼續運行。這是 SharePoint Foundation Web 應用程序與對象模型層次結構中的較低層之間最重要的區別。

     內容數據庫(ContentDatabase)和網站集(Site Collection)彼此之間沒有進程隔離機制,但 Web 應用程序具有這種機制。

     嚴格來說,無需保持 IIS 網站與應用程序池之間的一對一關系。在 IIS 管理器中,可將網站從一個應用程序池移動到另一個應用程序池。因此,可以將多個 SharePoint Foundation Web 應用程序移動到同一個池中,從而共享同一進程。在某些情況下,為了獲得這種進程共享帶來的性能增強,有必要放棄崩潰保護。盡管如此,人們並不會經常使用進程共享。

 

SPWebApplication類的一些特征

    •SPWebApplication 對象是 SPWebService 對象的子對象。
    •SPWebApplication 類具有一個保存其所有子級 SPContentDatabase 對象的 ContentDatabases 屬性。(該類還具有一個方便使用的 Sites 屬性,利用該屬性可以獲取對其所有內容數據庫的全部網站集的引用,而不必首先獲取對一個或多個內容數據庫的引用。)
    •與管理中心應用程序類似,SPWebApplication 類使管理員能夠不用打開 IIS 管理器即可訪問 IIS 屬性。例如,IisSettings 屬性和 ApplicationPool 屬性提供對 SharePoint Foundation Web 應用程序分配到的 IIS 應用程序池的屬性的編程訪問。
    •SPWebApplication 繼承自 SPPersistedObject,這意味着該類的對象將保存在配置數據庫(Configuration Database)中。
    •SPWebApplication 具有很多可用於開發管理功能的成員。一些較重要的成員可幫助管理諸如: 安全策略,通知,文檔轉換,備份和還原 Web 應用程序,記錄 Web 應用程序的更改,出站電子郵件,外部工作流參與,使用 Windows Live MetaWeblog API,使用回收站,未使用的網站集,Web.config 文件修改 等等內容:
    •當 Web 應用程序需要使用某服務應用程序(Service Application)提供的數據或處理功能時,它會通過 SPServiceApplicationProxy 來完成。
    •SPWebApplication 類與 SPHttpApplication 類具有密切的關系。后一個類的對象是 HTTP 請求處理程序。SharePoint Foundation Web 應用程序分配到的進程(IIS 應用程序池)具有一個或多個處理定向到 Web 應用程序的頁面請求的 SPHttpApplication 對象

 

SPContentDatabase

    前面說了,每個 SharePoint Foundation Web 應用程序至少擁有一個內容數據庫(由SPContentDatabase類表示),此內容數據庫是在創建 Web 應用程序時自動創建的。可以根據需要向 Web 應用程序中添加更多內容數據庫。內容數據庫包含所有數據(列表、列表項、博客文章和評論、Wiki 網頁和文檔庫中的文檔)和大多數頁面文件,它們構成了屬於數據庫的網站集。

    某些屬於網站集的文件將存儲在 SharePoint Foundation 部署的前端服務器的文件系統中。乍一看,這似乎可能會損壞網站集作為內容數據庫的子集的系統性。不過,即使文件未存儲在內容數據庫中,它們也由該數據庫中的行表示。表示此類文件的表行將用作該文件的一種別名。

 SPContentDatabase類的某些特征

   •SPContentDatabase 對象是 SPWebApplication 對象的子對象。Web 應用程序的 ContentDatabases 屬性中將引用 Web 應用程序的內容數據庫的集合。
   •SPContentDatabase 類具有一個保存其所有子級 SPSite 對象的 Sites 屬性。
   •SPContentDatabase 繼承自 SPPersistedObject,這意味着實例化類的對象將保存在配置數據庫中。
   •SPContentDatabase 具有很多可用於開發管理功能的成員。一些較重要的成員可幫助管理諸如備份和還原數據庫、升級數據庫、遷移(移動)數據庫、修復數據庫、數據庫連接字符串以及登錄用戶名和密碼、限制網站集的數量等內容
   •SPContentDatabase 的大部分屬性是只讀的。
   •SPWebApplication 與SPContentDatabase類都繼承自SPPersistedObject,也就是說,它們的實例化的對象將保存在配置數據庫中。

 

 二、中間層次的對象模型(Middle Level Object Model)

    處於中間層次的對象模型是網站集(SiteCollection)和它的子集。其中SPWeb對象代表一個單獨的網站對象,而SPSite對象則代表處於同一個WebApplication中的多個網站對象組成的集合,這樣打包的目的是出於管理的需要。

 SPSite類

    SPSite類表示網站的集合,但它並不是一個實現了 ICollection 接口的類,因此SPSite 類其實並不是一個集合。(SPSiteCollection 類實現后一個接口。它才真正表示 SPSite 對象的集合。)
 以下是 SPSite 類的一些特征:
    •SPSite 對象表示 SPContentDatabase 對象的內容的子集。
    •SPSite 類具有一個保存其子級首要網站的 RootWeb 屬性。(在第一個版本的 SharePoint Foundation 中,即在 Microsoft SharePoint Team Services 中,首要網站【Top –level webstie】稱作"根網站"。)而表示首要網站的 SPWeb 對象則具有一個保存其所有"直接"子網站[immediate child subsites](但不是這些直接子網站所包括的更下一級的子網站)的 Webs 屬性。(AllWebs 屬性將返回所有 子網站和首要網站。)
    •SPSite 具有很多可用於開發管理功能的成員。一些較重要的成員可幫助管理諸如: 網站 URL 的最大長度、RSS 源、審核、不活動網站、功能、網站集的所有權、網站集的大小配額、網站使用率數據、網站集中的工作流、模板和 Web 部件庫、自助式網站創建等內容
    •SPSite 類中大約一半的方法都是用來返回某類信息的 Get* 方法,這些方法的大多數屬性都是只讀的。

網站集(由 SPSite 類表示)的存在可為網站所有者、服務器管理員和銷售 SharePoint Foundation 宿主服務的企業提供管理上的便利。

   以下是網站集的一些最重要的特征:
   •與 SharePoint Foundation Web 應用程序相比,SharePoint Foundation 網站集能夠為 SharePoint Foundation 部署提供更細化的管理,但特定網站自身的管理仍由網站所有者(他們通常不是 IT 專業人士)負責。
   •每個網站集有且僅有一個首要網站。對於某些類型的管理任務,最好是將網站集及其首要網站視為單個實體。例如,首要網站的"網站設置"頁面中包含一個"網站集管理"區域,首要網站的所有者可在此區域中激活網站集的功能,並從回收站中還原任何已刪除的網站集內容。另外,可以在首要網站中創建某些自定義實體(如自定義列)。之后,網站集中的所有網站都可以使用這些實體。
   •網站集橫跨網站所有者的管理責任與網站集管理員(通常不是 IT 專業人士)的管理責任之間的邊界。如上一條中所述,一些網站集級別的管理任務將由首要網站的所有者處理。但服務器管理員和網絡管理員可以使用管理中心的"應用程序管理"選項卡來創建和刪除網站集以及設置網站集的大小配額。
   •網站集(或嚴格來說是網站集的首要網站)是痕跡導航中最高級別的對象。(盡管子網站的用戶不一定能夠訪問層次結構中較高級別的每個網站,但他們可以在痕跡導航中看到這些網站。)
   •由網站集范圍和網站范圍的功能(feature)、內容類型(content type)、列表(list)、主題(theme)和工作流(workflow)組成的池在網站集級別進行維護並提供給子網站使用。也就是說Sharepoint中的master pages, Web Parts, themes, lists, content types, 以及 Features的作用范圍都可以達到Site Collection級別。也就是說可以把它們部署到Site Collection級別並對此Site Collection下的所有子級起作用。
   •網站集是可從中激活 SharePoint Foundation 功能的四個級別之一。其他三個級別為網站、Web 應用程序和場。
   •用戶組是在網站集級別進行維護並分配默認權限的。(可以在任何網站、列表或列表項級別更改這些權限。可以在任何網站的"網站設置"頁面上創建組。但不管在何處創建組,該組都將處於網站集級別並且對網站集中的所有網站可用。)也即一個Site Collection是Sharepoint用於創建用戶組(create groups of users)以及分配默認權限(default permission)的級別
   •可以在網站集內而不是網站集之間共享母版頁和 Web 部件。

   •網站集是層次結構中最高級別的對象,可以審核對它的訪問權。將在此級別維護審核數據庫。
   •一個網站集(Site Collection)是具有實用的備份和還原 API 的最小單元。(但可以使用未連接的數據庫和數據庫快照功能來備份和還原列表和其他更細化的單元。
   •在SharePoint Foundation中Site Collection是搜索(search)功能所能作用的最大范圍,如果你的搜索功能想要突破這個范圍限制,就必須要使用SharePoint Server 2010。
   •一個網站集(site collection)的內容(content)總是被存儲在一個內容數據庫(a single content database)中的。
   •每個網站集都有一名網站集管理員

 

SPWeb類

   SPWeb 類表示一個 SharePoint Foundation 網站。網站是一個包含一個或多個網頁的集合,它通常包含一組列表、文檔庫、內容類型、字段(列)類型、一組可用功能、一組用戶警告以及一組工作流實例。此外,網站還具有一個所有者和一組關聯的用戶和用戶組。可以通過編程方式在網站中添加或刪除所有這些類型的實體。網站也可以作為搜索范圍。
   以下是 SPWeb 類的某些特征:
   •SPWeb 對象可以是另一個 SPWeb 對象或 SPSite 對象的子對象。如果它是 SPSite 對象的子對象,則將是網站集中的首要網站(Top-level Website)。
   •SPWeb 對象具有一個可返回其他 SPWeb 對象的集合(具體是指它下面的直接子網站)的 Webs 屬性。
   •該類提供了一組非常豐富的成員,可用於編程管理和網站自定義。
   •網站的層次結構始終必須具有一個首要網站。此網站是 SPSite 對象的子對象。

   一個SPWeb類有許許多多的屬性和方法用於處理網站(Website)的相關內容,包括它們的用戶、列表、字段,內容類型,功能,報警等方方面面。SPWeb類也包含一個關鍵的Update()方法,該方法用於將更改提交到 SharePoint Foundation 數據庫。

Sharepoint的網站 與ASP.NET傳統網站的比較:

   一個由 SPWeb 類表示的 SharePoint Foundation 網站,它是經過優化以便進行內容管理和協作的 ASP.NET 網站。該網站主要在以下幾個方面與其他 ASP.NET 應用程序不同:
    •該網站不再強調頁面,而是改為強調列表(List)和列表項(List Item)。例如,SharePoint Foundation 網站(類型為 STS)的"快速啟動"會顯示一個網站、子網站和列表(包括列表的列表)的層次結構,而不是頁面本身構成的層次結構。如果向此網站添加頁面,則新的頁面在"快速啟動"中將作為共享文檔列表中的新項出現,而不是作為主頁或某些其他頁面下的子節點出現。
    •該網站賦予用戶管理能力。任何給定用戶所具有的能力大小由授予該用戶的權限決定。通常,最終用戶能夠創建全新的網站(作為現有網站的子網站),並能夠在現有網站上添加和編輯內容。
    •該網站是可以在其上激活 SharePoint Foundation 功能(Feature)的四個級別之一。其他三個級別為網站集(Site Collection)、Web 應用程序(Web Application)和場(Farm)。
    •網站是網站集內容的子集這一事實並不表示給定集合中兩個網站的內容會相互排斥:例如,一個給定列表可以在多個網站上出現。

 

關於SPSite與SPWeb兩個對象的創建與銷毀:

     由於Sharepoint的最早期版本在.NET Framework出現之前就存在了,而現在Sharepoint中的SPWeb與SPSite則是源自早期的版本並由此發展而來的,所以,甚至到了現在SPWeb與SPSite仍包裝了一些COM對象,這些COM對象是無法讓.NET Framework的垃圾回收(Garbage collection)機制自動回收的,如果你在使用它們之后沒有正確的銷毀它們,就很容易引起Sharepoint場服務器的內存泄漏。所以Sharepoint開發人員有必要調用SPWeb或SPSite的Dispose方法來及時釋放它們。值得注意的是,SPContext 對象由 SharePoint 框架進行管理並且不應該在代碼中明確釋放。SPContext.SiteSPContext.Current.SiteSPContext.WebSPContext.Current.Web 返回的 SPSiteSPWeb 對象也是如此。每當在同一行上合並 SharePoint 對象模型調用時,必須慎重並知道運行庫所做的操作。這種情況引發的泄露最難找到。

 

 三、低層次的對象模型(Low Level Object Model)

  這個層次的對象模型包括列表(List)和列表項(List items),它們分別由SPList 和 SPListItem 這兩個類來表示。

SPList類提供了不少的成員支持程序員通過代碼增、刪和獲取列表項,並支持管理諸如內容類型(content type)和字段(fields)等的元數據(metadata)。返回特定列表的高效方法是通過 SPWeb 或 SPListCollection 的 GetList 方法。ListItem類也提供了成員以支持管理列表項的字段(fields)、字段值(value of its fields)、它的內容類型以及與之關聯的工作流(workflow)。返回列表項或 SPListItemCollection 的高效方法是通過 SPList 或 SPWeb 的 GetItem* 方法。 文件夾(Folder)在Sharepoint則由SPFolder類表示。SPFolder 類的 Files 屬性返回文檔庫文件夾中的所有文件,而 SPWeb 的 Files 屬性返回網站中使用的 .aspx 文件。返回特定文件夾的有效方式是使用網站的 GetFolder() 方法。列表項中的字段由SPField對象來表示。。
 
   需要注意的是,雖然任何給定的列表項都有特定的內容類型與之關聯,Sharepoint的對象模型只提供SPListItem類來表示所有的列表項。因此,當你操作列表項及其字段時,你更像在與一個弱類型環境(weakly typed enviorment)打交道。所以Sharepoint提供了SPMetal這個工具,SPMetal 是一類用於生成實體類的命令行工具,這些類可向 Microsoft SharePoint Foundation 內容數據庫提供面向對象的界面。雖然這些類主要用於 LINQ to SharePoint 查詢,但它們也可用於通過利用並發沖突解決方法來添加、刪除和更改列表項。此外,還可將它們作為用於引用內容的常規 SharePoint Foundation 對象模型的替代項使用。使用SPMetal生成的實體類的好處就是你可以在編碼階段就發現那些有可能在運行時才能發現的某些錯誤。 比如說:某個列表中有一個字段名為Country的字段,程序員在通過傳統方式獲取這個字段的值時可能使用了myItem["Country"]代碼,如果他把字段名用錯了,比如用成了myItem["Countyr"],類似這種拼寫錯誤,那么這種錯誤只會在運行時才能表現出來。但當你使用了SPMetal來生成實體類時,你就會看到myTask.Country這樣的代碼自動提示,從而更早避免了此類錯誤。

 

當然SPMetal也有如下限制:

   •SPMetal 只能為內容類型的字段 生成代碼。不存在到 SPListItem 對象的屬性(例如 Properties 屬性包或 Attachments 屬性)的內置映射。
   •SPMetal 不能為使用自定義字段數據類型的字段生成代碼。
   •SPMetal 無法預測未來,因此無法映射在部署解決方案后用戶將添加到列表中的字段(列)

下圖展示了Sharepoint各對象之間的關系(當然,還包括了物理層次結構與服務結構)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM