ASPcool.com--Duwamish深入剖析-配置篇设为首页 广告联系 加为书签 ASP酷首页技术教程代码教程程序下载技术论坛手机彩信短信中心金曲点播 点此加入TOM短信联盟,流量变现金,并有机会获得25%的额外佣金。 导航 >> ASP酷首页-程序下载-申请BBS-免费代码教程 -ASP.NET专栏 全部专栏 ASP专栏 PHP专栏 JSP专栏 XML专栏 网页教程 SCRIPT 图形处理 LINUX专栏 技术教程 全部教程 ASP教程 ASP.NET教程 C#.NET教程 VB.NET教程 UML教程 PHP教程 JSP教程 EJB教程 XML教程 LINUX教程 Script脚本 网页教程 图形处理 技术讨论区 ASP论坛 ASP.NET论坛 C#技术论坛 XML论坛 VBVC论坛 网页制作论坛 SMS.TOM.COM无限情缘 手机铃声 爱与和平 缺憾美 彩虹(范逸臣) 染布人生 恋人勿近 冬天里的一把 NO WAY 不知不觉 爱过不伤心 问那一声海鸥 诺基亚大图  Duwamish深入剖析-配置篇 作者: 卢彦 www.ASPCool.com 时间:2003-4-6 16:19:19 阅读次数:1955 手机参与: 摘要: 本文详细介绍了Duwamish网上电子书店的Web.config配置文件的结构处理方式以及用途,阐述了配置文件的各功能模块中的作用。 -------------------------------------------------------------------------------- 目录: 引言 配置节处理程序声明 自定义配置节 配置节处理程序 总结 参考资料 作者 -------------------------------------------------------------------------------- 引言: 几乎在每本介绍Asp.Net编程的书里,在谈到如何管理数据库连接字符串的时候,都是采用将数据库连接字符串以如下形式放在Web.Config文件中 < appSettings> < add key="ConnectionString" value="data source=localhost;initial catalog=Database;user id=;password="/> 然后在程序中采用以下方式访问: System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"] 这样做的好处非常明显:当数据库有变动的时候,只需要改变web.config中的连接字符串,而不需要重新编译整个应用程序,给应用的部署和移植带来非常大的方便。 如果你以为web.config的作用仅限于此的话,那你就错了,web.config的配置功能非常强大,它可以支持使用自己的 XML 配置标记扩展标准的 ASP.NET 配置设置集,在Duwamish中一定程度上的体现了它的功能,下面我将要详细分析Duwamish的web.config文件,让大家能了解到开发一个典型的.Net WEB应用程序的配置技术。 -------------------------------------------------------------------------------- 配置节处理程序声明 在Duwamish解决方案中,Web.config文件是放在WEB项目下,因为web.config需要IIS和Asp.Net Runtime的管理和支持,所以它应该放在一个虚拟目录下,我们先来看看它的第一部分:
这里定义了三个配置节处理程序声明(Section),按照规定它们必须出现在配置文件顶部 标记之间,在这里,它们只用到了name和type属性,其中,name属性定义了指定配置节的名称,而type属性则规定了指定从配置文件中读取节的配置节处理程序类的名称,有两个部分,前面为处理程序的类名,后面为Assembly名(Assembly必须位于bin目录中)以及版本号,公匙等信息。 他们具体表示什么意思呢?比如第一个section,意思就是告诉Asp.Net系统,当在程序中使用System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration")这个静态方法来读取ApplicationConfiguration配置节的时候,会调用Duwamish7.SystemFramework.ApplicationConfiguration这个类来对这个配置节进行处理。关于配置节处理类,我们会在后面详细讨论,我们先继续往下看web.config文件。 -------------------------------------------------------------------------------- 自定义配置节 在节点之后,我们可以看见以下的XML元素(关于system.web节点的说明已经有大量文章介绍,这里不再重复): 配置节信息分为两个主区域:配置节处理程序声明区域和配置节设置区域,这里就是刚才定义的三个section的配置节设置区域,它包含实际的配置设置,其用途说明请参见注释,所有配置信息都必须驻留在 根 XML 标记之间,配置节设置区域位于 区域之后。 -------------------------------------------------------------------------------- 配置节处理程序 前面已经介绍了,section里定义了处理配置节的类:Duwamish7.SystemFramework.ApplicationConfiguration和Duwamish7.Common.DuwamishConfiguration,他们分别位于SystemFramework和Common项目中,.net规定,所有能够处理配置节的类必须要实现IConfigurationSectionHandler接口,而IConfigurationSectionHandler接口很简单,只有一个object Create(object parent,object configContext,XmlNode section)方法,这个方法不需要主动调用,它是在ConfigurationSettings.GetConfig这个静态方法的时候自动调用的,也就是说,当你在程序中使用ConfigurationSettings.GetConfig来获取配置节的时候,.net会根据改配置节声明中所定义的类名和路径自动实例化配置节处理类,并调用Create方法。下面是Duwamish的处理类调用流程: 1、在global.asax的Application_OnStart方法里面调用ApplicationConfiguration.OnApplicationStart静态方法,并获得应用程序根的绝对路径。 void Application_OnStart() { ApplicationConfiguration.OnApplicationStart(Context.Server.MapPath( Context.Request.ApplicationPath )); string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),"remotingclient.cfg"); if(File.Exists(configPath)) RemotingConfiguration.Configure(configPath); } 2、ApplicationConfiguration.OnApplicationStart静态方法里调用System.Configuration.ConfigurationSettings.GetConfig方法处理配置节: public static void OnApplicationStart(String myAppPath) { appRoot = myAppPath; System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration"); System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration"); System.Configuration.ConfigurationSettings.GetConfig("SourceViewer"); } 大家已经注意到了,Duwamish并没有获取GetConfig返回的值,因为前面已经说过,GetConfig方法会引发配置节处理程序的Create方法,所以,只需要在Create方法中将配置值取出来就行了。 3、配置读取示例:Duwamish7.Common.DuwamishConfiguration类 public Object Create(Object parent, object configContext, XmlNode section) { NameValueCollection settings; try { NameValueSectionHandler baseHandler = new NameValueSectionHandler(); settings = (NameValueCollection)baseHandler.Create(parent, configContext, section); } catch { settings = null; } if ( settings == null ) { dbConnectionString = DATAACCESS_CONNECTIONSTRING_DEFAULT; pageCacheExpiresInSeconds = WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT; enablePageCache = WEB_ENABLEPAGECACHE_DEFAULT; enableSsl = WEB_ENABLESSL_DEFAULT; } else { dbConnectionString = ApplicationConfiguration.ReadSetting(settings, DATAACCESS_CONNECTIONSTRING, DATAACCESS_CONNECTIONSTRING_DEFAULT); pageCacheExpiresInSeconds = ApplicationConfiguration.ReadSetting(settings, WEB_PAGECACHEEXPIRESINSECONDS, WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT); enablePageCache = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLEPAGECACHE, WEB_ENABLEPAGECACHE_DEFAULT); enableSsl = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLESSL, WEB_ENABLESSL_DEFAULT); } return settings; } 这里可以看到,Duwamish其实并没有自己手工从一个XmlNode里面读取数据,而是直接将数据转给一个NameValueSectionHandler做实际的配置读取,它自己所做的工作只是检查是否有实际定义的配置值,如果没有的话,就赋给默认值。 -------------------------------------------------------------------------------- 总结: 至此,web.config中的配置值就被读到了配置类的静态变量中,以后在程序的其它地方就可以使用配置类的静态变量来直接访问配置值了,例如,在程序的任何地方,只要输入Duwamish7.Common.DuwamishConfiguration.ConnectionString就可以得到:server=LUYAN\NetSDK;User ID=Duwamish7_login;Password=password;database=Duwamish7;Connection Reset=FALSE这个字符串。更为理想的是,你可以扩展自己的配置节和配置节处理程序,对比较复杂的自定义配置进行预处理。 -------------------------------------------------------------------------------- 相关文章 前1篇 Duwamish深入剖析-结构篇 前2篇 用ASP.NET开发Web服务的五则技巧 前3篇 我对duwamish7的一些理解(一) 前4篇 Duwamish 7 初探——数据流程 后1篇 ASP.NET中在线用户统计 发表评论 注册新用户 对该文的评论 SMS.TOM.COM无限情缘,隐藏手机号码,记录聊天内容,快乐地沟通! 铃声爱与和平缺憾美彩虹(范逸臣)染布人生恋人勿近冬天里的一把NO WAY不知不觉爱过不伤心 问那一声海鸥任性(小雪)甘心(刘德华)肖邦写过的歌失恋(KOYOTE)欲哭无泪忙(林颐)型男索女(B2)四季歌 图片 返回首页 关闭窗口 导航 >> ASP酷首页-茶秀虚拟社区-申请BBS-免费代码教程- 申请留言板 - ASP.NET专栏 关于本站 - 广告联系 - 友情联接 - 使用说明 - 版权说明 - 联系方式 Copyright(c) 2000-2001 www.aspcool.com. all rights reserved 业务联系:webmaster@aspcool.com 技术问题请到技术论坛。 版权所有 ASP酷技术网