- SharePoint 2010開發最佳實踐
- 王浩編著
- 6371字
- 2019-01-01 14:48:49
1.4 SharePoint 2010基礎概念
本節將介紹SharePoint 2010中的一些主要概念,以作為后續開發的基礎,理解這些關鍵的概念將對以后的開發有很大幫助。
1.4.1 服務器場
簡單的理解,服務器場就是一系列服務器的集合。在簡單的應用里,SharePoint 2010的所有功能可以部署在單一的服務器里;在生產環境里,SharePoint 2010的運行環境可以由多臺服務器組成一個服務器場,包括Web前端服務器、應用程序服務器(包括爬網服務器、查詢服務器等)、數據庫服務器。
如圖1-1所示是一個大規模的服務器場應用,每個服務器角色都分成了若干個服務器組,比如Web服務器就包括處理所有請求的服務器和存儲索引的Web服務器,其中處理請求的服務器可以通過負載平衡器進行統一訪問定位,負載平衡器有硬件和軟件兩種解決方案,這里不做贅述。

圖1-1 服務器場架構
應用程序服務器角色主要包括了爬網服務器組、查詢服務器組、其他應用程序服務器組(如托管元數據服務、Excel計算服務等),以及專屬的沙盒解決方案應用程序服務器。SharePoint 2010可以搜索多至1億條數據,配置Fast Search Server For SharePoint 2010的情況下更可以多至10億條數據。但是每個查詢服務器只能提供最多1000萬條數據的服務。如果部署了SharePoint Foundation的服務器,則如前文所述只支持300000條數據的搜索服務。
數據庫服務器角色主要包括了存儲爬網后供搜索用的搜索服務器,存儲站點集內容的內容數據庫服務器,存儲其他內容比如管理站點配置數據的其他數據庫服務器。在企業級的應用里,每組數據庫服務器都可以通過群集來提供更加可靠的服務。
1.4.2 Web應用程序
SharePoint 2010建立于IIS 7.0之上,所有默認的IIS網站里IIS會監聽來自相關管理端口的請求,Web應用程序擴展了IIS網站,并因而也具有IIS網站一樣獨立的運行端口、獨立的身份認證體系、獨立的應用程序池、單獨的web.config文件等。
一個Web應用程序通常由若干個網站集組成,SharePoint 2010使用內容數據庫來存儲網站集,一個內容數據庫可以包含若干個網站集,但一個網站集只能存儲在一個內容數據庫里,一個內容數據庫的大小要限制在100GB以內,但根據企業的具體服務器架構,通常要比這個推薦值小一些,如筆者所供職的某大型外企里的Share Point環境管理策略就要求限制在50GB以內。
警告:不要試圖通過自定義代碼訪問內容數據庫數據,任何這樣的行為將會導致該內容數據庫不被微軟支持,在筆者了解的某個case中,某大公司的知識管理系統由于修改了SharePoint內容數據庫的表結構導致了服務器當機。SharePoint的所有數據都建議通過SharePoint對象模型API來訪問(有意思的是SharePoint也提供了訪問內容數據庫并執行SQL數據查詢和修改的API)。
SharePoint 2010通過在IIS網站里配置SharePoint專屬部件,定制的HttpModule和HttpHandle,通過ASP.NET 3.5來擴展IIS服務器的標準行為,通過和ASP.NET的這種集成讓SharePoint 2010可以控制到達Web應用程序的每一個請求,如圖1-2所示。

圖1-2 IIS管理器
對從ASP.NET轉到SharePoint的開發者來說,可以將SharePoint Web應用程序理解成一個大規模的ASP.NET應用程序,如前文所述,每個SharePoint Web應用程序都有自己的如同典型的ASP.NET應用程序一樣的web.config文件。與ASP.NET網站不同的是,每一個網站集并不擁有獨立的配置文件,SharePoint Web應用程序下唯一的一個web.config為所有該Web應用程序下的網站集提供配置信息,即便該Web應用程序下面可能有數百個網站集存在。
一個典型的SharePoint 2010服務器場至少有兩個Web應用程序,一個是中央管理站點,另外一個開放給普通用戶使用。圖1-3是某公司的Web應用程序圖,該公司將生產環境服務器分成三個Web應用程序,分別提供給員工、合作伙伴及客戶使用。

圖1-3 Web應用程序規劃示例
如前所述,SharePoint 2010擴展IIS網站重要的一點是具有獨立的權限認證體系,在圖1-3所示的公司里,內聯網所在的Web應用程序通過Windows集成認證來控制訪問并禁止匿名訪問。外聯網通過定制的ASP.NET認證提供服務來認證用戶(實際使用的是表單認證),外部網則配置為允許匿名訪問來讓互聯網用戶訪問公司主頁。
此外,隨著在SharePoint 2010里基于聲明的認證模型的引入,使得將認證委托給第三方的應用程序成為可能,例如在上述的例子中,該公司可以在開放匿名訪問給外部網訪問用戶的同時,也允許用戶通過Windows Live ID來訪問,以提供更多定制的服務,后續將提供相應的例子予以詳細說明。
更多信息:一個服務器場允許很多個Web應用程序存在,但是Web應用程序的數量在SharePoint產品設計中有相關限制,在實際生產環境部署中應該按照微軟官方推薦來選擇最佳實踐。
1.4.3 服務應用程序
對應于SharePoint2007的共享服務,SharePoint 2010引入了服務應用程序的概念,在SharePoint 2010里,服務應用程序可以在運行于不同的Web應用程序下,甚至不同的服務器場的不同站點間共享數據。新的服務應用程序架構也使得SharePoint 2010性能得到進一步擴展,因為服務應用程序可以安裝在獨立于Web前端服務器的專屬應用服務器之上。
服務應用程序的一個很重要的特點是它在架構上的解耦,在簡單的服務器場配置里,服務應用程序可以安裝在Web前端服務器上。在大型的服務器場配置里(如圖1-4所示)服務應用程序可以安裝在單獨的應用程序服務器或者應用程序服務器組里。

圖1-4 應用程序服務器組
按照一定的規范可以開發服務應用程序,此處不做贅述,圖1-5顯示了在企業級SharePoint 2010里常見的服務應用程序。
下面是幾個常見的服務應用程序:
商業連接服務(Business Connectivity Service,以下簡稱BCS):早在SharePoint2007里就引入了商業數據目錄(Business Data Catalog,以下簡稱BDC),BDC常見的一種應用是在SharePoint門戶網站里顯示外部系統的數據(通過SharePoint Designer 2007可以做到對表數據的映射修改等),開發人員可以通過XML文件定義外部系統和SharePoint的匹配關系,然后通過Web部件在畫面里予以顯示,外部系統數據也可以通過在列表里配置為一個新添加字段,進一步在搜索里被爬網到。但是BDC沒有專門的開發工具,開發起來非常麻煩,而且要通過SharePoint修改外部系統數據也非常麻煩。BCS的推出解決了這一系列問題,開發人員甚至IT人員可以通過SharePoint創建外部內容類型,可以在瀏覽器里創建外部列表,可以通過Visual Studio做深入開發。

圖1-5 常見服務應用程序
- 用戶檔案服務(User Profile Service):用來管理用戶檔案、組織檔案(SharePoint 2010新功能)、我的站點、社交標簽等。
- 搜索服務(Search Service):SharePoint2007里搜索服務和用戶檔案服務都綁定在共享服務里,但在SharePoint 2010里作為單獨的服務來提供。
- 托管元數據服務(Managed Metadata Service):SharePoint 2010里全新推出的服務,此服務配置的元數據可以在所有綁定了此服務的Web應用程序下的所有網站集里訪問元數據;此外,還可以通過此服務配置共享內容類型,通過制定某個站點集為集線器站點,在此站點集下創建的內容類型可以通過Timer Job推到所有綁定了此服務的Web應用程序下的所有網站集里。
1.4.4 網站集和網站
網站集是一個數據存儲和權限分配的獨立單位,網站集可以包含若干個網站,每一個網站集都必須建立在某個Web應用程序下面,但是網站不可以單獨建立在Web應用程序下面,必須建立在網站集的下面。
網站集的存在有很多種原因,一個是因為其獨立的權限控制體系,每個網站集之間的權限都是獨立的,站點集(不要為這個詞迷惑,站點集和網站集是同一個概念)管理員擁有網站集的最高權限,他可以在該網站集內創建不同的權限組,創建站點集的時候SharePoint會默認配置三個組,如圖1-6所示。
- 網站所有者:擁有略低于站點集管理員的權限。
- 內容貢獻者:可以在網站里創建文檔庫、列表等內容并具有創建和修改文檔等權限。
- 訪問者:擁有在站點集內只讀的用戶權限。

圖1-6 權限設置
另外一個原因是可以提供站點集別的數據備份和還原,在SharePoint2007里通過stsadm命令,在SharePoint 2010里通過stsadm命令或者Windows PowerShell都可以進行站點集數據的數據備份和還原。順帶提一下,通過前面說到的這些方式可以在創建站點集的時候指定存儲的內容數據庫,通過瀏覽器創建站點集的時候SharePoint通過一個叫做roundtrip的算法,也就是從某個Web應用程序下存在的所有內容數據庫里一個接著一個地創建,比如創建站點集A的時候存儲在第一個內容數據庫,站點集B在第二個內容數據庫,站點集C在第三個內容數據庫……當所有內容數據庫都存儲有站點集后再新創建的站點集會存儲在第一個內容數據庫,以此類推。
如圖1-7所示的是某公司的站點結構圖,實際的情況可能會更復雜。

圖1-7 站點結構圖
1.4.5 字段類型、網站欄和內容類型
字段類型包括單行文本、多行文本、數字、貨幣等各種類型,可以將其理解成數據庫表的各種字段類型,字段類型可以被添加到列表、文檔庫等數據存儲結構中。字段類型可以擴展,后續章節中會有詳細介紹。
通過字段類型可以創建欄,欄可以理解為字段類型的實例,在列表里創建的欄只能供對應的列表使用,在網站集級別創建的欄可以供網站集內所有列表、文檔庫等使用。
內容類型是網站欄的集合,內容類型可以理解成一個一個的模板,比如員工內容類型就包括員工姓名、生日、郵件地址等網站欄的模板,網站欄在網站集級別創建,并可以單獨添加到每一個列表或者文檔庫。在SharePoint 2010里引入了外部內容類型的概念,在SharePoint Designer里可以創建外部內容類型,將外部系統的數據映射到SharePoint里面來。
SharePoint 2010對字段做了功能上的改進,最突出的兩點是增加了對字段值唯一性的設置,以及對字段值進行校驗設置的功能。通過唯一性設置可以指定在本列內的值必須唯一,如果添加重復值時瀏覽器會提示內容重復;通過校驗功能可以指定在客戶端配置字段值的檢驗規則,比如要求是小寫字母等。
1.SharePont 2010新功能:字段值唯一性設置
在SharePoint2007的版本里有一個缺憾就是——欄值沒有唯一性設置,除了系統提供的內部ID字段外所有的欄值都不能唯一,如果要達到唯一控制的目的,必須開發額外的代碼,比如通過事件處理器(后續章節會有專門介紹)在用戶提交、編輯該欄值的時候予以控制,如圖1-8所示。

圖1-8 字段唯一性設置
但在SharePoint 2010里,我們可以直接在創建欄的時候指定該欄值的唯一性,這帶來了很大的方便。如圖1-9所示,我們在任務列表里創建一個單行文本的“UniqueNO”字段,并在創建的時候指定其為“強制唯一值”。單擊“確認”按鈕,會提示如果選擇“強制唯一值”需要在該字段上加索引。
更多信息:圖1-8最后一個托管元數據字段類型(Managed Metadata)僅適用于SharePoint Server 2010標準版和企業版,該字段類型可以從和所在Web應用程序的托管元數據服務應用程序里的配置進行交互,獲取相關數據予以顯示。
添加新欄之后如果我們輸入多條數據,后創建的數據UniqueNO值與之前創建的有重復,在保存的時候會提示值重復(如圖1-9所示)。但需要注意的是,與數據庫表不同,設置為唯一性值的欄并不一定要求值非空,如果沒有設置為非空,兩條數據UniqueNO值都為空是允許的。

圖1-9 值重復錯誤提示
2.SharePoint 2010新功能:字段值校驗
SharePoint 2010在列表級別做的另外一個改善是加入了對字段值的校驗功能,而且不僅僅是在字段級別可以對字段的值進行校驗,在列表級別也能夠對字段值進行校驗(關于列表隨后就會提到,這里可以將列表理解為數據庫里的表,將列表級別校驗理解為數據庫表的觸發器),與SharePoint提供的公式結合起來,前者可以用在對值的內容、長度等的校驗,后者可以用在兩個字段值的比較等方面。
看一個字段級別校驗設置的實例。首先我們創建一個新列,單擊“Column Validation”展開設置頁,在公式里輸入“=LEN(Region)<8”,在錯誤消息里輸入“Please Make sure length is less than 8.”,當輸入的Region字段值不符合規則的時候,錯誤消息將顯示在添加或編輯新記錄畫面里。單擊“確定”按鈕保存,如圖1-10所示。

圖1-10 設置字段級別校驗
保存成功后,當試圖輸入一個長度超過8的字符串時,我們設置的錯誤消息將會在字段下面予以提示,如圖1-11所示。

圖1-11 字段級別校驗錯誤消息
再來看列表級別設置的例子。單擊列表設置進入列表設置頁面后,單擊“校驗設置”鏈接,如圖1-12所示。

圖1-12 校驗設置鏈接
在打開的設置畫面里我們針對新建的兩個日期類型字段Date1和Date2,要求Date1的日期值必須在Date2之后,如果校驗出錯,提示“Date1 must be after Date2”,單擊“確認”按鈕保存,如圖1-13所示。

圖1-13 列表級別校驗設置
保存成功后,當我們輸入的Date1日期在Date2日期之前會提示如圖1-14、圖1-15所示的錯誤信息。有意思的是,這個錯誤信息不會像之前的字段級別錯誤信息在字段旁邊予以顯示,而是在新加或者編輯記錄的畫面的上部分。

圖1-14 Date1日期在Date2日期之前

圖1-15 列表級別校驗錯誤提示
更多信息:如果想了解更多關于字段值校驗的信息,歡迎通過RSS訂閱筆者的博文:http://www.cnblogs.com/johnsonwong/archive/2011/05/27/2059405.html
1.4.6 列表和文檔庫
列表是SharePoint里用來存儲數據的基本結構,列表可以理解為數據庫的表,用戶可以在列表里面任意添加欄,就如同數據庫表的一個列,也可以將已經包含了若干個網站欄的內容類型直接添加到列表里,列表可以同時支持多個內容類型。圖1-16就是一個典型的列表,列表里面包括標題(Title)、制造商(Manufacturer)、銷售價格(SellingPrice)、審批狀態(Approval Status)四個欄,其中標題是創建列表時默認添加的欄(默認欄還包括:創建時間、創建者、修改時間、修改者等),制造商、銷售價格、審批狀態是創建好列表后添加進去的欄。
建好列表后可以往列表里插入記錄,即如同數據庫表里一條一條的數據,每條記錄都會有之前在列表里添加的所有欄的信息(如果基于內容類型創建的列表記錄將只具有對應內容類型的相關欄),每個欄將根據建立欄時的設置,有屬性(單行文本、多行文本、數字、貨幣等)的要求,有內容的要求(非空、唯一性以及其他用戶自行定義的校驗規則),在很大程度上都非常類似于數據庫的表。
在SharePoint里通??梢钥吹胶芏喾N類的列表,比如通知、任務、日歷、討論版、聯系人、鏈接、調查等都是列表的一種。

圖1-16 列表
文檔庫是一種特殊的列表,與列表的主要不同在于文檔庫的每條記錄有且僅有一個文件存在,而列表里可以沒有文件或者有若干個文件作為附件存在。文檔庫或列表都支持版本控制。圖1-17就是一個典型的文檔庫,下面列出的四個欄——類型(Type)、文件名(Name)、修改時間(Modified)、修改者(Modified By)都是默認添加的欄。

圖1-17 共享文檔庫
文檔庫也有各種呈現形式,比如表單庫、圖片庫、幻燈片庫、維基頁面庫等都是文檔庫的一種。
更多信息:上圖第一列類型里的圖標顯示以及新圖標添加可以通過定制C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML下的DOCICON.xml配置文件來實現。
1.SharePoint 2010新功能:文檔集(只在標準版及以上)
在SharePoint2007里所有的文檔都是直接存在文檔庫里或者存在于文檔庫里的某個文件或者子文件夾里,每個文檔都具有自己單獨的屬性。在SharePoint 2010里引入了文檔集的概念,文檔集指的是一組屬性相同的文檔,比如銷售類、技術類等文檔集具有相同的屬性特征,只需要維護一套屬性即可。
文檔集在SharePoint Server 2010標準版及企業版里以功能(feature)的形式提供,需要使用的用戶可以在站點設置->站點集功能頁面激活“文檔集”功能,如圖1-18所示。

圖1-18 文檔集功能
激活以后還需要將文檔集作為內容類型添加到相應的文檔庫里才能使用,如圖1-19所示,在“SharePoint 1”這個文檔集下面有兩個文件且還可以添加更多的文件,而在“SharePoint 1”下面有兩個鏈接“查看所有屬性”和“編輯屬性”,可以為整個文檔集編輯并查看屬性。

圖1-19 文檔集
2.SharePoint 2010新功能:唯一文檔ID(只在標準版及以上)
唯一文檔ID允許在站點集范圍內按照一定的規則給文檔編號,并且此編號在站點集范圍內唯一,進一步可以通過獨立于文件存儲位置的統一方式來獲取文件。很多企業都按照一定的編碼規則來管理文檔,而文檔又通常分布在不同的文檔庫里,這個功能的引進會給文檔的管理帶來方便,不過在筆者接觸過的一個案例中,400GB以上的數據要在SharePoint里進行管理,而且文檔號要求唯一。由于數據量的限制,必須分成若干個站點集進行存儲,如果在下一個版本中,微軟能推出在Web應用程序級別統一管理文檔號的功能,將更加方便。
言歸正傳,使用此功能也需要到站點集設置->站點集功能畫面激活“文檔ID服務”,如圖1-20所示。

圖1-20 文檔ID服務
激活此服務后在站點集設置畫面會多出一個連接“文檔ID設置”,單擊進入,如圖1-21所示。

圖1-21 文檔ID設置
在設置畫面里指定文檔ID的編碼規則,例如圖1-22中制定文檔ID以“3HVABCD”開頭,單擊“OK”按鈕保存。

圖1-22 設置文檔ID
配置好后,當上傳文檔到文檔庫后會出現新的一列“文檔ID”,里面的內容按照我們指定的規則進行順序取號。
如果鼠標放到相應的ID上,我們會發現這是一個超鏈接(http://localhost/_layouts/ DocIdRedir.aspx?ID=3HVABCD-1-2),根據SharePoint配置和IE瀏覽器設置的不同,單擊該鏈接會提示保存或者在IE里打開該文件。通過這種方式我們可以獨立于文件真實存儲的文檔庫,直接通過文檔ID定位該文檔,如圖1-23所示。

圖1-23 唯一文檔ID
更多信息:在實際啟用唯一文檔ID服務時會遇到一些小的問題,具體的配置可以參考筆者的博客:http://www.cnblogs.com/johnsonwong/archive/2011/05/25/ 2057193.html。
此外,SharePoint Foundation在列表的Lookup字段,跨列表查詢以及處于性能考慮的列表Throttling等方面都做了很大改善,在第3章將做詳細介紹。
- 計算機應用
- 傳感器技術實驗教程
- Python Artificial Intelligence Projects for Beginners
- 自動控制原理
- 大數據技術入門(第2版)
- 大數據平臺異常檢測分析系統的若干關鍵技術研究
- 中國戰略性新興產業研究與發展·智能制造
- 新手學電腦快速入門
- Ceph:Designing and Implementing Scalable Storage Systems
- 具比例時滯遞歸神經網絡的穩定性及其仿真與應用
- 基于單片機的嵌入式工程開發詳解
- Introduction to R for Business Intelligence
- Linux Shell Scripting Cookbook(Third Edition)
- Xilinx FPGA高級設計及應用
- 傳感技術基礎與技能實訓