[摘要]对于任何的WEB应用程序服务器,一个主要的要求就是具有丰富而且灵活具有柔韧性的配置系统——使开发者能够让“可安装的应用程序”容易地与“设置数据”联系,而无须将设置值置入程序代码,而且,能使Administrators方便容易地调整、定制这些设置值 Post-deployment。 ASP+ 配置系...
对于任何的WEB应用程序服务器,一个主要的要求就是具有丰富而且灵活具有柔韧性的配置系统——使开发者能够让“可安装的应用程序”容易地与“设置数据”联系,而无须将设置值置入程序代码,而且,能使Administrators方便容易地调整、定制这些设置值 Post-deployment。
ASP+ 配置系统致力于满足这两个必要条件。为做到这些,它通过了一个分级的配置基础结构,以使扩展的配置数据可以保存,而且贯穿使用在整个ASP+应用程序当中。同时,ASP+提供了丰富的初始设置集合。
ASP+配置系统提供了一下好处:
1、配置信息存储在基于XML的配置文件当中。管理员和开发者能够使用任何标准文本编辑器,XML解析器,或PERL脚本来解释和更新配置设定。
2、配置信息存放在文件中,它作为应用程序的其他部分放置在与其相同的目录树下。这使ASP+应用程序非常容易安装,只需使用 Xcopy 或者是 FTP。
3、配置系统易于扩展。你可以在配置系统中存放自己的配置标准以及设置。
4、对ASP+配置文件的更改由系统自动检测,在无须用户干涉的情况下被提交。系统管理员不需要去动系统以让改变生效。
5、配置信息被分级提交应用。子目录继承或覆盖从父目录得来的配置设定。这就允许不同的应用程序或单个应用程序的不同部分具有不同的设定。
Config.web 配置文件
所有ASP+的配置信息都包括在名叫Config.web的配置文件当中。下面的例子说明了一个ASP+配置文件的结构:
代码:
--------------------------------------------------------------
<!-- CONFIG.WEB FILE -->
<configuration>
<configsections>
<add names="httpmodules" type="System.Web.Config.HttpModulesConfigHandler"/>
<add names="httphandlers" type="System.Web.Config.HttpHandlerConfigHandler"/>
<add names="sessionstate" type="System.Web.Config.SessionStateConfigHandler"/>
<add names="globalization" type="System.Web.Config.GlobalizationConfigHandler"/>
<!-- ADDITIONAL CONFIGSECTION DECLARATIONS GO HERE -->
</configsections>
<httpmodules>
<!-- http module subelements go here -->
</httpmodules>
<httphandlers>
<!-- http handlers subelements go here -->
</httphandlers>
<sessionstate>
<!-- session state subelements go here -->
</sessionstate>
<globalization>
<!-- session state subelements go here -->
</globalization>
<!-- ADDITIONAL CONFIG SECTIONS GO HERE -->
</configuration>
---------------------------------------------------------------
所有的配置信息都必须居于<configuration>和</configuration>标记之间。配置文件有两个主要部分。在上部是配置小节的处理程序声明(包括在<configsection>和</configsection>标记中)。文件的其余部分包括了实际的配置小节(为了清楚,它们的子元素已被移除)。注意,下面的每一个配置小节都必须对应有一个<configsection>中的声明存在。每一个声明赋予了配置小节名称并且指出了将处理其配置信息的NGWS Framework Assembly及Class。每一配置小节包含含有ASP+细节配置设定的子元素。
以下代码举例说明了这些概念:
代码:
-----------------------------------------------------------------
<configuration>
<configsections>
<add name="debugmode" type="System.Web.Config.SingleTagSectionHandler" />
<add name="globalization" type="System.Web.Config.SingleTagSectionHandler" />
<add name="assemblies" type="System.Web.UI.AssembliesSectionHandler" />
<add name="security" type="System.Web.Config.SecurityConfigHandler" />
</configsections>
<debugmode enable="true" />
<globalization
requestencoding="us-ascii"
responseencoding="iso-8859-1"
/>
<assemblies>
<add assembly="System.Data.dll"/>
<add assembly="System.dll"/>
<add assembly="System.Drawing.dll"/>
<add assembly="*"/>
</assemblies>
<security>
<authorization>
<allow users="*" /> <!-- Allow all users -->
</authorization>
</security>
</configuration>
-------------------------------------------------------------------
此例说明了一个配置文件,它包含四个配置小节——debugmode,globalization,assemblies以及security。下面是已制定的设置:
*在debug小节,调试模式被打开(设置成true)。
*在globalization小节,设置了请求(Request)和回应(Response)的编码方式。
*在assemblies小节,加入了四个assemblie。
*在security小节,所有用户均被赋予访问权。
层次配置体系
我们曾论及,服务器上可以有多个配置文件存在于不同的目录中。当对一个详细URL的请求到达时,ASP+计算该URL在层次结构风格中的设定,并为所请求的URL使用在路径中定位的配置文件。
例如,一个站点的结构如下:
Application Root
-----SubDir1
-----SubDir2
想法是,配置应用程序的设定使所有的用户都可以访问应用程序根目录(Application Root),使选中的用户可以访问两个子目录。
现在假定有一个Config.web文件在目录SubDir1中,Application Root和SubDir2中不存在Config.web文件。在此例中实际上使用了两个Config.web文件。最高层的Config.web文件位于 %windir%\Complus\Version 目录,它随NGWS SDK安装而来,包含了默认的设定。这个文件被认为处于机器级别上,所有的ASP+目录和子目录都继承了其设定。此文件的默认安全小节的设定是允许所有用户的访问。当例中的Application Root目录不存在配置文件,即没有编辑这个设定值时,所有的用户都将允许访问此目录,因为此目录继承了机器级别配置文件的设定。如果SubDir1目录中的Config.web文件包含了一个安全配置小节,它设定成只允许某些用户访问目录,那么SubDir2目录将继承其设定,但是Application Root目录并不受其影响。所以,所有的用户可以访问Application Root目录,但只有某些用户可以访问两个子目录。
标准配置设定
ASP+环境自带了一个标准的Config.web文件,它包含了一个丰富的配置设定集合。此文件位于
%windir%\ComPlus\Version 目录。在Machine level(机器级)的配置文件中,我们可以在ASP+标准配置小节处理器下面找到标准的配置小节。
(出处:www.dev-club.com)
……