关于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端口的
在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体系架构的几个话题的更多相关文章
- SharePoint 2010 BCS - 概述
博客地址 http://blog.csdn.net/foxdave SharePoint 2010首次引入了BCS的概念 - Business Connectivity Service,即业务连接服务 ...
- SharePoint 2010 最佳实践学习总结------第1章 SharePoint Foundation开发基础
----前言 这段时间项目出在验收阶段,不是很忙,就潜心把SharePoint学一下,不求有多深刻,初衷只是先入门再说.后续会发布一系列的学习总结.主要学习的书籍为<SharePoint2010 ...
- WCF:为 SharePoint 2010 Business Connectivity Services 构建 WCF Web 服务(第 1 部分,共 4 部分)
转:http://msdn.microsoft.com/zh-cn/library/gg318615.aspx 摘要:通过此系列文章(共四部分)了解如何在 Microsoft SharePoint F ...
- SharePoint 2010 获取当前用户的权限
转:http://blog.csdn.net/sygwin_net/article/details/6790500 操作环境:SharePoint 2010 关于SharePoint 的权限架构,具体 ...
- SharePoint 2010在win7 x64 安装
转:http://kaneboy.blog.51cto.com/1308893/328000 关于<SharePoint 2010应用程序开发指南>,我和杜伟同学正在撰写中,希望下半年早点 ...
- SharePoint 2010顶部链接导航栏的详细操作
转:http://www.360sps.com/Item/UseTopLink.aspx 在SharePoint 2010环境的页面中,导航链接总体上可以分为两类,一类是显示在左侧的快速启动栏,另一类 ...
- 在 SharePoint 2010 中访问数据
转:http://blog.banysky.net/?p=81001 数据访问的关键方法有哪些? | 使用查询类 | 使用 SPQuery | 使用 SPSiteDataQuery | 使用 LINQ ...
- sharepoint 2010 如何使用sharepoint多媒体视频播放media webpart功能
转:http://www.cfanz.cn/?c=article&a=read&id=40449 在sharepoint 2010中,有一个新的功能,支持在页面上播放视频.主要是通过一 ...
- 自定义和扩展 SharePoint 2010 Server 功能区
了解构成 SharePoint 2010 服务器功能区的组件以及如何通过演练两个功能区自定义项方案来自定义功能区. 适用范围: Microsoft SharePoint Foundation 2010 ...
随机推荐
- Hdu 1042 N! (高精度数)
Problem Description Givenan integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input OneN in one ...
- Poj 2159 / OpenJudge 2159 Ancient Cipher
1.链接地址: http://poj.org/problem?id=2159 http://bailian.openjudge.cn/practice/2159 2.题目: Ancient Ciphe ...
- Poj/OpenJudge 1094 Sorting It All Out
1.链接地址: http://poj.org/problem?id=1094 http://bailian.openjudge.cn/practice/1094 2.题目: Sorting It Al ...
- linux下screen工具的简单使用
有时候,希望即使退出终端了,下次登录linux的时候,还能回到程序的控制界面,这个时候,screen工具就很有用了例如,写了一个从控制台读取屏幕输入的程序input_test,如果从终端退出了,下次登 ...
- ubuntu12修改ulimit
第一步:配置/etc/security/limits.confsudo vim /etc/security/limits.conf文件尾追加 * hard nofile 40960* soft nof ...
- 快速排序算法 Quick sort
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4046189.html 首先随机选择一个轴,并调整数组内各个数字,使得比轴值大的数在轴的右边, ...
- QtSQL学习笔记(2)- 连接到数据库
要使用QSqlQuery或者QSqlQueryModel访问一个数据库,首先需要创建并打开一个或多个数据库连接(database connections). 一般地,数据库连接是根据连接名(conne ...
- cocos2d-x学习笔记------动画人物跑起来吧!
学习总结: 1.sprintf用来格式化字符串 2.CCSpriteFrame:: frameWithTexture通过图片名创建的时候需要的参数Texture2D创建使用CCTextureCache ...
- oracle 11g实验五——触发器的使用
实验要求: 实验五 触发器的使用 实验目的 1. 理解触发器的概念.作用及分类: 2. 掌握触发器的创建.使用: 实验内容 1. 建立表orders:用于存储订单列表信息:表order_item ...
- Codeforces 616E - Sum of Remainders
616E Sum of Remainders Calculate the value of the sum: n mod 1 + n mod 2 + n mod 3 + - + n mod m. As ...