转:http://www.wcode.net/plus/view.php?aid=1582071

SharePoint一个很重要的概念就是Site Pages和Application Pages。接触SharePoint是在SharePoint 2007,当时就有这个概念。如有误解之处,请大家多多指教。 Site Pages是可以通过SharePoint Designer来编辑的页面,它的增加、删除、修改并不能在物理文件系统中跟踪到,而是在Content DB中。 Site Pages 两个重要的概念: Ghosted or Uncustomized Page. 页面都是通过WFE文件系统中的页面模板

SharePoint一个很重要的概念就是Site Pages和Application Pages。接触SharePoint是在SharePoint 2007,当时就有这个概念。如有误解之处,请大家多多指教。

Site Pages是可以通过SharePoint Designer来编辑的页面,它的增加、删除、修改并不能在物理文件系统中跟踪到,而是在Content DB中。

Site Pages 两个重要的概念:

  1. Ghosted or Uncustomized Page.   页面都是通过WFE文件系统中的页面模板来处理的
  2. Unghosted  or Customized Page.  页面被定制过,存储在数据库当中。

Note: WFE is short for Web Front End 即 WEB 前端

Application Pages 是存储在WFE文件系统特殊位置的文件。

Figure: Layouts 目录在WEB前端。

说到Site Pages和Application Pages,Virtual File System in site不得不了解

Virtual File System in SharePoint Site.  虚拟文件系统。

Figure:  页面被定制了从数据库中取回,页面没定制从WFE文件系统中返回页面。

Figure: ASP.NET 运行时,得到Virtual Provider提供的信息。

NOTE: Virtual Path Provider 的概念是从.NET 2.0开始有的,SharePoint 开发团队实现了自己的 SPVirtualPathProvider。(具体参见http://bit.ly/cetGHN 搜索SPVirtualPathProvider 关键字)

简单的讲就是 File System 和 Content DB 之间进行了映射关系,这种关系由Virtual Path Provider来维护。

如果页面进行定制,这个时候整个页面会存储到数据库当中,当你再次访问这个被定制的页面的时候就会额外增加一个页面的实例,这也是Unghosted Page不足之处,影响性能。

如果页面没有进行定制,所有对该页面的请求,实际上是有存储在WFE文件系统的模板来进行处理。

例如:用BLANK TEMPLATE 来创建SITE的时候,在这个SITE中很容易发现一个DEFAULT.ASPX页面,这个页面实际上是站点模板在创建的过程中来通过WFE的物理文件系统的模板来创建。 所以看到所有的DEFAULT.ASPX内容都相同。但是同样可以对其进行编辑,定制。默认的DEFAULT.ASPX实际上就是Ghosted Page, 而被定制的被称为UnGhosted Page。一旦被定制内容将存储在数据库当中。

项目情景: 当部署站点的时候很多时候有些PageLayout怎么也不部署不上,更新不了,多次检查发现WSP中的PAGELAYOUT确实已经是最新的版本,原来在部署新的文件之前原有的文件都被定制了, 当你访问此页面的时候ASP.NET RUNTIME 得当Virtual Path Provider 的信息来源还是指向数据库并非文件系统。

这个时候通常是在部署新的SOLUTION之后把原有的PAGE LAYOUT 通过SharePoint Designer 给Reset to Site Definition. 或者写一个小工具来对页面Re-Ghost,这个操作是让Virtual Path Provider 知道现在指向的页面信息是从WFE物理文件系统中页面模板取得。

Tip:  SPFile 类中有一个CustomizedPageStatus属性,这个属性是基于 SPCustomizedPageStatus, 其中有Uncustomized, Customized 和 None,这三个值。Sitepage 在ghosted的状态就是UnCustomized, 当sitepage 被定制后变成 customized。 注意的是NONE值, 这表示如果页面是动态不依赖页面模板创建的时候,这个时候页面的状态就是NONE了。如用代码,或者SPD创建的页面。

潜在问题:另外有一个很值得关注的问题就是 SitePages 中能够加入C# Code 吗?

答案是否定的, 为了安全SitePages是不能够加入代码, 假设能够加入代码来操作数据库,这样对整个FARM,不仅仅是当前的应用程序产生影响。

因此SitePages 是跑在Safe Mode下的, 所以页面引用的控件必须在WEB.CONFIG中注册为SafeControl.  这样职能能也进一步分离,网站集的管理员是可以更改SITEPAGES,但是要在站点中部署一个控件的时候就不得不让FARM 管理员知道要部署这样一个Control 到WEB.CONFIG中。还是FARM管理员权利大 而 SiteCollection Admin 却不能做部署。

转折点: SharePoint 2010 推荐使用SANDBOXED Solution http://bit.ly/a0Qxzi, 这个时候SiteCollection Admin 就可以部署Sandboxed solution.

另外就是Sandboxed Visual Web Part的到来http://bit.ly/azq882 。 这方面有待后面章节进一步分析SP2010 OOTB Project

以上是SitePage 的说明, 对于Application Page.

  1. Application Page 可以由INLINE 的 Code,它的部署就是在WFE文件系统的前端的一个特殊文件夹。
  2. Application Page 通过 site/_layouts 或者 site/subsite/_layouts/ 都可以访问,只存在于WEB前端的文件系统。
  3. Application Page 的性能较好, 因为不涉及到页面在数据库中存放。
  4. 不太好的是,很多APPs 都会共享这个layout 目录, 不够灵活。

当然Application Page 只能够通过Farm Solution 部署。

最佳实践: 部署产品环境的时候,多用Ghosted Site Page, 少用 Application Page, 避免在PROD 环境用SPD 定制。

SharePoint Site Pages & Application Pages的更多相关文章

  1. SharePoint2007 开发部署Application Pages

    介绍:SharePoint应用程序页,也就是_layouts路径下的aspx页面,服务器C:\Program Files\Common Files\Microsoft Shared\web serve ...

  2. 在SharePoint2010中用out-of-box的方式自定制Application Pages(AccessDenied,Confirmation,Error,Login,RequestAccess,Signout,WebDeleted)

    在实际项目中需要对SharePoint2010中的AccessDenied页面进行自定制,于是乎上网搜索相关内容,经实际操作此方法可行,便以此文记录. 在SharePoint2010中,由于secur ...

  3. SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection

    通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...

  4. Q: Why can't I access the Site Settings of my SharePoint site? 'File Not Found'

    Q: I am trying to access the Site Settings of my SharePoint site, but I get a File Not Found error, ...

  5. SharePoint创建web application出现“The password supplied with the username was not correct”错误的解决方法

    平台环境 Windows Server 2012 R2 Standard, SharePoint Server 2010, Microsoft SQL Server 2012 (SP1) 问题描述 在 ...

  6. SharePoint JavaScript API in application pages

    前言 最近,在SharePoint 应用程序页中写JavaScript API,进行一些数据交互.其实,很简单的事情却遇到了问题,记录一下,希望能对遇到类似问题的人以帮助. 引用JavaScript ...

  7. SharePoint Site "Regional Settings"功能与CSOM的对应

    博客地址:http://blog.csdn.net/FoxDave SharePoint网站中的区域设置:"Regional Settings",可以用CSOM通过Site的一些 ...

  8. SharePoint Site "Language Settings"功能与CSOM的对应

    博客地址:http://blog.csdn.net/FoxDave SharePoint网站中的语言设置:"Language Settings",可以用CSOM通过Site的一些 ...

  9. SharePoint API测试系列——Manage SharePoint Site Policy & Expiration Email with CSOM API

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对CSOM(Not SSOM) Site Policy & Expiration Emai ...

随机推荐

  1. OpenJudge/Poj 1088 滑雪

    1.链接地址: bailian.openjudge.cn/practice/1088 http://poj.org/problem?id=1088 2.题目: 总Time Limit: 1000ms ...

  2. python连接zookeeper的日志问题

    用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. -- ::,:(: Exceeded deadline by 11ms 解决方法是在连接后设置一 ...

  3. GCC交叉编译链命名

    命名格式: arch[-vendor][-os]-abi arch:CPU的架构 vendor:工具链的供应商 os: 目标上运行的操作系统,不同的操作系统对应着不同的C库,例如 newlib.gli ...

  4. WPF获取控件的句柄

    在WinForm中,获得句柄是一件很容易的事情,This.Handle或者Control.Handle就可以,最近在WPF的开发中发现找不到这个属性,一番查找资料后找到了两种方式. 1,使用Windo ...

  5. UILabel 属性祥记

    创建label UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)]; 设置背景色 label1. ...

  6. To fix sql server 2008 r2 Evaluation period has expired by change the key

    PTTFM-X467G-P7RH2-3Q6CG-4DMYB 数据中心版:PTTFM-X467G-P7RH2-3Q6CG-4DMYB   测试可用 开 发者 版:MC46H-JQR3C-2JRHY-XY ...

  7. pgrep 查询进程的工具

    pgrep 1:简介 pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行.在服务器的配置和管理中,这个工具常被应用,简单明了: 1:用法 #pgrep 参数选项 程序名 常用 ...

  8. 解决ubuntu无法调整和保存屏幕亮度的问题

    整理自解决ubuntu无法调整和保存屏幕亮度的问题 ubuntu无法调整屏幕亮度,对笔记本来说很耗电,同时也很刺眼,因为它是默认以最大亮度来工作的. 所谓的调整,方法为下面的其中一种: 1.Fn+左右 ...

  9. Android 共享文件的 Runtime 权限

    在开发 Android 应用时,总会涉及到获取打电话.地理位置.网络等敏感的用户信息的权限,在 Android 中,联系人.当前位置等这些敏感信息都是由 permissions 保护的,Android ...

  10. C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?

    (1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...