4.3 ASP.NET配置
ASP.NET的所有系统配置信息都是以XML格式存储在配置文件中,这个文件命名为Web.config。Web.config文件可以出现在ASP.NET应用程序的多个目录中。使用这些文件可以在将应用程序部署到服务器之前、期间或之后,方便地编辑配置数据项和其他信息。可以通过使用标准的文本编辑器、ASP.NET的MMC管理单元、网站管理工具或ASP.NET配置API来创建和编辑ASP.NET配置文件。
ASP.NET配置文件将应用程序配置设置与应用程序代码分开。通过将配置数据和信息与代码分开,可以方便地将设置与应用程序关联,在部署应用程序之后根据需要更改设置,以及扩展配置架构。
4.3.1 Web.config配置文件
每个Web.config文件都将配置设置应用于它所在的目录及它下面的所有子目录。可以选择用子目录中的设置重写或修改父目录中指定的设置。通过在location元素中指定一个路径,可以选择将Web.config文件中的配置设置应用于个别文件或子目录。
ASP.NET配置层次结构的根目录为systemroot\Microsoft.NET\Framework\ versionNumber\CONFIG\Web.config文件,其中,包括应用于所有运行特定版本的.NET Framework的ASP.NET应用程序的设置。由于每个ASP.NET应用程序都从根Web.config文件那里继承默认配置设置,因此,只需为重写默认设置的设置创建Web.config文件。具体文件内容如下。
运行时,ASP.NET使用Web.config文件按层次结构为传入的每个URL请求计算唯一的配置设置集合,这些设置只计算一次,随后将缓存在服务器上。ASP.NET将检测对配置文件进行的任何更改,然后自动将这些更改应用于受影响的应用程序,而且大多数情况下,会重新启动应用程序。只要更改层次结构中的配置文件,就会自动计算并再次缓存分层配置设置。除非processModel字节已更改,否则,IIS服务器不必重新启动,所做的更改即会生效。
可以使用文本编辑器或XML编辑器来直接编辑配置文件。
4.3.2 嵌套配置设置
在建立应用程序后,可以为当前的应用程序添加一个内部的应用程序,就像是在一个网站内部嵌套了另外一个网站。网站是可以嵌套的,配置文件当然也是可以嵌套的,下面演示嵌套配置文件的操作。在外层的Web应用程序中添加一个目录,在目录中添加一个配置文件,如图4-5所示。
图4-5 在新添加的目录中添加一个配置文件
单击“添加”按钮,系统在刚刚选择的目录中自动添加一个配置文件,默认内容如图4-6所示。
图4-6 配置文件默认内容
在添加的内部配置文件中,可以和外部的配置文件定义相同的配置信息,同ASP.NET其他类型的文件相同,这个内部的配置文件将覆盖外部配置文件的相同内容。
4.3.3 在Web.config中存储自定义设置
在配置文件中除了系统配置的节点外,还可以添加开发人员自定义的设置节点,这些节点是为了增加应用程序的可移植性,例如,文件上传的路径等。更深入的应用还可以包含自定义应用程序设置,如文件路径、XML Web services URL或存储在应用程序的.ini文件中的任何信息等。自定义配置信息如下。
appSettings节点为自定义信息节点,可以定义存储很多程序中使用到的信息。现在来看节点的具体说明,它们包括属性File、子元素和父元素。
File:可选的String属性。
指定包含自定义应用程序配置设置的外部文件的相对路径。指定的文件包含的设置类型与在appSettings节点的add、clear和remove特性中指定的设置类型相同,并且使用的键/值对格式也与这些元素相同。指定的路径是本地配置文件的相对路径,如果找不到指定的文件,运行时会忽略该特性。
由于Web.config文件的任何更改都会导致应用程序重新启动,因此,使用一个单独的文件则既可以让用户修改appSettings节中的值,又不会导致应用程序重新启动,该单独文件的内容将与Web.config文件中的appSettings节合并,此功能限于appSettings特性。
子元素节点。
add:可选元素,向应用程序设置集合添加名称/值对形式的自定义应用程序设置。
clear:可选元素,移除所有对继承的自定义应用程序设置的引用,仅允许由当前add特性添加的引用。
remove:可选元素,从应用程序设置集合中移除对继承的自定义应用程序设置的引用。
父元素节点,包括两个节点。
Configuration:指定公共语言运行时和.NET Framework应用程序所使用的每个配置文件中均需要的根元素。
system.web:指定配置文件中ASP.NET配置设置的根元素,并包含用于配置ASP.NET Web应用程序和控制应用程序行为方式的配置元素。
4.3.4 ASP.NET Web站点管理工具WAT
在编译器中提供了一个很好的网站快捷编辑工具,便于开发人员配置站点,打开工具的方式为选中解决方案中建立的站点右击,在弹出的右键菜单中选择“项目”→“ASP.NET配置”菜单命令,效果如图4-7所示。
图4-7 Web网站配置
在打开的网站管理工具中可以看到分为主页、安全、应用程序和提供程序四个选项,其中,主页显示配置工具的选择项和说明,如图4-8所示。
图4-8 网站编辑工具主界面
在“安全”选项中可以看到数据存储区,也可以重新配置数据存储区,如图4-9所示。
图4-9 WAT工具的安全配置项
应用程序选项可以配置应用程序的基础信息,包括应用程序设置、电子邮件的SMTP设置、应用程序状态和调试跟踪信息,如图4-10所示。
图4-10 WAT应用程序选项
在配置工具的应用程序选项中,包括系统的基础信息设置。应用程序设置项为创建应用程序设置和管理应用程序设置。其实这里的应用程序设置就是对Web.config文件中的appSetings节点进行编辑,即自定义配置。其中,创建应用设置就是添加应用程序配置,管理应用设置就是编辑已有的自定义配置信息。单击“创建应用程序设置”链接,进入应用程序自定义配置信息添加界面,如图4-11所示。
图4-11 应用程序自定义配置添加
在文本框中输入名称和值,单击“保存”按钮,将为自定义节点添加一个新值,并且询问是否继续添加,如果继续添加将从新转到添加页面。如果单击“确定”按钮,将转到配置信息管理界面,在此处可以编辑,删除已经存在的配置信息,也可以单击应用程序选项卡中的“创建新应用程序设置”按钮,转到添加界面。
应用程序选项卡中间的SMTP是配置电子邮件SMTP信息,如图4-12所示。
图4-12 SMTP信息配置界面
填写SMTP相关信息,单击“保存”按钮,保存到配置文件中。在程序中使用到的SMTP设置就可以在配置文件中读取了。
后面还有调试和错误界面设置,可以设置程序的调试信息和程序出现未处理错误时的操作,或者将未处理的错误定义到的友好错误界面。
在关闭配置工具界面后回到编辑器中时,提示用户配置信息已经修改是否更新,如图4-13所示。
图4-13 提示配置信息已经修改
单击“全是”按钮,将在编译器中显示已经通过工具编辑后的配置信息文件,如图4-14所示。
图4-14 编译器中显示的自定义配置信息
WAT是一个编译器提供的配置工具,在编程过程中,有时需要使用程序来读写配置文件信息,下面使用代码来完成配置信息文件关键节点的读取和写入。
4.3.5 编程读取和写入配置设置
在ASP.NET中读取和写入配置文件最常用到的有两项,一项为配置文件中的appSettings节点,此节点位于配置文件根节点configuration下。另外一项为connectionStrings节点,也是位于根节点configuration下。这两个节点都可以存储自定义的信息,区别在于connectionStrings节点可以有系统加密存储的自定义信息,一般用来存储用户比较敏感的信息,例如数据库连接等。而appSettings节点则用来存储一般类的信息,比如程序中的开始时间,程序执行的过程等信息。图4-15演示了appSettings节点的全部读取方式。
图4-15 读取appSettings节点信息
该程序执行结果如图4-16所示。
图4-16 读取自定义配置信息结果
程序中用到了.NET提供的命名空间System.Web.Configuration.WebConfigurationManager,在该命名空间中系统内置了很多方法,这些方法都是用来操作系统的配置文件,如图4-17所示。
图4-17 appSettings节点其他操作方法
connectionStrings节点的读取方法代码如图4-18所示。
图4-18 读取connectionStrings节点信息
该段代码使用系统命名空间中的方法获得一个配置文件中的集合,循环输出集合中的配置文件信息,执行结果如图4-19所示。
图4-19 读取connectionStrings节点程序执行结果
上述程序演示了自定义信息的读取过程,下面来讲述自定义配置信息的写入。首先向appSettings节点写入一个信息,然后将这个写入的信息显示出来,代码如图4-20所示。
图4-20 appSettings信息的写入
执行结果如图4-21所示。
图4-21 修改配置信息执行结果
执行完上述代码后,编译器中的配置文件信息将被程序修改。编译器能够自动检测到被修改的配置文件信息,并且在系统中进行提示,提示信息如图4-22所示。
图4-22 编译器感知配置文件被修改提示是否更新
该对话框有四个选择项,这四个选择项中,前两个可以将程序修改的信息回滚到没有修改的时候,后两个选择项将更新配置信息文件。当然,在实际的程序发布运行后不会有这样的选择项,程序将自动处理这些事情,在选择了“全是”按钮后编译器将自动加载修改后的信息,如图4-23所示。
图4-23 修改完成后的自定义配置文件
在实际的程序开发过程中我们有很多信息存储在配置文件中,这些信息比较敏感,例如数据库名称、登录名称、登录密码和其他关键信息。这些信息很多是不能明文显示在配置文件中的。为了安全和使用方便,我们需要对这些信息进行加密处理来有效地防止信息泄露。
4.3.6 加密配置块
在ASP.NET中加密算法采用RSA加密算法,这个算法是1977年发明的,ASP.NET使用这个算法在反编译的软件中是完全可以看到的。其实在ASP.NET中的大部分接口、类和方法都是可以看到源码的,可以使用反编译工具打开类看到其写法。在自定义配置文件中,用户使用这个加密算法对配置信息进行加密,代码如下。
}
加密后系统会产生一个整体的字符串,放在固定设置中,加密后的文件显示如图4-24所示。
图4-24 加密后的自定义配置信息
但加密后不会影响对程序的访问,系统会自动解密,加密后的访问结果如图4-25所示。
图4-25 加密后的访问结果
这样方便用户在程序中自动控制关键信息的加密和解密,使信息更加安全。