在分布式系统中,对于应用服务器的配置参数,我们都是保存在web.config文件内的,web.config是一个xml文件。本文解释如何在分布式系统中的应用服务器中读取配置参数
在分布式系统中,对于应用服务器的配置参数,我们都是保存在web.config文件内的,web.config是一个xml文件。
一、如何设置配置参数
默认情况下,web.config中只有一个<system.web>节点,为了保存自定义的节点信息,我们必须加入
<configSections>
<section name="ApplicationConfiguration" type="Human.SystemFrameworks.ApplicationConfiguration,Human.SystemFrameworks" />
<section name="HumanConfiguration" type="Human.Common.HumanConfiguration,Human.Common" />
</configSections>
![]()
在xml文件的最后加入:
<ApplicationConfiguration>
<add key="SystemFramework.Tracing.Enabled" value="False" />
<add key="SystemFramework.Tracing.TraceFile" value="ApplicationTrace.txt" />
<add key="SystemFramework.Tracing.TraceLevel" value="4" />
<add key="SystemFramework.Tracing.SwitchName" value="HumanTraceSwitch" />
<add key="SystemFramework.Tracing.SwitchDescription" value="Error and information tracing for Human" />
<add key="SystemFramework.EventLog.Enabled" value="True" />
<add key="SystemFramework.EventLog.Machine" value="." />
<add key="SystemFramework.EventLog.SourceName" value="Human" />
<!-- Use the standard TraceLevel values:
0 = Off
1 = Error
2 = Warning
3 = Info
4 = Verbose -->
<add key="SystemFramework.EventLog.LogLevel" value="1" />
</ApplicationConfiguration>
![]()
<HumanConfiguration>
<add key="Human.DataAccess.ConnectionString" value="server=(local);User ID=sa; Password=xxxxxx;database=xxxx;Connection Reset=False" />
<add key="Human.Web.EnableCache" value="False" />
<add key="Human.Web.Ssl" value="False"/>
<add key="Human.Web.ExpiresInSeconds" value="60" />
</HumanConfiguration>
![]()
二、如何读取配置信息
我们必须在Global.asax中读取参数。
![]()
读取应用服务器配置参数
public class ApplicationConfiguration: IConfigurationSectionHandler
![]()
{
![]()
private#region private
private const String TRACING_ENABLED="SystemFrameworks.Tracing.Enabled";
private const String TRACING_TRACEFILE="SystemFrameworks.Tracing.TraceFile";
private const String TRACING_TRACELEVEL="SystemFrameworks.Tracing.TraceLevel";
private const String TRACING_SWITCHNAME="SystemFrameworks.Tracing.SwitchName";
private const String EVENTLOG_ENABLED="SystemFrameworks.EventLog.Enabled";
private const String EVENTLOG_MACHINE="SystemFrameworks.EventLog.Machine";
private const String EVENTLOG_SOURCENAME="SystemFrameworks.EventLog.SourceName";
private const String EVENTLOG_EVENTLEVEL="SystemFrameworks.EventLog.LogLevel";
![]()
private static bool tracingEnabled;
private static String tracingTraceFile;
private static TraceLevel tracingTraceLevel;
private static String tracingSwitchName;
private static bool eventlogEnabled;
private static String eventlogMachine;
private static String eventlogSourceName;
private static TraceLevel eventlogEventLevel;
![]()
private const bool TRACING_ENABLED_DEFAULT=true;
private const String TRACING_TRACEFILE_DEFAULT="ApplicationTrace.txt";
private const TraceLevel TRACING_TRACELEVEL_DEFAULT=TraceLevel.Verbose;
private const String TRACING_SWITCHNAME_DEFAULT="";
private const bool EVENTLOG_ENABLED_DEFAULT=true;
private const String EVENTLOG_MACHINE_DEFAULT=".";
private const String EVENTLOG_SOURCENAME_DEFAULT="HumanApplication";
private const TraceLevel EVENTLOG_EVENTLEVEL_DEFAULT=TraceLevel.Error;
![]()
//应用程序根目录信息
private static String appRoot;
#endregion
![]()
![]()
method#region method
public ApplicationConfiguration()
![]()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
![]()
![]()
public Object Create(object Parent, object ConfigContext, XmlNode Section)
![]()
{
NameValueCollection setting;
![]()
try
![]()
{
NameValueSectionHandler baseHandle=new NameValueSectionHandler();
setting=(NameValueCollection)baseHandle.Create(Parent, ConfigContext, Section);
}
catch
![]()
{
setting=null;
}
if (setting==null)
![]()
{
//读取默认的设置信息
tracingEnabled=TRACING_ENABLED_DEFAULT;
tracingTraceFile=TRACING_TRACEFILE_DEFAULT;
tracingTraceLevel=TRACING_TRACELEVEL_DEFAULT;
tracingSwitchName=TRACING_SWITCHNAME_DEFAULT;
eventlogEnabled=EVENTLOG_ENABLED_DEFAULT;
eventlogMachine=EVENTLOG_MACHINE_DEFAULT;
eventlogSourceName=EVENTLOG_SOURCENAME_DEFAULT;
eventlogEventLevel=EVENTLOG_EVENTLEVEL_DEFAULT;
}
else
![]()
{
//读取配置文件中的设置信息
tracingEnabled=ReadString(setting,TRACING_ENABLED,TRACING_ENABLED_DEFAULT);
tracingTraceFile=ReadString(setting,TRACING_TRACEFILE,TRACING_TRACEFILE_DEFAULT);
tracingTraceLevel=ReadString(setting,TRACING_TRACELEVEL,TRACING_TRACELEVEL_DEFAULT);
tracingSwitchName=ReadString(setting,TRACING_SWITCHNAME,TRACING_SWITCHNAME_DEFAULT);
eventlogEnabled=ReadString(setting,EVENTLOG_ENABLED,EVENTLOG_ENABLED_DEFAULT);
eventlogMachine=ReadString(setting,EVENTLOG_MACHINE,EVENTLOG_MACHINE_DEFAULT);
eventlogSourceName=ReadString(setting,EVENTLOG_SOURCENAME,EVENTLOG_SOURCENAME_DEFAULT);
eventlogEventLevel=ReadString(setting,EVENTLOG_EVENTLEVEL,EVENTLOG_EVENTLEVEL_DEFAULT);
}
return null;
}
![]()
![]()
public static String ReadString(NameValueCollection settings, String key, String defaultValue)
![]()
{
try
![]()
{
Object setting=settings[key];
return (setting==null)?defaultValue: (String)setting;
}
catch
![]()
{
return defaultValue;
}
}
![]()
public static bool ReadString(NameValueCollection settings,String key,bool defaultValue)
![]()
{
try
![]()
{
Object setting=settings[key];
return (setting==null)?defaultValue:Convert.ToBoolean((String)setting);
}
catch
![]()
{
return defaultValue;
}
}
![]()
public static TraceLevel ReadString(NameValueCollection settings, String key, TraceLevel defaultValue)
![]()
{
try
![]()
{
Object setting=settings[key];
return (setting==null)?defaultValue: (TraceLevel)Convert.ToInt32((String)setting);
}
catch
![]()
{
return defaultValue;
}
}
![]()
public static int ReadString(NameValueCollection settings, String key, int defaultValue)
![]()
{
try
![]()
{
Object setting=settings[key];
return (setting==null)?defaultValue:Convert.ToInt32((String)setting);
}
catch
![]()
{
return defaultValue;
}
}
![]()
![]()
public static void OnApplicationStart(String appPath)
![]()
{
appRoot=appPath;
System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration");
System.Configuration.ConfigurationSettings.GetConfig("HumanConfiguration");
}
#endregion
![]()
![]()
property#region property
![]()
public static String ApplicationRoot
![]()
{
![]()
get
{
return appRoot;
}
}
![]()
public static bool TraceEnabled
![]()
{
get
![]()
{
return tracingEnabled;
}
}
![]()
public static String TraceFile
![]()
{
get
![]()
{
return tracingTraceFile;
}
}
![]()
public static String SwitchName
![]()
{
get
![]()
{
return tracingSwitchName;
}
}
![]()
public static TraceLevel TracingTraceLevel
![]()
{
get
![]()
{
return tracingTraceLevel;
}
}
![]()
public static bool EventLogEnabled
![]()
{
get
![]()
{
return eventlogEnabled;
}
}
![]()
public static String EventLogMachine
![]()
{
get
![]()
{
return eventlogMachine;
}
}
![]()
public static String EventLogSourceName
![]()
{
get
![]()
{
return eventlogSourceName;
}
}
![]()
public static TraceLevel EventLogTraceLevel
![]()
{
get
![]()
{
return eventlogEventLevel;
}
}
#endregion
![]()
}
![]()
![]()