首页 >> .NET Framework >> 正文
Duwamish深入剖析-配置篇-.NET Framework
来源:Dotnet频道 作者:采集 时间:2008-4-1


  引言:
  
  几乎在每本介绍Asp.Net编程的书里,在谈到如何管理数据库连接字符串的时候,都是采用将数据库连接字符串以如下形式放在Web.Config文件中:
  
  ppSettings>
  dd key="ConnectionString" value="data source=localhost;initial catalog=Database;user id=;password="/>
  </appSettings>
  
  然后在程序中采用以下方式访问:
  
  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的管理和支持,所以它应该放在一个虚拟目录下,我们先来看看它的第一部分:
  <configSections>
  <section name="ApplicationConfiguration" type="Duwamish7.SystemFramework.ApplicationConfiguration, Duwamish7.SystemFramework" />
  <section name="DuwamishConfiguration" type="Duwamish7.Common.DuwamishConfiguration, Duwamish7.Common" />
  <section name="SourceViewer" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections>
  
  这里定义了三个配置节处理程序声明(Section),按照规定它们必须出现在配置文件顶部 <configSections> 和 </configSections> 标记之间,在这里,它们只用到了name和type属性,其中,name属性定义了指定配置节的名称,而type属性则规定了指定从配置文件中读取节的配置节处理程序类的名称,有两个部分,前面为处理程序的类名,后面为Assembly名(Assembly必须位于bin目录中)以及版本号,公匙等信息。
  
  他们具体表示什么意思呢?比如第一个section,意思就是告诉Asp.Net系统,当在程序中使用System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration")这个静态方法来读取ApplicationConfiguration配置节的时候,会调用Duwamish7.SystemFramework.ApplicationConfiguration这个类来对这个配置节进行处理。关于配置节处理类,我们会在后面详细讨论,我们先继续往下看web.config文件。
  
  自定义配置节
  
  在<system.web>节点之后,我们可以看见以下的XML元素(关于system.web节点的说明已经有大量文章介绍,这里不再重复):
  
  pplicationConfiguration>
  <!-- Trace file settings -->
  dd key="SystemFramework.Tracing.Enabled" value="False" />
  <!-- Set this to the file with the trace settings. This file should be relative
  to the root application directory. -->
  dd key="SystemFramework.Tracing.TraceFile" value="DuwamishTrace.txt" />
  <!-- The TraceLevel for this switch. -->
  dd key="SystemFramework.Tracing.TraceLevel" value="4" />
  <!-- This switch name. The trace level for this name can be set through
  environment variables or the registry -->
  dd key="SystemFramework.Tracing.SwitchName" value="DuwamishTraceSwitch" />
  <!-- This description of the Tracing.SwitchName switch -->
  dd key="SystemFramework.Tracing.SwitchDescription" value="Error and information tracing for Duwamish" />
  <!-- Event log settings
  Note: The default Duwamish7 event source name is created in the local machine during setup. If you wish to log events to a different event source
  that event source must exist.
  -->
  dd key="SystemFramework.EventLog.Enabled" value="True" />
  dd key="SystemFramework.EventLog.Machine" value="." />
  dd key="SystemFramework.EventLog.SourceName" value="Duwamish7" />
  <!-- Use the standard TraceLevel values:
  0 = Off
  1 = Error
  2 = Warning
  3 = Info
  4 = Verbose -->
  dd key="SystemFramework.EventLog.LogLevel" value="1" />
  </ApplicationConfiguration>
  <DuwamishConfiguration>
  <!-- Settings specific to the Duwamish application -->
  dd key="Duwamish.DataAccess.ConnectionString" value="server=LUYAN\NetSDK;User ID=Duwamish7_login;Password=password;database=Duwamish7;Connection Reset=FALSE" />
  dd key="Duwamish.Web.EnablePageCache" value="True" />
  dd key="Duwamish.Web.PageCacheExpiresInSeconds" value="3600" />
  dd key="Duwamish.Web.EnableSsl" value="False" />
  </DuwamishConfiguration>
  <SourceViewer>
  <!-- Valid directories for source browsing. Keep these lower case. -->
  dd key="." value=" " />
  dd key="modules" value=" " />
  dd key="..\common\data" value=" " />
  dd key="..\systemframework" value=" " />
  dd key="..\business\facade" value=" " />
  dd key="..\business\rules" value=" " />
  dd key="..\dataaccess" value=" " />
  dd key="secure" value=" " />
  dd key="docs\common" value=" " />
  dd key="docs\dataaccess" value=" " />
  dd key="docs\facade" value=" " />
  dd key="docs\rules" value=" " />
  dd key="docs\web" value=" " />
  </SourceViewer>
  
  配置节信息分为两个主区域:配置节处理程序声明区域和配置节设置区域,这里就是刚才定义的三个section的配置节设置区域,它包含实际的配置设置,其用途说明请参见注释,所有配置信息都必须驻留在 <configuration> 和 </configuration> 根 XML 标记之间,配置节设置区域位于 <configSections> 区域之后。
  
  配置节处理程序
  
  前面已经介绍了,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
相关新闻
相关评论
 
评论表单加载中...
 
.NET Framework文章

 在Visual C++应

 编辑:admin

 时间:2008-3-10


   .NET Framework 中多语言支持的实现-.NET Framework
   将Eiffel系统集成到.NET Framework中-.NET Framework
   04年五种常用RAD的测验比较(1)-.NET Framework
   04年五种常用RAD的测验比较(2)-.NET Framework
   04年五种常用RAD的测验比较(3)-.NET Framework
最新文章
   .NET Framework 中多语言支持的实现-.NET Framework
   将Eiffel系统集成到.NET Framework中-.NET Framework
   04年五种常用RAD的测验比较(1)-.NET Framework
   04年五种常用RAD的测验比较(2)-.NET Framework
   04年五种常用RAD的测验比较(3)-.NET Framework
总站搜索
搜索
 
热门文章
   oracle数据库文件中的导入\导出
   用Oracle10g列值掩码技术隐藏敏感数据
   VB程序中用ADO对象动态创建数据库和表-VB.NET
   用VB6写简单程序 让电骡自动关机-VB.NET
   使用.NET2.0编写COM组件供VB调用-VB.NET
   VB.NET:键盘控制焦点移动-VB.NET
   用VB.NET绘制GDI图形-VB.NET
   vb.net中应用 ArrayList 实例-VB.NET
 
推荐文章
ASP.NET中的状态管理-ASP.NET
VC、IE、ASP环境下打印、预备的完美解决方案
oracle数据库文件中的导入\导出
VB.NET中快速访问注册表技巧-VB.NET
在vb中实现超连接的方法!和直接发邮件-VB.NET
用VB做realplayer播放列表-VB.NET
在VB.NET中如何实现和利用SortedLists-VB.NET
利用VB.NET Stopwatch对象记录时间-VB.NET
成都古羌科技有限公司版权所有: Copyright@2007-2010 ,ALL Rights Reserved 蜀ICP备07017240号