33 配置

一个 ASP.NET 应用程序的行为是由以下两个配置文件中的不同设置决定的:

  • machine.config
  • web.config

machine.config 文件包含所有支持设置项的默认和设置机器的具体值。机器的设置是由系统管理员,且应用程序通常不能访问这个文件。

然而,一个应用程序,可以通过在它的根文件夹中创建 web.config 文件覆盖默认值。web.config 文件是 machine.config 文件的一个子集。

如果应用程序包含子目录,那么它可以为每个文件夹定义一个 web.config 文件。每个配置文件的范围是用一个分层的自上而下的方式确定。

任何 web.config 文件都可以在本地扩展,限制,或重写任何设置在上层的定义。

Visual Studio 会为每个项目生成默认的 web.config 文件。应用程序可以在没有 web.config 文件的情况下执行,然而,我们不能调试一个没有 web.config 文件的应用程序。

下图显示的是用于 web 服务教程中的解决方案资源管理器为样本的例子:

第 33 章 配置 - 图1

在这种应用中,存在两个 web.config 文件分别对应于调用 web 服务的 web 服务和 web 站点。

web.config 文件中的配置元素是作为根节点的。此元素中的信息分为两个主要领域:配置节处理程序声明区域,和配置节设置区域。

下面的代码片段显示了一个配置文件的基本语法:

  1. <configuration>
  2.  
  3. <!-- Configuration section-handler declaration area. -->
  4. <configSections>
  5. <section name="section1" type="section1Handler" />
  6. <section name="section2" type="section2Handler" />
  7. </configSections>
  8. <!-- Configuration section settings area. -->
  9.  
  10. <section1>
  11. <s1Setting1 attribute1="attr1" />
  12. </section1>
  13.  
  14. <section2>
  15. <s2Setting1 attribute1="attr1" />
  16. </section2>
  17.  
  18. <system.web>
  19. <authentication mode="Windows" />
  20. </system.web>
  21.  
  22. </configuration>

Configuration Section Handler 声明

配置节处理程序声明是包含在 的标签中的,每个配置处理程序指定配置节的名称,并包含在提供了一些配置数据的文件中。它具有以下基本语法:

  1. <configSections>
  2. <section />
  3. <sectionGroup />
  4. <remove />
  5. <clear/>
  6. </configSections>

它具有以下元素:

  • Clear - 所有涉及继承的节和节组的引用。
  • Remove - 删除一个继承引用的部分和部分组。
  • Section - 定义了配置节处理程序和配置元素之间的关联。
  • Section group - 它定义了一个配置节处理程序与配置节之间的关联。

应用程序设置

应用程序设置允许存储只读访问的应用程序的名称-数值对。例如,你可以定义一个自定义应用程序设置如下:

  1. <configuration>
  2. <appSettings>
  3. <add key="Application Name" value="MyApplication" />
  4. </appSettings>
  5. </configuration>

例如,你还可存储一本书的 ISBN 号和名字数据对:

  1. <configuration>
  2. <appSettings>
  3. <add key="appISBN" value="0-273-68726-3" />
  4. <add key="appBook" value="Corporate Finance" />
  5. </appSettings>
  6. </configuration>

连接字符串

连接字符串展示的是可用于网站的数据库连接字符串。例如:

  1. <connectionStrings>
  2. <add name="ASPDotNetStepByStepConnectionString"
  3. connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
  4. Data Source=E:\\projects\datacaching\ /
  5. datacaching\App_Data\ASPDotNetStepByStep.mdb"
  6. providerName="System.Data.OleDb" />
  7.  
  8. <add name="booksConnectionString"
  9. connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
  10. Data Source=C:\ \databinding\App_Data\books.mdb"
  11. providerName="System.Data.OleDb" />
  12. </connectionStrings>

系统的网络元素

system.web 元素为 ASP.NET 配置节指定了根元素,并且包含了配置 ASP.NET Web 应用程序和控制应用程序运转的配置元素。

它控制大多数比较常见的需要调整的配置元素。该元素的基本语法如下:

  1. <system.web>
  2. <anonymousIdentification>
  3. <authentication>
  4. <authorization>
  5. <browserCaps>
  6. <caching>
  7. <clientTarget>
  8. <compilation>
  9. <customErrors>
  10. <deployment>
  11. <deviceFilters>
  12. <globalization>
  13. <healthMonitoring>
  14. <hostingEnvironment>
  15. <httpCookies>
  16. <httpHandlers>
  17. <httpModules>
  18. <httpRuntime>
  19. <identity>
  20. <machineKey>
  21. <membership>
  22. <mobileControls>
  23. <pages>
  24. <processModel>
  25. <profile>
  26. <roleManager>
  27. <securityPolicy>
  28. <sessionPageState>
  29. <sessionState>
  30. <siteMap>
  31. <trace>
  32. <trust>
  33. <urlMappings>
  34. <webControls>
  35. <webParts>
  36. <webServices>
  37. <xhtmlConformance>
  38. </system.web>

下表提供了一些常用的 system.web 元素的子元素的简要描述:

AnonymousIdentification

这是在需要用户身份确认时对未被认证的用户进行识别的。

Authentication

它是配置授权支持的,基本的语法是:

  1. <authorization>
  2. <allow .../>
  3. <deny .../>
  4. </authorization>

Caching

它配置缓存设置,基本的语法是:

  1. <caching>
  2. <cache>...</cache>
  3. <outputCache>...</outputCache>
  4. <outputCacheSettings>...</outputCacheSettings>
  5. <sqlCacheDependency>...</sqlCacheDependency>
  6. </caching>

CustomErrors

它定义了自定义错误消息,基本的语法是:

  1. <customErrors defaultRedirect="url" mode="On|Off|RemoteOnly">
  2. <error. . ./>
  3. </customErrors>

Deployment

它定义了用于部署的配置设置。基本语法如下:

  1. <deployment retail="true|false" />

HostingEnvironment

它为托管环境定义了配置设置。基本语法如下:

  1. <hostingEnvironment idleTimeout="HH:MM:SS" shadowCopyBinAssemblies="true|false"
  2. shutdownTimeout="number" urlMetadataSlidingExpiration="HH:MM:SS" />

Identity

它用于配置对应用程序的认证机制,基本语法如下:

  1. <identity impersonate="true|false" userName="domain\username"
  2. password="<secure password>"/>

MachineKey

它用于配置用于加密和解密数据的表单验证 Cookie 的密钥。

它还允许配置验证密钥对视图状态数据和 Forms 身份验证票证执行消息认证检查。基本的语法是:

  1. <machineKey validationKey="AutoGenerate,IsolateApps" [String]
  2. decryptionKey="AutoGenerate,IsolateApps" [String]
  3. validation="HMACSHA256" [SHA1 | MD5 | 3DES | AES | HMACSHA256 |
  4. HMACSHA384 | HMACSHA512 | alg:algorithm_name]
  5. decryption="Auto" [Auto | DES | 3DES | AES | alg:algorithm_name]
  6. />

Membership

它用于配置管理和认证用户参数。基本的语法是:

  1. <membership defaultProvider="provider name"
  2. userIsOnlineTimeWindow="number of minutes" hashAlgorithmType="SHA1">
  3. <providers>...</providers>
  4. </membership>

Pages

它提供了网页的具体配置。基本的语法是:

  1. <pages asyncTimeout="number" autoEventWireup="[True|False]"
  2. buffer="[True|False]" clientIDMode="[AutoID|Predictable|Static]"
  3. compilationMode="[Always|Auto|Never]"
  4. controlRenderingCompatibilityVersion="[3.5|4.0]"
  5. enableEventValidation="[True|False]"
  6. enableSessionState="[True|False|ReadOnly]"
  7. enableViewState="[True|False]"
  8. enableViewStateMac="[True|False]"
  9. maintainScrollPositionOnPostBack="[True|False]"
  10. masterPageFile="file path"
  11. maxPageStateFieldLength="number"
  12. pageBaseType="typename, assembly"
  13. pageParserFilterType="string"
  14. smartNavigation="[True|False]"
  15. styleSheetTheme="string"
  16. theme="string"
  17. userControlBaseType="typename"
  18. validateRequest="[True|False]"
  19. viewStateEncryptionMode="[Always|Auto|Never]" >
  20.  
  21. <controls>...</controls>
  22. <namespaces>...</namespaces>
  23. <tagMapping>...</tagMapping>
  24. <ignoreDeviceFilters>...</ignoreDeviceFilters>
  25. </pages>

Profile

它用于配置用户配置文件参数。基本的语法是:

  1. <profile enabled="true|false" inherits="fully qualified type reference"
  2. automaticSaveEnabled="true|false" defaultProvider="provider name">
  3.  
  4. <properties>...</properties>
  5. <providers>...</providers>
  6.  
  7. </profile>

RoleManager

为用户角色配置设置信息。基本的语法是:

  1. <roleManager cacheRolesInCookie="true|false" cookieName="name"
  2. cookiePath="/" cookieProtection="All|Encryption|Validation|None"
  3. cookieRequireSSL="true|false " cookieSlidingExpiration="true|false "
  4. cookieTimeout="number of minutes" createPersistentCookie="true|false"
  5. defaultProvider="provider name" domain="cookie domain">
  6. enabled="true|false"
  7. maxCachedResults="maximum number of role names cached"
  8.  
  9. <providers>...</providers>
  10. </roleManager>

SecurityPolicy

用于配置安全策略。基本的语法是:

  1. <securityPolicy>
  2. <trustLevel />
  3. </securityPolicy>

UrlMappings

它定义了用于隐藏原始URL的映射,并提供更具用户友好性的的 URL 。基本的语法是:

  1. <urlMappings enabled="true|false">
  2. <add.../>
  3. <clear />
  4. <remove.../>
  5. </urlMappings>

WebControls

它提供了对客户端脚本共享位置的名称。基本的语法是:

  1. <webControls clientScriptsLocation="String" />

WebServices

用于配置 Web 服务。