像任何*.config文件一样,Web.config定义了根级的元素。嵌套在根内的是元素,它能够包含大量的子元素,用来控制Web应用程序在运行时应该怎样运行。在ASP.NET">
赞
踩
基于XML格式的Web.config文件
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings/>
<system.Web>
<compilation debug="false"/>
<authentication mode="Windows"/>
</system.Web>
</configuration>
像任何*.config文件一样,Web.config定义了根级的<configuration>元素。嵌套在根内的是<system.web>元素,它能够包含大量的子元素,用来控制Web应用程序在运行时应该怎样运行。在ASP.NET下,Web.config文件能使用任何文本编辑器修改。
Web.config文件的部分子元素
<appSettings>
该元素用于确立自定义名称/值对,这样它们可以以编程方式读进内存供页面使用
<authentication>
该元素和安全相关联,用于对该Web应用程序定义验证模式
<authorization>
也是和安全相关联的元素,用于定义哪一个用户可以访问Web服务器上的哪些资源
<compilation>
该元素用于启用(或禁用)调试,并定义由该Web应用程序使用的默认.NET语言,它可以选择性地定义应该被自动引用的外部.NET程序集
<connectionStrings>
该元素用于保持在该站点内使用的外部连接字符串
<customErrors>
该元素用于准确地告知运行库如何显示在Web应用程序工作期间出现的错误
<globalization>
该元素用于对该Web应用程序配置全局化的各项设置
<sessionState>
该元素用于控制以何种方式和在何处将由.NET运行库存储会话状态数据
<trace>
该元素用于对该Web应用程序启用(或禁用)跟踪支持
注解 关于Web.config格式的细节请查看.NET Framework 2.0 SDK文档内的“ASP.NET Settings Schema”话题。
Web.config文件也可能包含表24-4未描述的子元素。这些项多半是安全相关的,而其余的项只在高级ASP.NET场景中有用,例如在使用自定义HTTP首部或自定义HTTP模块(这里未涉及)时有用。如果希望看一下Web.config文件内能显示的完整元素集,可以使用在线帮助查看主题ASP.NET Settings Schema。
24.9.1 通过<trace>启用跟踪
Web.config文件中第一个要介绍的方面就是<trace>子元素。这个XML实体可以用任何数量的特性进一步限定它的行为,如下所示:
<trace enabled="true|false"
localOnly="true|false"
pageOutput="true|false"
requestLimit="integer"
traceMode="SortByTime|SortByCategory"/>
表24-5概括介绍了各个特性的要点。
表24-5 <trace>元素的特性
enabled
指定是否对作为一个整体的应用程序启用跟踪(默认设定值为false)。在前一章提到,可以对一个给定的*.aspx文件使用@Page指令有选择性地启用跟踪
localOnly
指明跟踪信息仅在宿主Web服务器上可见,而在远端客户机上不可见(默认设定值为true)
pageOutput
指定应该如何查看跟踪输出
requestLimit
指定将保存在服务器上的跟踪请求的数量,默认值为10。如果达到极限,跟踪就自动禁用
traceMode
指明跟踪信息以其被处理的顺序显示。默认值为SortByTime,但也可进行配置使得它按照种类排序
上一章介绍过,单独的页面可以使用<%@page>指令启用跟踪。然而,如果希望在Web应用程序中使所有的页面都启用跟踪功能,只需简单更新<trace>,如下所示:
<trace
enabled="true"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/>
通过<customErrors>自定义错误输出
<customErrors>元素可以用来自动将所有错误重定向到一个自定义的*.htm文件集中。如果你希望建立一个比CLR提供的默认页面更用户友好的错误页面的话,就可以用到它。<customErrors>元素的外观大体如下所示:
<customErrors defaultRedirect="url" mode="On|Off|RemoteOnly">
<error statusCode="statuscode" redirect="url"/>
</customErrors>
例如<customErrors>元素的用处,假设ASP.NET Web应用程序有两个*.htm文件。第一个文件(genericError.htm)是一个捕获所有错误的页面。可能这个页面包含了一个你的公司的标志图片,一个发送电子邮件到系统管理员的链接,还有一封冗长的道歉信。第二个文件(Error404.htm)是一个自定义的错误页面,它应该仅在运行时探测到错误编号404(可怕的“资源没有发现”错误)时出现。现在,如果要确保所有的错误被这些自定义页面处理,可以按如下代码所示更新Web.config文件:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings/>
<system.Web>
<compilation debug="false"/>
<authentication mode="Windows"/>
<customErrors defaultRedirect = "genericError.htm" mode="On">
<error statusCode="404" redirect="Error404.htm"/>
</customErrors>
</system.Web>
</configuration>
注意,根<customErrors>元素是如何用来为所有未被处理的错误指定通用页面的名字的。一个可能出现在开始标签中的特性是mode。默认的设置是RemoteOnly,如果HTTP请求来自同一台作为Web服务器的机器(这对于想要看细节的开发者来说是非常有帮助的),那么它指示运行库不显示自定义错误页。当设置mode特性为on时,这将导致自定义错误对所有机器可见(包括开发工具)。也要注意,<customErrors>元素可以支持许多嵌套<error>元素以指定哪个页面将用来处理指定的错误代码。
为了测试这些自定义错误重定向,构建一个定义两个Button部件的*.aspx页面,然后如下处理这两个控件的Click事件:
private void btnGeneralError_Click(object sender, EventArgs e)
{
// 这将触发一般错误。
throw new Exception("General error...");
}
private void btn404Error_Click(object sender, EventArgs e)
{
// 这将触发404错误(假设没有名为MyPage.aspx的文件)。
Response.Redirect("MyPage.aspx");
}
通过<sessionState>存储状态
Web.config文件最强大的方面是<sessionState>元素。默认情况下,ASP.NET将使用由ASP.NET工作进程(aspnet_wp.exe)承载的内部进程*.dll存储会话状态。与其他*.dll一样,好的一面是可以尽可能快地访问信息,而缺点是,如果这个应用程序域崩溃了(不管什么原因),所有的用户状态数据都会被销毁。此外,当存储状态数据为一个进程内*.dll时,你不能与一个联网的Web farm交互。默认情况下,Web.config文件的<sessionState>元素如下所示:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
如果Web应用程序由一个Web服务器主机承载,那么这个存储的默认模式正好合适。然而,在ASP.NET下,你可以指定运行库让ASP.NET会话状态服务器(aspnet_state.exe)这个代理进程承载会话状态*.dll。这么做,能够从aspnet_wp.exe将*.dll卸载到独有的*.exe中。第一步是启动aspnet_state.exe Windows服务。只需要简单地在命令行输入:
net start aspnet_state
另外,也可以从Control Panel的Administrative Tools文件夹访问Services applet来启动aspnet_state.exe(如图24-10所示)。
图24-10 Services applet
这个方法的主要优点是当计算机使用属性窗口启动时,你能够通过配置aspnet_state.exe使其自动启动。无论如何,一旦会话状态服务器运行起来,就可以修改Web.config文件的<sessionState>元素,如下所示:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
这里,mode特性已经设置为StateServer。此刻,CLR将在aspnet_state.exe内承载与会话相关的数据。在这种方式下,如果承载Web应用程序的应用程序域崩溃了,会话数据就会保存下来。还要注意,<sessionState>元素也能支持stateConnectionString特性。默认的TCP/IP地址值(127.0.0.1)指向本地计算机。如果你愿意让.NET运行库使用网络上另一台计算机上的aspnet_state.exe服务(又是Web farm),你可以自由更新这个值。
最后,如果要求Web应用程序具有最高级的隔离性和持久性,你可以让运行库将所有会话状态数据存储到Microsoft SQL Server中。对Web.config文件做适当的更新非常简单:
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
然而,在开始尝试运行相关的Web应用时,先需要确保目标计算机(由sqlConnectionString特性指定)已经得到正确的配置。安装.NET Framework 2.0 SDK(或Visual Studio 2005)时,有两个文件可供选择,InstallSqlState.sql和UninstallSqlState.sql,默认情况下,它们位于<%windir%>/Microsoft.NET/ Framework/<版本号>。在目标计算机上,必须使用如SQL Server 查询分析器(与Microsoft SQL Server一起发布的)等工具来运行InstallSqlState.sql文件。
一旦执行了这个SQL脚本,你将发现已经创建了一个新的SQL Server数据库(ASPState),它包含大量被ASP.NET运行库调用的存储过程和一套用来存储会话数据本身的表(同时,出于交换目的tempdb数据库已经用一套表更新了)。你可能已猜到,配置Web应用程序将会话数据存储到SQL Server是所有可能选项中最慢的。这么做的好处是,用户数据可以尽可能地持久保存了(即使Web服务器重启了)。
注解 如果使用ASP.NET会话状态服务器或SQL Server存储会话数据,必须确认任何放置在HttpSessionState对象内的自定义类型已经被标记了[Serializable]特性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。