2.6 ASP.NET 2.0应用程序的标准文件
与所有的ASP.NET站点相同,ASP.NET 2.0使用两个文件保存应用到整个站点的配置信息和代码。这两个文件分别是Web.config和Global.asax文件。
● Web.config包含站点的配置设置;例如,如果站点某些部分出现故障时,用于指定显示给终端用户的标准的自定义错误页面。
● Global.asax包含处理由整个站点上任何页面所引起的事件的代码;例如,每当用户第一次访问站点(一次会话的开始)时运行的代码。
2.6.1 Web.config保存整个站点设置
Web.config存储应用到整个站点的值。组织为XML文件并位于根目录下,结点主要保存三个方面的信息:
● 在开发和部署环境下应用程序功能可用性的设置。
● 保存当从数据源读取和向数据源写入时使用值的连接字符串。
● 保存所有其他信息的System.Web和System.Net设置。
System.Web设置再分为几个子类,包括以下内容(不是所有的都在WroxUnitedCS中使用);
● 使页面指向其他执行代码的页面HTTP模块;
● 应该在编译时开启的调试例程;
● 验证技术;
● Role Manager设置(开启或关闭);
● 匿名识别设置(允许或拒绝);
● 错误处理设置;
● 用于导航和菜单的Web.SiteMap文件数据;
● 用于识别用户的配置数据;
● 简单邮件传输协议的电子邮件配置(SMTP)(在WroxUnitedCS中没有使用);
● 识别大对象中对象位置的命名空间的定义(在WroxUnitedCS中没有使用)。
System.net仅保存用于目的的一个设置:用于发送电子邮件的一系列值。
可以用两种方法修正此文件的内容;第一种是在VWD中通过手动编辑它,万幸,这种方法并不太难。另一种方法是使用ASP.NETWeb站点管理工具,可以在VWD中启动它。进入主VWD菜单并选择Website_ASP.NET Configuration。一系列对话框允许设置VWD将要在Web.config中更改的值而不用直接打开该文件。可以在本章的最后一个实验中看一下此工具。
下面通过查看Wrox United的Web.config文件的一部分对Web.config文件的结构进行说明,从文件的上部往下查看每一节。如果打开该文件,可以看到它的结构(具有开始和结束标记,每一个都具有属性,有时还具有子结点)与任何其他XML文件相同。通过添加适当的结点和属性进行应用程序级的配置设置。特殊字符<!-- -- >内的文本被当作注释,可以把它添加到文件中以帮助其他用户了解文件的每一部分是用来干什么的。
当VWD创建一个Web.config文件时它包含很多注释,这些注释对每节的设置提供建议。所有值的列表包含在位于 C:\Windows\Microsoft.NET\Framework\v2.xxx\CONFIG\
Web.config.Comments.的文本文件中。
以下是Wrox United中Web.config文件的开始部分,可以在下载文件中查看。可以随时把它们导入到您的站点中而不用键入一个新的Web.Config文件。
<?xml version="1.0"?>
<!-- Note: As an alternative to hand editing this file you can use the web admin
tool to configure settings for your application. Use the Website->Asp.Net
Configuration option in Visual Studio.
A full list of settings and comments can be found in machine.config.comments
usually located in \Windows\Microsoft.Net\Frameworks\v2.x\Config -->
<configuration>
这里的三行代码会默认添加到所有新的Web.config文件中。第一行包含XML声明,指明Web.config文件遵循XML标准。下一节是一个大型注释,提示可以使用管理工具而不用手动编辑代码。需要注意的最后一项是文件的根结点;<configuration>结点包含带有与存储在站点上的内容有关的设置的子结点。
下一节包含自定义应用程序设置,该设置对改变样例应用程序在不同环境中运行的方式有用。The large section between <!--和-->之间的大的一节是向VWD中的程序员提供的注释,不是实际设置的一部分:
<!--
Mode defines certain feature availability:
Full: No restrictions
Real: Runs as if a real site, without the view code and download links
-->
<appSettings>
<add key="mode" value="Full" />
</appSettings>
下一节(连接字符串一节)包含几组关于数据源的信息。此字符串通常包含可以用来把您的代码连接到存储在数据库中的数据的验证信息。连接字符串在第7章详细论述。现在只注意一下在连接字符串一节内有一个或多个用来添加字符串的标记:
<!--
define the connection string to the database
-->
<connectionStrings>
<add name="WroxUnited"
connectionString=" Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|WroxUnited.mdf;
Integrated Security=True;
User Instance=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
注意connectionString属性在这里换行是因为页面宽度的限制。在您的代码中该行代码应该保持在一行内。
在连接字符串之后,其余的设置都位于<system.web>标记内。它们可以以任何顺序出现,here the httpModules setting is covered first. 此值主要允许站点处理用户选择的主题,在页面中不要求有代码。在第5章论述主题,虽然文中没有详细论述httpModule,但对代码进行了详细说明。
<system.web>
<httpModules>
<add name="Page" type="Wrox.Web.GlobalEvents.ThemeModule" />
</httpModules>
System.Web中的下一项是编译值。当设置为true(像以下代码演示的那样)时,ASP.NET 2.0将提供一个到页面的输出,描述构建页面期间所发现的任何问题。在开发站点时此功能非常有用,但是在部署前必须把值设置为false:
<system.web>
<compilation debug="true">
</compilation>
Wrox United声明了用于三种安全设置的站点级的值:验证、角色和配置。第4章和第11章详细论述这些功能。以下代码的Web.config一节给出一个将学到编写哪些内容的预览。注意这些设置如何建立用于登录的页面(Default.aspx)和启动Role Manager。然后是创建Member类型的角色的一组标记。这些也是在第4章和第11章中详细说明。以下的代码列表为节省空间没有列出程序员帮助注释。另外,在WroxUnited web.config中的第二节和第三节设置之间省略了一些内容,这里是一些其他的设置。
<authentication mode="Forms">
<forms loginUrl="Default.aspx"></forms>
</authentication>
<roleManager enabled="true"/>
<anonymousIdentification enabled="true"/>
...
<profile enabled="true">
<properties>
<add name="MemberName"/>
<add name="Name"/>
...
<add name="Cart" serializeAs="Binary" type="Wrox.Commerce.ShoppingCart"
allowAnonymous="true"/>
</properties>
</profile>
下一节是关于能影响站点日常运行的错误处理部分。第15章详细论述错误处理,但是作为说明,可以把ASP.NET设置为在出现问题时将用户重定向到错误页。在错误情况下显示的文件在Web.config defaultRedirect设置中的声明如下:
<!-- The <customErrors> section enables configuration of what to do if/when an
unhandled error occurs during the execution of a request. Specifically, it enables
developers to configure html error pages to be displayed in place of a error stack
trace. -->
<customErrors mode="RemoteOnly">
<error statusCode="404" redirect="missingPage.aspx"/>
</customErrors>
例如,如果你的数据库服务器是断电的受害者,用户不需要知道详细情况,但是需要打消他们的疑虑,可以给出一行提示“对不起,现在出现故障——我们正努力修复故障。将会很快恢复正常的服务。”而本地管理员需要知道问题所在,以便他们能尽快从错误中恢复并正常运行。此示例中的RemoteOnly属性意味着远端用户只能看到友好的提示信息,而管理员会看到任何错误的所有详细情况。
System.Web用来标识保存站点地图的文件,站点地图是所有页面的索引以及这些页面之间关系(在第2章论述)的描述。ASP.NET 2.0 也需要站点使用如何提供程序或读取工具的标识。
<!-- Redefine the Site Map Provider, to add the security trimming attribute, which
is off by default -->
<siteMap defaultProvider="AspXmlSiteMapProvider" enabled="true">
<providers>
<clear/>
<add name="AspXmlSiteMapProvider"
type="System.Web.XmlSiteMapProvider,
System.Web,
Version=2.0.3600.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
最后的一组设置在system.net内。尽管没有在WroxUnitedCS应用程序中使用该设置,但是可以使用它以便当用户忘记口令时能够向用户发送自动电子邮件,并请求在电子邮件中向用户发送口令。不管电子邮件是如何创建的,必须在Web.config中声明SMTP(简单邮件传输协议),如下所示:
<system.net>
<mailSettings>
<!-- these settings define the mail server settings from: the user name from
which the email is sent - this is the application that is sending the message host:
the name of your mail server userName: the name the application will use to log
into the mail server password: the password for the above user name
-->
<smtp from="admin@your-domain.com">
<network host="your-mail-server-name"
userName="your-user-name"
password="your-password" />
</smtp>
</mailSettings>
</system.net>
最后,像所有XML文件一样,每个开始标记都必须有一个结束标记,因此必须以如下的形式结束文件:
</system.web>
</configuration>
正如所见,Web.config中保存所有其他页面可以引用的站点级设置。因此不必在每个需要信息的页面上重复指定相同的几项信息,并且有一个可以更改这些设置的地方。
在本书后面的部分,将向所有的站点页面上添加更多的功能,包括添加处理在每个页面上发生的各种事件的代码。但是,同样也不想在每个页面上指定相同的设置,如果需要让相同的行为重复在多个页面上,需要一种方法共享该代码。在Web.config中没有可执行代码——因此需要另一个站点级文件——Global.asax文件。
2.6.2 Global.asax 保存用于整个站点的代码
Web.config保存值,Global.asax保存代码。Global.asax像Web.config一样位于站点的根目录下。第9章详细论述编写代码,现在先大致浏览一下Global.asax。
Global.asax中的代码在三种情况之一下执行。第一种情况是整个应用程序启动或停止时。第二种情况是当每个用户开始或停止使用站点时。第三种情况是对可能发生在每个页面上的特殊事件进行响应时,例如用户登录或者出现错误。这些中的每一个都称为事件。当每一个事件发生时,ASP.NET让Global.asax知道事件的发生,通过编辑Global.asax,可以把代码放入其中,代码会执行以响应事件。
本书后面将使用Global.asax在Wrox United Web站点的所有页面上共享代码。
2.6.3 通过Web浏览器编辑站点配置
现在,查看Web.config复杂的XML语法和Global.asax中的代码可能令人感到有点为难。编辑这些文件以更改整个应用程序的配置和行为需要对文件的语法规则有很好的理解,并且需要准确的键入以避免引入小的错误。但是,很方便的是通过Web Site Properties对话框,ASP.NET 2.0提供一种图形工具能够修改一些在Web.config中通过手动输入来更改的设置。
通过单击位于Solution Explorer顶部的ASP.NET Configuration按钮可以引出Web Site Administration Tool,如图2-8所示。

图2-8
Properties窗口打开,如图2-9所示。
正如所见,VWD实际上打开内置于ASP.NET中称为ASP.NET Administration Tool的Web浏览器以显示Web站点,通过ASP.NET Administration Tool可以编辑Web应用程序的设置。本书稍后将深入地使用此管理工具,但是现在可以浏览工具的Application Configuration部分。图2-10显示此页面提供哪些选项。
虽然不能完成在前面看到的所有管理工作,但是能够管理的Web.config的一些关键部分显示在这里。能够编辑应用程序设置(前面所看到的<appSettings>元素的内容)、电子邮件设置(在Web.config文件中看到的<smtpMail>节)以及调试和错误处理(前面所查看的<compilation>和<customErrors>节)。

图2-9

图2-10
在此实验中,可以看到ASP.NET Administration Tool怎样编辑Web.config文件。
一、实验 使用Administration Tool更改设置
1.工作在VWD的Solution Explorer中,把missingPage.aspx从下载文件(C:\BegASPNET2\
WroxUnited)导入到您的站点中。
2.单击Solution Explorer上的图标打开Web Site Administration Tool。
如果已经从www.wrox.com的下载文件中导入了WroxUnitedCS web.config,将发现它使用一个称为Wrox的命名空间,在本书中还没有创建此命名空间。忽视对这种情况的警告。
3.导航到Application Configuration页,然后单击Define Default Error Page。
4.选择Specify a URL to Use as the Default Error Page选项,然后选择MissingPage.aspx作为发生错误时把用户重定向到的页面。
5.单击Save按钮。
6.返回到VWD中,打开Web.config文件。
7.向下滚动直到找到配置的<customErrors>部分,注意到defaultRedirect属性的值已经改变为在管理工具中选择的页面的路径:
<customErrors mode="RemoteOnly" defaultRedirect="MissingPage.aspx">
</customErrors>
二、工作原理
管理工具只是编辑Web.config中提供的设置的一种友好方式,包括默认的错误页面。当通过管理工具更改应用程序的错误处理设置时,它来编辑Web.config文件——而不必您亲自编辑XML数据!






