用作 ASP.NET 应用程序的 Microsoft SharePoint Foundation

上次修改时间: 2011年1月28日

适用范围: SharePoint Foundation 2010

本文内容
IIS 和 ASP.NET 配置
请求管道
SharePoint 修改管道的原因
SharePoint 修改管道的方式

本主题说明如何通过对 Internet Information Services (IIS) 和 Microsoft ASP.NET 的集成请求管道进行的一组修改来构建 Microsoft SharePoint Foundation。

备注

本主题介绍 IIS 和 ASP.NET 如何在集成模式下运行。它们也可以在经典模式下运行,但由于 SharePoint Foundation Web 应用程序必须位于使用集成模式的应用程序池中,因此本主题中没有进一步讨论经典模式。

备注

尽管本主题讨论 web.config 文件和相关文件,但没有涉及如何自定义这些文件。有关自定义 SharePoint Foundation 配置的信息,请参阅使用 Web.config 文件

IIS 和 ASP.NET 配置

IIS、ASP.NET、网站、应用程序以及用于构建它们的服务的配置设置存储在一个配置文件层次结构中。一般的原则是,层次结构中的每个文件都比其上面的文件的范围小一些,并且可以替代(在其范围内)层次结构中更高级别的文件中的设置。也可以锁定这些设置文件中的某些设置。这将阻止层次结构中更低级别的文件替代锁定的设置。

  • 层次结构的顶部是 machine.config 文件。该文件位于 %WinDir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG\ 目录中,其中包含服务器范围内的设置。

  • 第二个服务器范围内的配置文件是全局 web.config 文件,该文件位于相同的目录中。

    备注

    SharePoint Foundation 2010 使用 Microsoft ASP.NET 3.5,即使在前端 Web 服务器上安装了更新的 ASP.NET 版本也是如此。但是,3.5 版本没有更改默认的 machine.config 文件或全局 web.config 文件。Microsoft ASP.NET 2.0 更改了这些文件的最新应用程序早期版本;因此,这些文件位于 %WinDir%\Microsoft.NET\Framework64\ 文件夹的 2.0 版本分支下。

  • 第三个服务器范围内的配置文件是 IIS 配置存储区,位于 applicationhost.config 文件中。该文件位于 %WinDir%\System32\inetsrv\config\ 目录中,并且它包含服务器上的 IIS 网站和应用程序池的注册信息,以及一些应用于 Web 服务器上所有 Web 应用程序的设置。applicationhost.config 中的设置主要面向由 IIS 参与的管道部分,而 machine.config 和全局 web.config 文件包含主要面向由 ASP.NET 参与的集成请求管道部分的设置。

  • 每个 IIS 网站在其根目录中均有自己的 web.config 文件,该文件包含特定于网站的替代项(可用于替代继承自层次结构中更高级别的配置文件中的设置)并可添加新的设置。

  • IIS 网站中特定的物理或虚拟目录也可以有各自的 web.config 文件以添加新的设置或替代继承的设置。当然,新的设置和替代项只应用于针对位于此目录及其子目录内的资源的 HTTP 请求。

备注

SharePoint Foundation 术语中的"Web 应用程序"与 IIS 术语中的"网站"密切相关。每个 SharePoint Foundation Web 应用程序都承载在具有相同名称的 IIS 网站中,并且通常只承载在一个 IIS 网站中。(但是,可以将 SharePoint Foundation Web 应用程序扩展到其他端口,在此情况下,该应用程序将承载在其他 IIS 网站中。)因此,您可能会在 SharePoint Foundation 文档中看到对 Web 应用程序 的根 web.config 文件的引用或对 Web 应用程序 目录中的 web.config 文件的引用。严格来说,实际引用的内容是对应的 IIS 网站的根和目录。

IIS 7.0: Settings Schema中介绍了由这些配置文件使用的 XML 架构。还可参阅 ASP.NET Configuration OverviewIIS 7.0 中的配置系统(该链接可能指向英文页面)

请求管道

当前端 Web 服务器从客户端接收到请求时,将会在用于处理请求的单元管道中传递此请求。这一处理过程包括对用户进行身份验证,验证用户的授权,生成响应,发送响应以及最后记录请求。从历史的观点来看,这些单元中有一些源自于 IIS 的早期版本,而有一些源自于 ASP.NET,不过,来源上的差异对于 SharePoint Foundation 并不重要。

HTTP 处理程序

对任何请求的响应均由 HTTP 处理程序对象生成。根据请求的资源和请求中的 HTTP 谓词,将由 *.config 文件将请求分配到一个或另一个 HTTP 处理程序对象(或创建 HTTP 处理程序对象的处理程序工厂类)。例如,在未修改的 ASP.NET 安装中,将带有谓词"GET"的对 aspx 文件(即 ASP.NET 页)的请求发送到 PageHandlerFactory 对象,该对象创建 Page 对象来处理请求。只有实现 IHttpHandler 类的类(例如 Page 类)才可以是托管代码 HTTP 处理程序。资源/谓词对与处理程序(或处理程序工厂)的映射是在 system.webServer 元素的 handlers 子元素中指定的。以下是 handlers 元素的示例,为了简短起见,其中忽略了大多数的子元素。

<location path="" overrideMode="Allow">
  <system.webServer>
    <handlers accessPolicy="Read, Script">
       ...
      <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG"
           type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
      <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG"
           type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode" />
      <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG"
           type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, 
           Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
           preCondition="integratedMode,runtimeVersionv2.0" />
       ...
    </handlers>
       ...
  </system.webServer>
</location>

location 元素的 overrideMode 属性设置为"Allow",以便层次结构中较低级别的 *.config 文件可以具有自己的 handler 元素来替代此处的设置。path 属性设置为空字符串,因此,这些设置随后可应用于所有 IIS 网站,除非在 *.config 文件中替代它们。

HTTP 模块

请求管道还包含 HTTP 模块。模块是一些程序集,通常包含一个或多个事件处理程序或用于定义其他模块可以处理的新事件。HTTP 模块可以在请求的生命周期中注册一个或多个事件。这些模块通常用于对请求进行预处理或后续处理。默认模块在 system.webServer 元素的 modules 子元素中注册。以下是默认的 modules 元素,为了简短起见,其中忽略了大多数的子元素。

<location path="" overrideMode="Allow">
  <system.webServer>
        ...
    <modules>
       ...
      <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" 
           preCondition="managedHandler" />
      <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" 
           preCondition="managedHandler" />
       ...
      <add name="RoleManager" type="System.Web.Security.RoleManagerModule" 
           preCondition="managedHandler" />
      <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" 
           preCondition="managedHandler" />
       ...
      <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" 
           preCondition="managedHandler" />
       ...
    </modules>
  </system.webServer>
</location>

preCondition 属性指定一个条件,请求必须满足此条件,才能对其应用模块。当此属性的值为"managedHandler"时,模块将应用于对托管资源的请求(主要是 ASP.NET 类型的资源,例如 aspx 文件)。下面的 SharePoint 修改管道的方式一节介绍了 SharePoint Foundation 如何替代此行为,以便这些模块适用于所有请求,甚至适用于非 ASP.NET 类型的资源,例如静态 HTML 文件。有关 HTTP 模块的详细信息,请参阅 IIS 7.0 体系结构介绍(该链接可能指向英文页面)

SharePoint 修改管道的原因

下面列出了 SharePoint Foundation 的目标要求其更改管道默认配置的原因:

  1. SharePoint Foundation 创建了一个新的抽象 Web 环境,其中的列表和列表项(而不是网页)是填充中的主要实体。当然,查看此填充并与之进行交互(至少通过浏览器)要求在由浏览器呈现网页构成的熟悉的 Web 环境之上实现数据。但列表独立于任何特定页而存在,并且特定列表可以出现在多个网页上。因此,网站的网页结构在 SharePoint Foundation 中的很多用途方面的重要性已下降。

    让我们看一下根据列表(而不是网页)构造网站的意义。显示网页结构的站点地图的重要性远逊于映射列表的站点地图。因此,列表内容站点地图比网站页面地图更有用。

  2. ASP.NET 请求处理程序通常(如果不普遍)假定将请求资源的 URL 直接映射到前端 Web 服务器的文件系统中。但 SharePoint Foundation 在数据库中存储许多资源,例如自定义页。另外,甚至当文件位于前端 Web 服务器的文件系统中时,SharePoint Foundation 也会大量使用虚拟目录,而不仅仅使用服务器的虚拟根"\"到物理目录"inetpub\wwwroot\"的默认 IIS 映射。加上其他原因,需要此技术来使 SharePoint Foundation 应用程序页成为 SharePoint Foundation Web 应用程序内的每个网站的一部分。

  3. 默认情况下,管道中由 ASP.NET 参与的模块(例如 FormsAuthentication 模块)只处理与 ASP.NET 相关的资源类型(例如 aspx 文件)。但对可存储在 SharePoint Foundation 文档库中的文件类型没有限制;SharePoint Foundation 需要所有请求均由这些模块处理(而不管资源类型如何)。例如,如果用户接收到一封电子邮件,其中包含一个指向 SharePoint Foundation 文档库中 .docx 文件的链接,则该用户必须先通过身份验证,然后才可以访问该文件。

  4. 默认情况下,ASP.NET 将每个 aspx 页编译到首次请求该页时在内存中加载的程序集中。SharePoint Foundation 部署通常具有太多的 aspx 页而使这种方法不可行;前端 Web 服务器的内存将会发生阻塞,并且没办法从内存中动态卸载这些程序集。因此,SharePoint Foundation 必须对大多数 aspx 页使用反编译模式。

  5. SharePoint Foundation 支持管理委托。尽管服务器和服务器场仍然由 IT 员工管理,但很多传统上被视为属于 IT 专业人员或网站设计者的工作的任务(例如创建新网站和网页)在 SharePoint Foundation 中由业余用户(从 IT 专业人员的角度来看)处理。对非专业人士委托授权需要更复杂的信任和权限控制模式。

  6. ASP.NET 设计通常假定只由具有添加新 aspx 页的管理员权限的人员可在网站中添加新网页。因此,应用程序信任所有这类网页上的任何控件。但是,SharePoint Foundation 允许更大范围的最终用户添加 aspx 页:任何具有添加和自定义网页权限的用户都可以执行此操作。这就要求 SharePoint Foundation 提供一个系统,使管理员能够限制允许在网页上使用哪些控件。此外,由于这些用户创建的网页可以具有 Web 部件,管理员需要一种方式来限制 Web 部件和控件的陡增数量。还可以限制用户添加的控件和 Web 部件能够执行的代码种类,以避免错误代码导致 Web 服务器崩溃。SharePoint 通过要求这些控件在称作安全模式 的受限制执行模式下运行,强制实施此限制。

  7. SharePoint Foundation 会在客户端计算机上安装的程序集中公开一个客户端对象模型。此程序集允许代码发送到服务器并以批处理模式执行。这就要求服务器上的宿主执行批处理。ASP.NET 中没有内置类似的功能,它没有客户端程序集。

  8. SharePoint Foundation 支持工作流并与 Windows Workflow Foundation 紧密集成。

  9. SharePoint Foundation 有一个内容丰富的系统,其中包含其 .aspx 和 .ascx 文件中引用的全球化资源。这些资源要求专门的表达式生成器。

  10. ASP.NET 对 AJAX 的支持针对 Microsoft ASP.NET 3.5 进行了部分重新设计,SharePoint Foundation 支持使用自定义处理程序的新设计。

  11. SharePoint Foundation 具有一个可灵活配置的请求限制系统,该系统支持在服务器繁忙时根据请求的特征(例如用户代理的身份、所请求资源的类型以及 HTTP 头中的信息)对 HTTP 请求进行选择性阻塞。

  12. SharePoint Foundation 支持从移动设备访问其网站。这是通过将来自移动设备的请求自动重定向到网页的针对移动优化的特别版本来实现的。

SharePoint 修改管道的方式

本节介绍 SharePoint Foundation 在安装时如何对集成的请求管道进行更改以及在何处进行更改。但是,这里仅讨论最重要的更改。详细更改(在 SharePoint 修改管道的原因中要求列表下的各节中列出)后面括号中的粗体数字与该更改相对应。

备注

除了修改管道外,SharePoint Foundation 在安装时还会对前端 Web 服务器进行其他配置更改。例如,它将为第一个 SharePoint Foundation Web 应用程序、SharePoint Foundation 管理中心应用程序以及 SharePoint Services 平台创建 IIS 网站和应用程序池。(这些网站和应用程序池的最后一个将取代因安装 SharePoint Foundation 而被删除的 UDDI 网站和应用程序池。)它还会创建应用程序池以支持 Business Data Connectivity (BDC) Service、安全令牌和基于声明的安全。这些其他更改也会保留在配置文件的层次结构中,但是我们在此不对它们进行讨论。

ASP.NET Framework 级别的管道更改

无。SharePoint Foundation 对 machine.config 文件或全局 web.config 文件未做更改。

IIS 配置级别的管道更改

SharePoint Foundation 更改了 IIS 配置存储区 (applicationhost.config)。以下是最重要的更改:

  • SharePoint Foundation 将 owssvr.dll 注册为名为 SharePoint14Module 的全局模块。该非托管程序集是将对数据的请求从前端 Web 服务器传递到 SharePoint Foundation 数据库的主要方式。它将处理向 SharePoint Foundation Web 应用程序请求非托管资源的请求。(类似于 as?x 文件的 ASP.NET 资源属于托管资源。)注册一个非托管程序集可使特定的 IIS 网站(以及 SharePoint Foundation Web 应用程序)能够自己使用该程序集。(托管模块不需要全局注册。)有关 owssvr.dll 的详细信息,请参阅远程过程调用协议及其子主题。下面演示了注册过程。(路径中的换行符不属于原始路径。)[2 和 3]

    备注

    本主题中所有摘自 SharePoint Foundation 配置文件的内容均依据 SharePoint Foundation 预发行版本。提供这些内容只是为了演示说明,而不一定显示已发行产品中的文件内容。

    <system.webServer>
       ...
      <globalModules>
          ...
          <!-- Other Unmanaged Modules -->
          ...
        <add name="SharePoint14Module" 
             image="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
                    \14\isapi\owssvr.dll" />
      </globalModules>
    </system.webServer>
    
  • 一些 IT 部门希望限制可在其服务器上运行的 ISAPI 扩展,使其仅限于那些在 applicationhost.config 文件的 <isapiCgiRestriction> 节中明确列出的项。为了满足此策略的需要,SharePoint Foundation 将在此节中添加 owssvr.dll 和三个紧密相关的程序集。下面演示了注册过程。(路径中的换行符不属于原始路径。)[2]

    <system.webServer>
       ...
      <security>
           ...
        <isapiCgiRestriction notListedIsapisAllowed="false" notListedCgisAllowed="false">
           ...
          <add path="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
                     \14\isapi\_vti_aut\author.dll" allowed="true" 
               groupId="Windows SharePoint Services V4" 
               description="Windows SharePoint Services V4" />
          <add path="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
                     \14\isapi\_vti_adm\admin.dll" allowed="true" 
               groupId="Windows SharePoint Services V4" 
               description="Windows SharePoint Services V4" />
          <add path="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
                     \14\isapi\shtml.dll" allowed="true" 
               groupId="Windows SharePoint Services V4" 
               description="Windows SharePoint Services V4" />
          <add path="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
                     \14\isapi\owssvr.dll" allowed="true" 
               groupId="Windows SharePoint Services V4" 
               description="Windows SharePoint Services V4" />
        </isapiCgiRestriction>
         ...
      </security>
       ...
    </system.webServer>
    
  • 只要 SharePoint Foundation 为 SharePoint Foundation Web 应用程序创建一个 IIS 网站和应用程序池,就会在 applicationhost.config 中创建一个 <site> 节。此节的主要目的是使用 virtualDirectory 元素将虚拟目录映射到物理目录。以下内容摘自 <site> 节。(路径中的换行符不属于原始路径。)[2]

    <site name="SharePoint - 80" id="2055865624" serverAutoStart="true">
        <application path="/" applicationPool="SharePoint - 80">
            <virtualDirectory path="/" 
                              physicalPath="C:\inetpub\wwwroot\wss\VirtualDirectories\80" />
            <virtualDirectory path="/_vti_bin" 
                              physicalPath="C:\Program Files\Common Files\Microsoft Shared
                                            \Web Server Extensions\14\isapi" />
            <virtualDirectory path="/_layouts" 
                              physicalPath="C:\Program Files\Common Files\Microsoft Shared
                                            \Web Server Extensions\14\template\layouts" />
            <virtualDirectory path="/_controltemplates" 
                              physicalPath="C:\Program Files\Common Files\Microsoft Shared
                                            \Web Server Extensions\14\template\controltemplates" />
              ...
        </application>
         ...
    </site>
    

SharePoint Web 应用程序级别的管道更改

创建 SharePoint Foundation Web 应用程序(以及相应的 IIS 网站)时,将会在其根目录中添加一个 web.config 文件。该文件包含以下配置设置,这些配置设置将会添加到或替代在配置层次结构中较高级别所做的设置。有关该文件以及如何在 SharePoint Foundation 开发项目中修改它的详细信息,请参阅使用 Web.config 文件

  • <SafeMode> 节配置安全模式处理系统。下面是安装后即有的标准 SharePoint Foundation SafeMode 元素。请注意,CallStack 属性设置为 false。这种设置的影响是阻止 ASP.NET 会报告的大多数系统异常信息。这样做是为了防止信息泄露。[5 和 6]

    SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">
    ...
    </SafeMode>
    
  • <SafeControls> 节指定允许在安全模式下运行的控件。自定义网页在安全模式下运行,但应用程序页不是。如果网页包含的控件不具有在网页上运行的管理员权限,则此设置将确保用户无法添加这种网页。(用户无权添加应用程序页。)此节中的每个 SafeControl 元素都将程序集中的特定控件类注册为安全的,或者使用通配符将多个控件类注册为安全的。(作为开发项目部署的一部分,您可以向该文件中添加自己额外的 SafeControl 元素。有关如何执行这一操作的详细信息,请参阅How to: Create a Supplemental .config FileSafeControl 元素(解决方案)。)以下内容摘自 <SafeControls> 节。[5 和 6]

    <SharePoint>
       ...
      <SafeControls>
        <SafeControl Assembly="System.Web, Version=1.0.5000.0, Culture=neutral, 
                     PublicKeyToken=b03f5f7f11d50a3a" Namespace="System.Web.UI.WebControls" 
                     TypeName="*" Safe="True" AllowRemoteDesigner="True" />
         ...
         <!-- Other ASP.NET classes -->
         ...
        <SafeControl Assembly="System.Web, Version=2.0.0.0, Culture=neutral, 
                     PublicKeyToken=b03f5f7f11d50a3a" Namespace="System.Web.UI.WebControls" 
                     TypeName="SqlDataSource" Safe="False" AllowRemoteDesigner="False" />
         ...
         <!-- SharePoint classes from earlier versions of the SharePoint assemblies  -->
         ...
        <SafeControl Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint" 
                     TypeName="*" Safe="True" AllowRemoteDesigner="True" />
         ...
         <!-- Other SharePoint classes from the current version of the SharePoint assemblies  -->
         ...
        <SafeControl Src="~/_controltemplates/*" IncludeSubFolders="True" Safe="True" 
                     AllowRemoteDesigner="True" />
         ...    
      </SafeControls>
       ...
    </SharePoint>
    

    请注意,摘要中的最后一个 SafeControl 元素注册为 _controltemplates 虚拟目录中安全的未编译的 ascx 控件,该虚拟目录映射到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 目录。

  • 将添加 <pages> 节,用于标识自定义的可屏蔽不安全控件的 SharePoint Foundation 页面分析程序筛选器(派生自 PageParserFilter)。该筛选器还决定是应对页面进行编译,还是应在无编译模型下提供服务。下面演示了注册过程。[4、5 和 6]

    <pages enableSessionState="false" enableViewState="true" 
                enableViewStateMac="true" validateRequest="false" 
                pageParserFilterType="Microsoft.SharePoint.ApplicationRuntime.SPPageParserFilter, 
                 Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                 PublicKeyToken=71e9bce111e9429c" asyncTimeout="7">
     ...
    </pages>
    
  • <modules> 节通过以下方式替代继承的配置:

    • 将 runAllManagedModulesForAllRequests 属性设置为 true。这样做的效果是:替代 IIS 配置存储区中的"managedHandler"预设条件集,并由此将管道的托管代码部分(包括那些由 ASP.NET 提供的托管代码部分,例如用户身份验证)应用于所有请求,而不论已请求的资源是否属于托管类型,也不论它是否与 ASP.NET 具有任何特定关联。[3]

    • 删除了一些 SharePoint Foundation 不使用的模块,并另外添加了一些模块,包括 SharePoint14Module(即 owssvr.dll 文件)。(此非托管模块在 IIS 配置存储区中注册为全局模块。它也必须在此启用才能由此 Web 应用程序使用。)[2]

      还添加了 SPRequestModule。此托管模块执行下列任务:

      • 注册 SharePoint Foundation 虚拟路径提供程序,它是实现 VirtualPathProvider 的外部类的对象。该路径提供程序用作一个 URL 解释器。例如,如果接收到一个针对由网站所有者自定义的网页的请求,则 URL 看起来指向一个物理文件系统中的位置;但是 SharePoint Foundation 路径提供程序会将 URL 转换为内容数据库中的一个位置。路径提供程序还使 SharePoint Foundation 能够支持两种不同类型的 URL:相对于服务器的 URL 和相对于网站的 URL。它会解析出现在某些文件路径(例如网站母版页文件的路径)中的"~"标记,还将检查文档库中所请求的文件是否已签出。最后,路径提供程序还会解释包含虚拟文件夹的 URL,并且将其解析为实际的物理 URL。在路径提供程序检索到 aspx 页之后,会将其传递给页面分析程序筛选器,该筛选器将确定该页中是否包含不安全的代码。如果没有不安全的代码,则会将该文件传递给 ASP.NET 页面分析程序。[2]

      • 确定是否应将某个请求传送至 owssvr.dll,如果应传送,则它将会对 owssvr.dll 需要的请求中的 HTTP 头做一些处理。[2 和 3]

      • 控制性能监视和请求限制系统。当服务器太忙而无法处理其接收的所有请求时,它可以有选择性地阻塞请求。[11]

      • 确定某个请求是否来自于移动设备。如果是,则将该请求转发至合适的移动网页。[12]

      下面演示了 <modules> 节。

      <system.webServer>
         ...
        <modules runAllManagedModulesForAllRequests="true">
          <remove name="AnonymousIdentification" />
          <remove name="FileAuthorization" />
          <remove name="Profile" />
          <remove name="WebDAVModule" />
          <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" />
        </modules>
         ...
      </system.webServer>
      
  • <handlers> 节主要通过删除一些 SharePoint Foundation 不使用的 HTTP 处理程序并添加一些支持 AJAX 的处理程序来替代继承的配置。另外,owssvr.dll 已注册为一个名为 OwssvrHandler 的 HTTP 处理程序。这是必需的,以便可以在发生 MapRequestHandler 事件期间可以将请求传送给它。(对非托管资源的请求由 OwssvrHandler 处理。)有关请求生命周期中的事件的详细信息,请参阅 ASP.NET Application Life Cycle Overview for IIS 7.0。下面演示了 <handlers> 节。(路径中的换行符不属于原始路径。)[3 和 10]

    <system.webServer>
       ...
      <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" />
      </handlers>
    </system.webServer>
    
  • 添加了 <microsoft.sharepoint.client> 节来支持 SharePoint Foundation 的客户端对象模型和客户端编程。(有关此对象模型的详细信息,请参阅使用客户端 API。)以下标记演示了此节。[7]

    <microsoft.sharepoint.client>
      <serverRuntime>
        <hostTypes>
          <add type="Microsoft.SharePoint.Client.SPClientServiceHost, Microsoft.SharePoint, 
                     Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
        </hostTypes>
      </serverRuntime>
    </microsoft.sharepoint.client>
    
  • 添加了一些节以支持对 Web 部件和控件数进行限制。[5 和 6]

    <WebPartLimits MaxZoneParts="50" PropertySize="1048576" />
    <WebPartCache Storage="CacheObject" />
    <WebPartControls DatasheetControlGuid="65BCBEE4-7728-41a0-97BE-14E1CAE36AAE" />
    
  • 添加了 <WorkflowServices> 节和 <System.Workflow.ComponentModel.WorkflowCompiler> 节以支持 SharePoint Foundation 中的工作流。下面的标记演示了 <WorkflowServices> 节以及下面的来自 <System.Workflow.ComponentModel.WorkflowCompiler> 节的摘要。[8]

    <SharePoint>
      ...
      <WorkflowServices>
        <WorkflowService Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                   PublicKeyToken=71e9bce111e9429c" 
                                   Class="Microsoft.SharePoint.Workflow.SPWinOEWSSService">
        </WorkflowService>
        <WorkflowService Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                   PublicKeyToken=71e9bce111e9429c" 
                                   Class="Microsoft.SharePoint.Workflow.SPWinOETaskService">
        </WorkflowService>
       </WorkflowServices>
    </SharePoint>
    ...
     <System.Workflow.ComponentModel.WorkflowCompiler>
      <authorizedTypes>
          <authorizedType Assembly="System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, 
                                    PublicKeyToken=31bf3856ad364e35" Namespace="System.Workflow.*" 
                                    TypeName="*" Authorized="True" />
          <authorizedType Assembly="System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral,
                                    PublicKeyToken=31bf3856ad364e35" Namespace="System.Workflow.*" 
                                    TypeName="*" Authorized="True" />
          <authorizedType Assembly="System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, 
                                    PublicKeyToken=31bf3856ad364e35" Namespace="System.Workflow.Runtime"
                                    TypeName="CorrelationToken" Authorized="True" />
          <authorizedType Assembly="mscorlib, Version=2.0.0.0, Culture=neutral, 
                                    PublicKeyToken=b77a5c561934e089" Namespace="System" 
                                    TypeName="Guid" Authorized="True" />
         ...
         <-- Other mscorlib classes -->
         ...
          <authorizedType Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                    PublicKeyToken=71e9bce111e9429c" 
                                    Namespace="Microsoft.SharePoint.Workflow" 
                                    TypeName="SPWorkflowActivationProperties" Authorized="True" />
          <authorizedType Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                    PublicKeyToken=71e9bce111e9429c" 
                                    Namespace="Microsoft.SharePoint.Workflow" 
                                    TypeName="SPWorkflowTaskProperties" Authorized="True" />
          <authorizedType Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                    PublicKeyToken=71e9bce111e9429c" 
                                    Namespace="Microsoft.SharePoint.Workflow" 
                                    TypeName="SPWorkflowHistoryEventType" Authorized="True" />
          <authorizedType Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                    PublicKeyToken=71e9bce111e9429c" 
                                    Namespace="Microsoft.SharePoint.Workflow" 
                                    TypeName="SPItemKey" Authorized="True" />
          <authorizedType Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                                    PublicKeyToken=71e9bce111e9429c" 
                                    Namespace="Microsoft.SharePoint.Workflow" 
                                    TypeName="SPWorkflowUserContext" Authorized="True" />
          <authorizedType Assembly="Microsoft.SharePoint.WorkflowActions, Version=14.0.0.0, 
                                    Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
                                    Namespace="Microsoft.SharePoint.WorkflowActions" 
                                    TypeName="*" Authorized="True" />
      </authorizedTypes>
    </System.Workflow.ComponentModel.WorkflowCompiler>
    
  • 使用 <securityPolicy> 节来添加两个信任级别:WSS_Minimal 和 WSS_Medium。这些信任级别在 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG 目录的文件中定义。下面的标记演示了 <securityPolicy> 节。(路径中的换行符不属于原始路径。) [5]

    <system.web>
      <securityPolicy>
        <trustLevel name="WSS_Medium" 
         policyFile="C:\Program Files\Common Files\Microsoft Shared
                     \Web Server Extensions\14\config\wss_mediumtrust.config" />
        <trustLevel name="WSS_Minimal" 
         policyFile="C:\Program Files\Common Files\Microsoft Shared
                     \Web Server Extensions\14\config\wss_minimaltrust.config" />
      </securityPolicy>
     ...
    </system.web>
    
  • <compiliation> 节通知四个附加的程序集的页面分析程序,它可用于编译 SharePoint Foundation as?x 文件。它还指定四个特殊的表达式生成器,页面分析程序使用这些表达式生成器在 SharePoint Foundation Web 应用程序中处理 ASP.NET 网页和其他 as?x 控件。下面的标记演示了 <compiliation> 节。[9]

    <system.web>
       ...
      <compilation batch="false" debug="false">
        <assemblies>
          <add assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                         PublicKeyToken=71e9bce111e9429c" />
          <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
                         PublicKeyToken=31bf3856ad364e35" />
          <add assembly="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, 
                         PublicKeyToken=71e9bce111e9429c" />
          <add assembly="Microsoft.SharePoint.Search, Version=14.0.0.0, Culture=neutral, 
                         PublicKeyToken=71e9bce111e9429c" />
        </assemblies>
        <expressionBuilders>
          <remove expressionPrefix="Resources" />
          <add expressionPrefix="Resources" 
               type="Microsoft.SharePoint.SPResourceExpressionBuilder, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
          <add expressionPrefix="SPHtmlEncodedResources" 
               type="Microsoft.SharePoint.SPHtmlEncodedResourceExpressionBuilder, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
          <add expressionPrefix="SPSimpleFormattingEncodedResources" 
               type="Microsoft.SharePoint.SPSimpleFormattingEncodedResourceExpressionBuilder, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
          <add expressionPrefix="SatelliteResources" 
               type="Microsoft.SharePoint.Search.SPSatelliteResourceExpressionBuilder, 
                     Microsoft.SharePoint.Search, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
        </expressionBuilders>
      </compilation>
    ...
    </system.web>
    
  • <sitemap> 节指定四个特殊的 SharePoint Foundation 站点地图提供程序。下面的标记演示了 <sitemap> 节。[1]

    <system.Web>
       ...
      <siteMap defaultProvider="SPSiteMapProvider" enabled="true">
        <providers>
          <add name="SPNavigationProvider" 
               type="Microsoft.SharePoint.Navigation.SPNavigationProvider, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
          <add name="SPSiteMapProvider" 
               type="Microsoft.SharePoint.Navigation.SPSiteMapProvider, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
          <add name="SPContentMapProvider" 
               type="Microsoft.SharePoint.Navigation.SPContentMapProvider, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
          <add name="SPXmlContentMapProvider" siteMapFile="_app_bin/layouts.sitemap"
               type="Microsoft.SharePoint.Navigation.SPXmlContentMapProvider, 
                     Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, 
                     PublicKeyToken=71e9bce111e9429c" />
        </providers>
      </siteMap>
       ...
    </system.Web>
    

备注

SharePoint Foundation 管理中心应用程序作为一个 SharePoint Foundation Web 应用程序实现(并由此也作为一个 IIS 网站实现);该应用程序也有一个 web.config 根文件,该文件与上文描述的 web.config 非常相似。二者主要的区别在于,管理中心应用程序支持会话声明,并将附加站点地图提供程序及一些附加控件注册为安全的。承载 SharePoint Services 平台的 IIS 网站也有一个非常小的根 web.config,用于注册支持基于声明的安全的提供程序。

目录级别的管道更改

SharePoint Foundation 结合使用 web.config 文件来进一步优化请求管道。该文件仅适用于针对特定的物理或虚拟目录内的资源的请求。这里仅给出一个示例:SharePoint Foundation 提供其应用程序页和表格的用于在移动设备上查看的版本。这些版本位于虚拟目录 _layouts\mobile(映射到物理目录 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\MOBILE\)中。此目录包含一个 web.config 文件,该文件对页面上显示的数据量进行限制,而且还注册了一系列筛选器,以根据请求页面的移动设备的性能控制页面的呈现方式。

请参阅

其他资源

ASP.NET Application Life Cycle Overview for IIS 7.0

ASP.NET Configuration Overview

IIS 7.0: Settings Schema

IIS 7.0 体系结构介绍(该链接可能指向英文页面)

IIS 7.0 中的配置系统(该链接可能指向英文页面)