关于SharePoint 2010体系架构的几个话题
最近給一個客戶講解SharePoint體系架構、管理維護這方面的內容。有幾個主要問題整理出來給大家參考參考。陸續會有幾篇文章
?
1.SharePoint到底是怎么工作的?
這個問題要從“SharePoint是什么”說起。SharePoint其實說到底是一個基于ASP.NET的應用平臺。它的主體部分是通過一個用戶所熟知的網站提供服務的,此為其一。
接下來,我們就要問了,作為一個網站而言,SharePoint的網站與一般的網站是否有什么不一樣呢?答案是,有。SharePoint的網站雖然在IIS里面看起來與一般的網站并不什么兩樣(如下圖),但是其實內部有很大的區別。
SharePoint的網站,注冊了一些特殊的HttpModule和HttpHandler,熟悉ASP.NET開發的朋友們都知道,這是ASP.NET中高級定制的兩個重要手段。簡單來說,SharePoint通過這些自定義的Module(模塊)接管了用戶的請求,從根本上實現了動態網頁處理的功能。(下一個話題還會介紹一下動態網頁的概念)
這些Module或者Handler的定義,默認如下(你可以在網站的web.config)找到它們
<system.webServer><security><requestFiltering allowDoubleEscaping="true"><requestLimits maxAllowedContentLength="2147483647" /></requestFiltering></security><validation validateIntegratedModeConfiguration="false" /><modules runAllManagedModulesForAllRequests="true"><remove name="AnonymousIdentification" /><remove name="FileAuthorization" /><remove name="Profile" /><remove name="WebDAVModule" /><remove name="Session" /><add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /><add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /><add name="SharePoint14Module" preCondition="integratedMode" /><add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /><add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /></modules><handlers><remove name="OPTIONSVerbHandler" /><remove name="WebServiceHandlerFactory-Integrated" /><remove name="svc-Integrated" /><remove name="WebDAV" /><add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode" /><add name="OwssvrHandler" scriptProcessor="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\isapi\owssvr.dll" path="/_vti_bin/owssvr.dll" verb="*" modules="IsapiModule" preCondition="integratedMode" /><add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /><add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /><add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /><add name="JSONHandlerFactory" path="*.json" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" preCondition="integratedMode" /><add name="ReportViewerWebControl" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /></handlers></system.webServer>需要注意的是,SharePoint 2010是基于IIS 7的,默認情況下,它采用的管道模型是“集成(integratedMode)”,所以這些Module和Handler是注冊在system.webServer下面的。
關于IIS 7的管道模型,如果你有興趣,可以參考 如何理解IIS 7的兩種應用程序池的管道模式(Managed Pipeline Mode)
?
2. SharePoint的網頁在磁盤上有沒有?
接下來一個話題就是,SharePoint的網頁到底在哪里?是在磁盤中,還是在數據庫中?
這個問題的答案是:有的是在磁盤上,有的是在數據庫里面。有時候在磁盤上,有時候在數據庫里面。
聽起來有點玄,對吧,其實也不難理解的,且聽我解釋
首先講,有的是在磁盤上,有的是在數據庫里面。
我想大部分人開始了解SharePoint的時候,都知道它是一個網站,我們一般會通過如下的地址去訪問它,假設當前這個webapplication就是在我的本地服務器,而且是在80端口的
http://chenxizhang-pc/
在sharepoint 2010中,默認情況下,這個地址會被重定向到
http://chenxizhang-pc/SitePages/Home.aspx
這是自動的行為,我們先來看一下它到底是怎么樣的
這是我們熟悉的一個頁面。很多朋友就好奇了,那么這個Home.aspx是在哪里的呢?這個頁面(本質上是一個wiki頁面),是在數據庫里面的。為什么呢?它其實是定義在一個文檔庫中的
這個頁面是由當前這個Site Template自動提供的,SharePoint 2010 默認情況下會使用wiki頁面作為首頁。wiki頁面的好處編輯很方便。這是我們都是知道的。
如果我們需要添加其他頁面,你有兩種選擇:wiki頁面和web part頁面(之前的SharePoint 2007的默認頁面結構)。需要注意的是,這兩個頁面都是放在數據庫里面的。
同時,SharePoint允許我們將其中任何一個頁面設置為主頁
所以,總結一下,這一類頁面,屬于是用戶定制出來的,自然是要放在數據庫里面的。
那么,那些頁面是不放在數據庫里面的呢?
下面這個頁面,default.aspx,默認就不放在數據庫里面,而是會讀取到本地磁盤上,網站模板中的文件
這個文件,默認是由網站模板提供的,如下圖
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\SiteTemplates\sts
同時,默認情況下,所有列表的新建,編輯,顯示頁面,都是讀取本地磁盤的文件,而不讀取數據庫。
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\SiteTemplates\SPSSITES\LISTS\SITESLST
這是第二大類頁面,他們屬于網站默認就應該有的,默認情況下,這些文件無需讀取數據庫,直接使用本地模板就可以了。【請注意,我說的是默認情況下,不需要讀取數據庫】
?
還有第三類頁面,例如網站配置頁面
http://chenxizhang-pc/_layouts/settings.aspx
這種頁面永遠讀取本地文件,而且這種頁面,我們有個專業術語,叫做Application Page。
這個頁面對應的文件位置在
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS
有時候,我們也會為SharePoint定制一些解決方案,也許也會用到一些頁面,那么這些頁面其實也是要部署到這個目錄里面來。也就是說,Application Page永遠都是使用本地文件的。
所以,總結起來,SharePoint中有三種頁面,他們分別對應的位置如下
| 頁面類型 | 位置 |
| wiki頁面,和webpart頁面(有時候稱為內容頁) | 數據庫 |
| default.aspx或者列表所用的頁面 | 默認在磁盤,可能在數據庫(下面會解釋這個問題) |
| 應用程序頁面 | 磁盤 |
?
那么,為什么說default.aspx或者列表所用的頁面有時候在磁盤上,有時候在數據庫里面呢?
這些頁面,默認讀取磁盤的用意很明顯,就是說盡量減少對數據庫的讀寫。大家可以試想一下,假設你有100個網站,里面有N個列表,如果為每個列表都產生上面所提到的11個頁面,放在數據庫里面,那將是多少頁面。如果列表頁面不需要特別定制,為什么不可以使用一個頁面,而且就使用本地這個文件呢?
所以,如果說這些頁面,不需要經過定制的話,讀取磁盤上的文件是最佳的做法。
但是,如果這些頁面,需要經過定制,形成當前網站的獨特設計,再讀取磁盤上的文件就不合適了,此時該文件就會被復制一份,放在該網站所對應的內容數據庫里面去。而SharePoint的引擎,要處理某個頁面請求的時候,會先檢查數據庫中是否有該頁面,如果沒有,則嘗試讀取本地磁盤。
有意思的是,為了以示區分,經過定制的頁面,在SharePoint Designer中看到的效果有點特殊。頁面前面會有一個圖標
在微軟官方文檔中,這些沒有定制過的頁面,有一個叫法為“ghosting page”,而經過定制的頁面,叫為“unghosted page”
?
這一篇先談這兩個話題吧,希望大家可以對sharepoint的體系結構有更加深入的理解
總結
以上是生活随笔為你收集整理的关于SharePoint 2010体系架构的几个话题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看哪些参数被新版本抛弃了?
- 下一篇: Log图文详解(Log.v,Log.d,