- 亮剑.NET:SharePoint Server 2007开发实战
- 张建义 王俞编著
- 1249字
- 2020-08-28 06:15:39
1.2 Windows SharePoint Service对ASP.NET的扩展
WSS基于ASP.NET开发,利用ASP.NET提供的扩展接口(如HttpHandler、HttpModule、VirtualPathProvider)来实现自己特殊的功能。WSS运行于IIS之上,利用IIS网站的虚拟目录来承载一个WSS应用程序。本节将阐述WSS对这两者的扩展和运用。
1.2.1 WSS对IIS的扩展
IIS即Internet信息服务(IIS)管理器,每次新建一个WSS应用程序,在IIS中会同样新建一个网站,我们称这个网站是被WSS扩展后的网站。那么扩展后发生了什么呢?
IIS网站的所有文件的处理都被映射为需要ASP.NET运行引擎处理,而标准的IIS站点只有ASP.NET本身的文件(如aspx、asmx等)才需要运行引擎处理,其他文件由IIS直接输出到客户端。
WSS应用程序的站点程序文件由两部分组成:每个站点独有的文件和公用的文件。用IIS打开一个WSS网站,可以看到如图1-1所示的目录结构。
图1-1 WSS网站的虚拟目录结构
WSS网站的程序目录一般映射到C:\Inetpub\wwwroot\wss\VirtualDirectories\的某个子目录下。这个目录下有以下的子目录和文件,如图1-2所示。
图1-2 WSS网站的程序目录结构
● App_GlobalResources:放置资源文件。
● bin:放置网站独有的程序集。
● global.asax:ASP.NET应用程序文件,用来处理ASP.NET的应用程序级事件。
● web.config:这是整个网站的配置文件。
在C:\Inetpub\wwwroot\wss\VirtualDirectories目录中存放的是站点独有的程序文件,注意图1-1中图标为的目录,这些目录在VirtualDirectories目录中并不存在,它们被映射到其他的位置。
● _controltemplates:放置站点用户控件,被映射到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\template\controltemplates目录下,开发的用户控件也可以放在这个目录下。
● _layouts:放置站点应用程序页面,被映射到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\template\layouts目录下,开发的页面也可以放在这个目录下。
● _vti_bin:放置所有Web服务,系统用到的程序集(DLL),被映射到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\isapi目录下。
这些目录中的文件是所有的WSS站点通用的。它们都统一存放在C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12目录下。12目录是WSS的安装目录,包含WSS所有的配置文件、模板和程序页面。
1.2.2 WSS对ASP.NET的扩展
WSS基于ASP.NET 2.0开发。ASP.NET 2.0提供了很多的扩展接口,WSS充分利用这些接口来扩展实现自己的功能。查看站点下的web.config文件,可以看到有如下的配置:
<httpHandlers> <remove verb="GET,HEAD,POST" path="*" /> <add verb="GET,HEAD,POST"path="*" type="Microsoft.SharePoint. ApplicationRuntime. SPHttpHandler,Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral, PublicKeyToken =71e9bce111e9429c" /> <add verb="OPTIONS,PROPFIND,PUT,LOCK,UNLOCK,MOVE,COPY,GETLIB,PROPPATCH,MKCOL, DELETE,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)" path="*" type="Microsoft.SharePoint. ApplicationRuntime.SPHttpHandler, Microsoft.SharePoint, Version=12.0.0.0, Culture= neutral, PublicKeyToken=71e9bce111e9429c" /> </httpHandlers>
HttpHandler是ASP.NET的扩展机制,通过实现HttpHandler,可以直接针对较低层的Request、Response对象编程,WSS通过自己的HttpHandler实现对客户端所有请求文件的处理,并且,通过扩展Http请求(扩展OPTIONS、PROPFIND、PUT、LOCK、UNLOCK、MOVE、COPY等动作)实现文档的在线编辑。注意HttpModules节点下的这项配置:
<add name="SPRequest" type="Microsoft.SharePoint.ApplicationRuntime. SPRequestModule, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
HttpModule也是ASP.NET的扩展机制,通过实现一个HttpModule,可以切入Http请求的某个阶段作出相应的处理,如身份校验、初始化通用模块等。
WSS通过实现SPRequestModule,切入Http请求,进行一些需要的处理。最重要的是,WSS通过SPRequestModule引入了SPVirtualPathProvider。在SPRequestModule的OnInit方法中有这么关键的一句:
SPVirtualPathProvider provider2 = new SPVirtualPathProvider(); HostingEnvironment.RegisterVirtualPathProvider(provider2);
VirtualPathProvider也是ASP.NET的扩展机制,通过实现VirtualPathProvider可以控制ASP.NET页面的提供机制,默认的VirtualPathProvider的实现直接访问服务器硬盘上的文件。WSS通过SPVirtualPathProvider实现了自己的页面Provider机制——WSS站点的页面是混合存放在数据库和文件系统中的。
新建一个WSS站点后,它的所有文件都是放在硬盘上的,通过SharePoint Designer打开一个WSS站点,可以看到完整的目录结构,这些文件实际上全部都映射到文件系统上的某个文件,这个功能叫做ghost。当通过SPD修改了某个文件之后,WSS会把这个修改的文件保存到数据库,这个文件跟原始文件系统上的文件就脱离关联了,这叫做unghost。通过ghost,WSS做到了不同的站点可以共享相同的文件;通过unghost,WSS又实现了一个站点对页面的修改不会影响到其他站点。