在远程类中使用变量超出范围 [英] Variable Goes Out Of Scope When Used In Remoted Class
问题描述
在主机服务器上:
命名空间JCart.Common
公共类JCartConfiguration:IConfigurationSectionHandler
private static String dbConnectionString;
public static String ConnectionString
{
get
{
返回dbConnectionString;
}
}
//初始化它:
dbConnectionString ="我的数据库连接字符串" ;;
在远程服务器上:
命名空间JCart.DataAccess
公共类CustomerSystem:MarshalByRefObject
字符串testVar ;
testVar = JCartConfiguration.ConnectionString;
testVar返回为"。但是当使用这个确切的代码而没有远程使用testVar =我的数据库连接字符串;
这基本上是克隆的Duwamish .Net样本减去我用作购物车的购物车学习c#的方法。没有企业模板,但解决方案中的相同单独项目结构只包含实现帐户设置/修改系统部分所需的内容。
我不确定我是不是忽略一些基本概念,但我可以在必要时发布更多细节。
这是使用时的远程配置文件:
< configuration> ;
< system.runtime.remoting>
< application>
< channels>
< ; channel ref =" http client" clientConnectionLimit =" 200">
< clientProviders>
< formatter ref =" soap" />
< / clientProviders>
< / channel>
< / channels>
< client url =" HTTP://192.168.1.13:80 / JCart_Facade">
< wellknown type =" JCart.BusinessFacade.CustomerSystem,JCart.BusinessFacade" url =" HTTP://192.168.1.13:80 / JCart_Facade / CustomerSystem.rem" />
< / client>
< / application>
< /system.runtime.remoting>
< / configuration>
On the host server:
namespace JCart.Common
public class JCartConfiguration : IConfigurationSectionHandler
private static String dbConnectionString;
public static String ConnectionString
{
get
{
return dbConnectionString;
}
}
//Initialze it:
dbConnectionString = "My Database Connection String";
On remote server:
namespace JCart.DataAccess
public class CustomerSystem : MarshalByRefObject
String testVar;
testVar = JCartConfiguration.ConnectionString;
testVar comes back as "". However when this exact code is used without being remoted testVar = "My Database Connection String";
This is basically the Duwamish .Net sample cloned minus the shopping cart that I useed as a way to learn c#. No enterprise template but the same seperate projects structure within the solution only containg the stuff needed to implement the account setup/modify system part.
I''m not sure if I''m overlooking some basic concept, but I can post more details if necessary.
Here is the remote config file when used:
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http client" clientConnectionLimit="200">
<clientProviders>
<formatter ref="soap"/>
</clientProviders>
</channel>
</channels>
<client url="HTTP://192.168.1.13:80/JCart_Facade">
<wellknown type="JCart.BusinessFacade.CustomerSystem, JCart.BusinessFacade" url="HTTP://192.168.1.13:80/JCart_Facade/CustomerSystem.rem"/>
</client>
</application>
</system.runtime.remoting>
</configuration>
推荐答案
刚刚从Verizon DSL切换到RR而忘记输入我的电子邮件地址,它是 cs **** @ nyc.rr.com
不可用 <无********** @ b.com>在消息新闻中写道:1O ********************* @ twister.nyc.rr.com ...
在主机服务器上:
命名空间JCart.Common
公共类JCartConfiguration:IConfigurationSectionHandler
私有静态字符串dbConnectionString;
public static String ConnectionString
{
get
{
返回dbConnectionString;
}
}
//初始化它:
dbConnectionString ="我的数据库连接字符串" ;;
在远程服务器上:
命名空间JCart.DataAccess
公共类CustomerSystem:MarshalByRefObject
字符串testVar;
testVar = JCartConfiguration.ConnectionString;
testVar返回为"。但是当使用这个确切的代码而没有远程使用testVar =我的数据库连接字符串;
这基本上是克隆的Duwamish .Net样本减去我用作购物车的购物车学习c#的方法。没有企业模板,但解决方案中的相同单独项目结构只包含实现帐户设置/修改系统部分所需的内容。
我不确定我是不是忽略一些基本概念,但我可以在必要时发布更多细节。
这是使用时的远程配置文件:
< configuration> ;
< system.runtime.remoting>
< application>
< channels>
< ; channel ref =" http client" clientConnectionLimit =" 200">
< clientProviders>
< formatter ref =" soap" />
< / clientProviders>
< / channel>
< / channels>
< client url =" HTTP://192.168.1.13:80 / JCart_Facade">
< wellknown type =" JCart.BusinessFacade.CustomerSystem,JCart.BusinessFacade" url =" HTTP://192.168.1.13:80 / JCart_Facade / CustomerSystem.rem" />
< / client>
< / application>
< /system.runtime.remoting>
< / configuration>
Just switched from Verizon DSL to RR and forgot to put my email address, it''s cs****@nyc.rr.com
"Not Available" <no**********@b.com> wrote in message news:1O*********************@twister.nyc.rr.com...
On the host server:
namespace JCart.Common
public class JCartConfiguration : IConfigurationSectionHandler
private static String dbConnectionString;
public static String ConnectionString
{
get
{
return dbConnectionString;
}
}
//Initialze it:
dbConnectionString = "My Database Connection String";
On remote server:
namespace JCart.DataAccess
public class CustomerSystem : MarshalByRefObject
String testVar;
testVar = JCartConfiguration.ConnectionString;
testVar comes back as "". However when this exact code is used without being remoted testVar = "My Database Connection String";
This is basically the Duwamish .Net sample cloned minus the shopping cart that I useed as a way to learn c#. No enterprise template but the same seperate projects structure within the solution only containg the stuff needed to implement the account setup/modify system part.
I''m not sure if I''m overlooking some basic concept, but I can post more details if necessary.
Here is the remote config file when used:
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http client" clientConnectionLimit="200">
<clientProviders>
<formatter ref="soap"/>
</clientProviders>
</channel>
</channels>
<client url="HTTP://192.168.1.13:80/JCart_Facade">
<wellknown type="JCart.BusinessFacade.CustomerSystem, JCart.BusinessFacade" url="HTTP://192.168.1.13:80/JCart_Facade/CustomerSystem.rem"/>
</client>
</application>
</system.runtime.remoting>
</configuration>
不可用< no ********** @ b.com>写道:
Not Available <no**********@b.com> wrote:
在主机服务器上:
命名空间JCart.Common
公共类JCartConfiguration:IConfigurationSectionHandler
私有静态字符串dbConnectionString;
公共static String ConnectionString
{
获取
返回dbConnectionString;
}
// //将其初始化:
dbConnectionString = 我的数据库连接字符串;
On the host server:
namespace JCart.Common
public class JCartConfiguration : IConfigurationSectionHandler
private static String dbConnectionString;
public static String ConnectionString
{
get
{
return dbConnectionString;
}
}
//Initialze it:
dbConnectionString = "My Database Connection String";
该连接字符串在哪里被初始化?你没有显示那个
。
-
Jon Skeet - < sk *** @ pobox。 com>
http://www.pobox.com/~skeet
如果回复群组,请不要给我发邮件
Where is that connection string being initialised though? You haven''t
shown that.
--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
连接字符串是从web.config文件初始化的。我已经在下面包含了完整的模块JCartConfiguration,ApplicationConfiguration和Web.config文件。以下是这些行:
JCartConfiguration:
dbConnectionString = ApplicationConfiguration.ReadSetting(settings,DATAACCESS_CONNECTIONSTRING,DATAACCESS_CONNECTIONSTRING_DEFAULT);
ApplicationConfiguration:
System.Configuration.ConfigurationSettings.GetConf ig(" JCartConfiguration");
Web.config:
>
< JCartConfiguration>
<! - 特定于Duwamish应用程序的设置 - >
< add key =" JCart.DataAccess .ConnectionString" value =" server = EMPIRE2; User ID = sa; Password =; database = JCart; Connection Reset = FALSE" />
这里是global.asx.cs文件
protected void Application_Start(Object sender,EventArgs e)
{
ApplicationConfiguration.OnApplicationStart(Contex t.Server.MapPath(Context.Request.ApplicationPath));
AppStartDateTime = dt.ToString();
string configPath = Path.Combine(Context.Server.MapPath(Context.Request.ApplicationPath)," remotingclient.cfg");
if(File.Exists(configPath))
RemotingConfiguration.Configure(configPath);
}
" Jon Skeet" < SK *** @ pobox.com>在消息新闻中写道:MP ************************ @ msnews.microsoft.c om ...
The connection string is initialized from a web.config file. I''ve included the complete modules JCartConfiguration, ApplicationConfiguration and the Web.config files below. Here are the lines:
JCartConfiguration:
dbConnectionString = ApplicationConfiguration.ReadSetting(settings, DATAACCESS_CONNECTIONSTRING, DATAACCESS_CONNECTIONSTRING_DEFAULT);
ApplicationConfiguration:
System.Configuration.ConfigurationSettings.GetConf ig("JCartConfiguration");
Web.config:
<JCartConfiguration>
<!-- Settings specific to the Duwamish application -->
<add key="JCart.DataAccess.ConnectionString" value="server=EMPIRE2;User ID=sa;Password=;database=JCart;Connection Reset=FALSE" />
Here''s the global.asx.cs file
protected void Application_Start(Object sender, EventArgs e)
{
ApplicationConfiguration.OnApplicationStart(Contex t.Server.MapPath( Context.Request.ApplicationPath ));
AppStartDateTime = dt.ToString();
string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),"remotingclient.cfg");
if(File.Exists(configPath))
RemotingConfiguration.Configure(configPath);
}
"Jon Skeet" <sk***@pobox.com> wrote in message news:MP************************@msnews.microsoft.c om...
不可用<无********** @ b.com>写道:
Not Available <no**********@b.com> wrote:
在主机服务器上:
命名空间JCart.Common
公共类JCartConfiguration:IConfigurationSectionHandler
私有静态字符串dbConnectionString;
公共static String ConnectionString
{
获取
返回dbConnectionString;
}
// //将其初始化:
dbConnectionString = 我的数据库连接字符串;
On the host server:
namespace JCart.Common
public class JCartConfiguration : IConfigurationSectionHandler
private static String dbConnectionString;
public static String ConnectionString
{
get
{
return dbConnectionString;
}
}
//Initialze it:
dbConnectionString = "My Database Connection String";
连接字符串在哪里被初始化?你还没有表现出来。
-
Jon Skeet - < sk *** @ pobox.com>
http://www.pobox.com/~skeet
如果回复该群组,请不要给我发邮件
Where is that connection string being initialised though? You haven''t
shown that.
--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
JCARTCONFIGURATION.cs
名称空间JCart.Common
{
使用系统;
使用System.Collections;
使用System.Configuration;
使用System.Xml;
使用System.Collections.Specialized;
使用JCart.SystemFramework;
公共类JCartConfiguration:IConfigurationSectionHandler
//公共类JCartConfiguration
{
//
// DuwamishConfiguration部分中所有预期条目的常量值
//
private const String WEB_ENABLEPAGECACHE =" JCart.Web.EnablePageCache";
private const String WEB_PAGECACHEEXPIRE SINSECONDS =" JCart.Web.PageCacheExpiresInSeconds";
private const String DATAACCESS_CONNECTIONSTRING =" JCart.DataAccess.ConnectionString";
private const String WEB_ENABLESSL =" JCart。 Web.EnableSsl" ;;
私有静态字符串dbConnectionString;
// public static int test1p;
/ / private static bool enablePageCache;
// private static int pageCacheExpiresInSeconds;
// private static bool enableSsl;
//
//所有默认设置的常量值。
//
private const bool WEB_ENABLEPAGECACHE_DEFAULT = true;
private const int WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600;
private const String DATAACCESS_CONNECTIONSTRING_DEFAULT =
" server = EMPIRE2; User ID = sa; Password =; database = JCart; Connection Reset = FALSE" ;;
private const bool WEB_EN ABLESSL_DEFAULT = false;
public Object Create(Object parent,object configContext,XmlNode section)
{
NameValueCollection设置;
尝试
{
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; < br $>
}
else
{
dbConnectionString = ApplicationConfiguration.ReadSetting(settings,DATAACCESS_CONNECTI ONSTRING,DATAACCESS_CONNECTIONSTRING_DEFAULT);
// pageCacheExpiresInSeconds = ApplicationConfiguration.ReadSetting(settings,WEB_PAGECACHEEXPIRESINSECONDS,WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT);
// enablePageCache = ApplicationConfiguration.ReadSetting(settings,WEB_ENABLEPAGECACHE,WEB_ENABLEPAGECACHE_DEFAULT) ;
// enableSsl = ApplicationConfiguration.ReadSetting(设置,WEB_ENABLESSL,WEB_ENABLESSL_DEFAULT);
}
返回设置;
}
public static String ConnectionString
{
get
{
返回dbConnectionString;
}
}
// public static int test1
// {
//获得
// {
//返回test1p;
//}
//}
} //类JCartConfiguration
} //命名空间JCart7.Common
APPLICATIONCONFIGURATION.CS
命名空间JCart.SystemFramework
{
使用System;
使用System.Collections;
使用System.Diagnostics;
使用System.Configuration;
使用System.Xml;
使用System.Collections。专业化;
///< summary>
///启用跟踪和记录的标准配置设置
$ b带有ApplicationLog类的$ b ///。
///< remarks>
///应用程序可以将此类用作
的模型///将其他设置添加到Web.Config文件。
///特殊注意事项:
///必须从Global.asax中的Application_OnStart事件调用此类中的OnApplicationStart函数
///。这是
///当前用于确定应用程序的路径,
/// HttpContext对象被传递给它以启用应用程序
///将来读取其他设置,并尽量减少global.asax中的代码
///。
///< example>
/// global.asax文件应类似于以下代码:
/// < code>
///<%@ Import Namespace =" Duwamish7.SystemFramework" %>
///< script language =" c#" runat =" SERVER">
/// void Application_OnStart()
/// {
/// ApplicationConfiguration.OnApplicationStart( Contex t);
///}
///< / script>
///< / code>
///< / example>
///< / remarks>
///< / summary>
公共类ApplicationConfiguration:IConfigurationSectionHandler
{
//
//所有SystemFramework标准的常量值设置
//
private const String TRACING_ENABLED =" SystemFramework.Tracing.Enabled";
private const String TRACING_TRACEFILE =" SystemFramework。 Tracing.TraceFile" ;;
private const String TRACING_TRACELEVEL =" SystemFramework.Tracing.TraceLevel";
private const String TRACING_SW ITCHNAME =" SystemFramework.Tracing.SwitchName";
private const String TRACING_SWITCHDESCRIPTION =" SystemFramework.Tracing.SwitchDescription";
private const String EVENTLOG_ENABLED =" SystemFramework。 EventLog.Enabled" ;;
private const String EVENTLOG_MACHINENAME =" SystemFramework.EventLog.Machine";
private const String EVENTLOG_SOURCENAME =" SystemFramework.EventLog.SourceName" ;;
private const String EVENTLOG_TRACELEVEL =" SystemFramework.EventLog.LogLevel";
//
//静态成员变量。这些包含来自Config.Web的应用程序设置
//或默认值。
//
private static bool tracingEnabled;
private static String tracingTraceFile;
private static TraceLevel tracingTraceLevel;
private static String tracingSwitchName;
private static String tracingSwitchDescription;
private static bool eventLogEnabled;
private static String eventLogMachineName;
private static String eventLogSourceName;
private static TraceLevel eventLogTraceLevel;
//
//应用程序的根目录。建立在
// OnApplicationStart回调表格Global.asax。
//
私有静态字符串appRoot;
//
//所有默认设置的常量值。
//
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 =" ApplicationTraceSwitch";
private const String TRACING_SWITCHDESCRIPTION_DEFAULT ="应用程序错误和跟踪信息" ;;
private const bool EVENTLOG_ENABLED_DEFAULT = true;
private const String EVENTLOG_MACHINENAME_DEFAULT ="。" ;;
private const String EVENTLOG_SOURCENAME_DEFAULT =" WebApplication";
private const TraceLevel EVENTLOG_TRACELEVEL_DEFAULT = TraceLe vel.Error;
///< summary>
///从OnApplicationStart调用来初始化设置来自
/ // Web.Config文件。
///< remarks>
///如果设置发生变化,app域会重启,所以有
///不不止一次读取这些值的原因。这个函数
///使用NameValueSectionHandler基类从XML生成一个
///哈希表,然后用于存储当前的
///设置。因为这里读取了所有设置,所以我们实际上并不是
///存储生成的哈希表对象,以便以后通过
/// Context.GetConfig进行检索。应用程序应直接使用访问者
///函数。
///< / remarks>
///< param name =" parent">通过在父目录的Config.Web文件中处理带有此名称的部分
///创建的对象。
// /< / param>
///< param name =" configContext"> config'的上下文。< / param>
// /< param name =" section">要阅读的部分。< / param>
///< retvalue>
///< ; para>
/// ConfigOutput对象:我们留空,因为此时存储了所有设置
///。
///< / para>
///< para>
/// null:如果有错误。
///< / para>
///< / retvalue>
///< / summary>
public Object C reate(Object parent,object configContext,XmlNode section)
{
NameValueCollection设置;
try
{
NameValueSectionHandler baseHandler = new NameValueSectionHandler();
settings =(NameValueCollection)baseHandler.Create(parent,configContext,section);
}
catch
{
settings = null;
}
if(settings == null)
{
tracingEnabled = TRACING_ENABLED_DEFAULT;
tracingTraceFile = TRACING_TRACEFILE_DEFAULT;
tracingTraceLevel = TRACING_TRACELEVEL_DEFAULT;
tracingSwitchName = TRACING_SWITCHNAME_DEFAULT;
tracingSwitchDescription = TRACING_SWITCHDESCRIPTION_DEFAULT;
eventLogEnabled = EVENTLOG_ENABLED_DEFAULT;
eventLogMachineName = EVENTLOG_MACHINENAME_DEFAULT;
eventLogSourceName = EVENTLOG_SOURCENAME_DEFAULT;
eventLogTraceLevel = EVENTLOG_TRACELEVEL_ DEFAULT;
}
其他
{
tracingEnabled = ReadSetting(设置,TRACING_ENABLED,TRACING_ENABLED_DEFAULT);
tracingTraceFile = ReadSetting(设置,TRACING_TRACEFILE,TRACING_TRACEFILE_DEFAULT);
tracingTraceLevel = ReadSetting(设置,TRACING_TRACELEVEL,TRACING_TRACELEVEL_DEFAULT);
tracingSwitchName = ReadSetting(设置, TRACING_SWITCHNAME,TRACING_SWITCHNAME_DEFAULT);
tracingSwitchDescription = ReadSetting(设置,TRACING_SWITCHDESCRIPTION,TRACING_SWITCHDESCRIPTION_DEFAULT);
eventLogEnabled = ReadSetting(设置,EVENTLOG_ENABLED,EVENTLOG_ENABLED_DEFAULT);
eventLogMachineName = ReadSetting(settings,EVENTLOG_MACHINENAME,EVENTLOG_MACHINENAME_DEFAULT);
eventLogSourceName = ReadSetting(settings,EVENTLOG_SOURCENAME,EVENTLOG_SOURCENAME_DEFAULT);
eventLogTraceLevel = ReadSetting(settings,EVENTLOG_TRACELEVEL,EVENTLOG_TRACELEVEL_DEFAULT);
}
返回null;
}
///< summary>
/ // ReadSetting的字符串版本。
///< remarks>
///从哈希表中读取设置并将其转换为正确的
///类型。为散列表中预期的每种类型提供了这些函数之一
///。这些是公开的,所以其他
///类不必复制它们来从
///哈希表中读取设置。
///< / remarks>
///< param name =" settings">要从中读取的Hashtable。< / param>
///< param name =" key"> Hashtable中值的键。< / param>
///< param name =" defaultValue" >如果找不到该项,则为默认值。< / param>
///< retvalue>
///< para> value:from哈希表< / para>
///< para>
///默认:如果项目不在表格中或者不能达到预期的情况类型。
///< / para>
///< / retvalue>
///< / summary>
public static String ReadSetting(NameValueCollection settings,String key,String defaultValue)
{
尝试
{
对象设置=设置[关键];
返回(设置== null)? defaultValue:(String)设置;
}
catch
{
return defaultValue;
}
}
///< summary>
/// ReadSetting的布尔版本。
///< remarks>
///从哈希表读取设置并将其转换为正确的
///类型。为散列表中预期的每种类型提供了这些函数之一
///。这些是公开的,所以其他
///类不必复制它们来从
///哈希表中读取设置。
///< / remarks>
///< param name =" settings">要从中读取的Hashtable。< / param>
///< param name =" key"> Hashtable中值的键。< / param>
///< param name =" defaultValue" >如果找不到该项,则为默认值。< / param>
///< retvalue>
///< para> value:from哈希表< / para>
///< para>
///默认:如果项目不在表格中或者不能达到预期的情况类型。
///< / para>
///< / retvalue>
///< / summary>
public static bool ReadSetting(NameValueCollection settings,String key,bool defaultValue)
{
tr y
{
对象设置=设置[键];
return(setting == null)? defaultValue:Convert.ToBoolean((String)setting);
}
catch
{
return defaultValue;
}
}
///< summary>
/// int version ReadSetting。
///< remarks>
///从哈希表中读取设置并将其转换为正确的
/ //类型为散列表中预期的每种类型提供了这些函数之一
///。这些是公开的,所以其他
///类不必复制它们来从
///哈希表中读取设置。
///< / remarks>
///< param name =" settings">要从中读取的Hashtable。< / param>
///< param name =" key"> Hashtable中值的键。< / param>
///< param name =" defaultValue" >如果找不到该项,则为默认值。< / param>
///< retvalue>
///< para> value:from哈希表< / para>
///< para>
///默认:如果项目不在表格中或者不能达到预期的情况类型。
///< / para>
///< / retvalue>
///< / summary>
public static int ReadSetting(NameValueCollection settings,String key,int defaultValue)
{
try
{
对象设置=设置[键];
return(setting == null)? defaultValue:Convert.ToInt32((String)setting);
}
catch
{
return defaultValue;
}
}
///< summary>
/// TraceLevel版本ReadSetting。
///< remarks>
///从哈希表中读取设置并将其转换为正确的
/ //类型为散列表中预期的每种类型提供了这些函数之一
///。这些是公开的,所以其他
///类不必复制它们来从
///哈希表中读取设置。
///< / remarks>
///< param name =" settings">要从中读取的Hashtable。< / param>
///< param name =" key"> Hashtable中值的键。< / param>
///< param name =" defaultValue" >如果找不到该项,则为默认值。< / param>
///< retvalue>
///< para> value:from哈希表< / para>
///< para>
///默认:如果项目不在表格中或者不能达到预期的情况类型。
///< / para>
///< / retvalue>
///< / summary>
public static TraceLevel ReadSetting(NameValueCollection设置,String key,TraceLevel defaultValue)
{
试试
{
对象设置=设置[关键];
返回(设置==空值) ? defaultValue:(TraceLevel)Convert.ToInt32((String)setting);
}
catch
{
return defaultValue;
}
}
///< summary>
// /函数由Application_OnStart调用,如
///类描述中所述。初始化应用程序根目录。
///< param name =" myAppPath">正在运行的应用程序的路径。< / param>
/// < / summary>
public static void OnApplicationStart(String myAppPath)
{
appRoot = myAppPath;
// System.Configuration.ConfigurationSettings.GetConf ig(" ApplicationConfiguration");
System.Configuration.ConfigurationSettings.GetConf ig(" JCartConfiguration");
// System.Configuration.ConfigurationSettings.GetConf ig(" SourceViewer");
}
///< value>
///属性AppRoot用于获取应用程序的根路径。
///< / value>
public static String AppRoot
{
get
{
返回appRoot; < br $>
}
}
///< value>
/// Property TracingE nabled用于获取配置设置,错误时默认为False。
///< / value>
public static bool TracingEnabled
{
get
{
return tracingEnabled;
}
}
///< value>
///属性TracingTraceFile用于获取包含跟踪的文件的完整路径名
/// settings,默认为ApplicationTrace.txt。
///< / value>
public static String TracingTraceFile
{
get
{
返回appRoot +" \\" + tracingTraceFile;
}
}
///< value>
// / Property TracingTraceFile用于获取应写入
///跟踪文件的最高日志记录级别,默认为TraceLevel.Verbose(但是,TracingEnabled默认值为
/ //到False,所以你必须明确打开它。
///< / value>
public static TraceLevel TracingTraceLevel
{
get
{
返回tracingTraceLevel;
}
}
///< value>
///属性TracingSwitchName用于获取跟踪开关名称,默认为ApplicationTraceSwitch。
///< / value>
public static String TracingSwitchName
{
get
{
返回tracingSwitchName;
}
}
///< value>
///属性TracingSwitchDescription用于获取tra ce设置文件,默认为
///应用程序错误和跟踪信息。
///< / value>
public static String TracingSwitchDescription
{
get
{
return tracingSwitchDescription;
}
}
///< value>
///属性EventLogEnabled用于获取是否写入事件日志是支持,默认为True。
///< remarks>如果启用了写入事件日志,则返回true,否则返回false< / remarks>
/ //< / value>
public static bool EventLogEnabled
{
get
{
返回eventLogEnabled;
}
}
///< value>
// / Property EventLogMachineName用于获取记录事件的机器名,默认为
///空字符串,表示当前机器。机器名称
///(不带\\)可能为空。
///< / value>
public static String EventLogMachineName
{
get
{
return eventLogMachineName;
}
}
///< value>
///属性EventLogMachineName用于获取源代码error to be written to the event log,
/// defaults WebApplication.
/// </value>
public static String EventLogSourceName
{
get
{
return eventLogSourceName;
}
}
/// <value>
/// Property EventLogTraceLevel is used to get the highest logging level that should be written to the event log,
/// defaults to TraceLevel.Error.
/// </value>
public static TraceLevel EventLogTraceLevel
{
get
{
re turn eventLogTraceLevel;
}
}
} //class ApplicationConfiguration
} //namespace JCart.SystemFramework
WEB.CONFIG
<?xml version="1.0"编码= QUOT; UTF-8英寸?>
<configuration>
<configSections>
<section name="ApplicationConfiguration" type="JCart.SystemFramework.ApplicationConfigurati on, JCart.SystemFramework" />
<section name="JCartConfiguration" type="JCart.Common.JCartConfiguration, JCart.Common" />
</configSections>
<system.web>
<compilation defaultLanguage="c#"调试= QUOT;真" />
<!-- xx The sessionState is currently set to inproc: the lines following [mode="inproc"] are not used but are present for ease of configuration -->
<sessionState cookieless="false"超时= QUOT; 20" mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" />
< globalization requestEncoding =" utf-8"的ResponseEncoding = QUOT; UTF-8英寸/>
<!-- security -->
<authentication mode="Windows" />
<!--
<authentication mode="Forms">
<forms name=".ADUAUTH2" loginUrl="logon.aspx" protection="All"超时= QUOT; 60" >
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
-->
<trace enabled="false" requestLimit = QUOT; 10" pageOutput="false" traceMode="SortByTime"设置LocalOnly ="真" />
</system.web>
<ApplicationConfiguration>
<!-- Trace file settings -->
<add 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. -->
<add key="SystemFramework.Tracing.TraceFile" value="DuwamishTrace.txt" />
<!-- The TraceLevel for this switch. -->
<add key="SystemFramework.Tracing.TraceLevel"值= QUOT; 4英寸/>
<!-- This switch name. The trace level for this name can be set through
environment variables or the registry -->
<add key="SystemFramework.Tracing.SwitchName" value="DuwamishTraceSwitch" />
<!-- This description of the Tracing.SwitchName switch -->
<add 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.
-->
<add key="SystemFramework.EventLog.Enabled" value="True" />
<add key="SystemFramework.EventLog.Machine" value="." />
<add key="SystemFramework.EventLog.SourceName" value="Duwamish7" />
<!-- Use the standard TraceLevel values:
0 = Off
1 = Error
2 = Warning
3 = Info
4 = Verbose -->
<add key="SystemFramework.EventLog.LogLevel"值= QUOT 1 QUOT; />
</ApplicationConfiguration>
<JCartConfiguration>
<!-- Settings specific to the Duwamish application -->
<add key="JCart.DataAccess.ConnectionString" value="server=EMPIRE2;User ID=sa;Password=;database=JCart;Connection Reset=FALSE" />
<add key="JCart.Web.EnablePageCache" value="True" />
<add key="JCart.Web.PageCacheExpiresInSeconds" value="3600" />
<add key="JCart.Web.EnableSsl" value="False" />
</JCartConfiguration>
<!-- String dsn = ConfigurationSettings.AppSettings["JCart"];
<appSettings>
<add key="JCart" value="server=EMPIRE2;User ID=sa;Password=;database=JCart;Connection Reset=FALSE" />
</appSettings>
-->
</configuration>
JCARTCONFIGURATION.cs
namespace JCart.Common
{
using System;
using System.Collections;
using System.Configuration;
using System.Xml;
using System.Collections.Specialized;
using JCart.SystemFramework;
public class JCartConfiguration : IConfigurationSectionHandler
// public class JCartConfiguration
{
//
// Constant values for all expected entries in the DuwamishConfiguration section
//
private const String WEB_ENABLEPAGECACHE = "JCart.Web.EnablePageCache";
private const String WEB_PAGECACHEEXPIRESINSECONDS = "JCart.Web.PageCacheExpiresInSeconds";
private const String DATAACCESS_CONNECTIONSTRING = "JCart.DataAccess.ConnectionString";
private const String WEB_ENABLESSL = "JCart.Web.EnableSsl";
private static String dbConnectionString;
// public static int test1p;
// private static bool enablePageCache;
// private static int pageCacheExpiresInSeconds;
// private static bool enableSsl;
//
// Constant values for all of the default settings.
//
private const bool WEB_ENABLEPAGECACHE_DEFAULT = true;
private const int WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600;
private const String DATAACCESS_CONNECTIONSTRING_DEFAULT =
"server=EMPIRE2;User ID=sa;Password=;database=JCart;Connection Reset=FALSE";
private const bool WEB_ENABLESSL_DEFAULT = false;
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;
}
public static String ConnectionString
{
get
{
return dbConnectionString;
}
}
// public static int test1
// {
// get
// {
// return test1p;
// }
// }
} //class JCartConfiguration
} //namespace JCart7.Common
APPLICATIONCONFIGURATION.CS
namespace JCart.SystemFramework
{
using System;
using System.Collections;
using System.Diagnostics;
using System.Configuration;
using System.Xml;
using System.Collections.Specialized;
/// <summary>
/// Standard configuration settings to enable tracing and logging
/// with the ApplicationLog class.
/// <remarks>
/// An application can use this class as a model for
/// adding additional settings to a Web.Config file.
/// Special Considerations:
/// The OnApplicationStart function in this class must be called
/// from the Application_OnStart event in Global.asax. This is
/// currently used to determine the path of the application,
/// the HttpContext object is passed it to enable the app
/// to read other settings in the future, and to minimize the code
/// in global.asax.
/// <example>
/// The global.asax file should be similar to the following code:
/// <code>
/// <%@ Import Namespace="Duwamish7.SystemFramework" %>
/// <script language="c#" runat="SERVER">
/// void Application_OnStart()
/// {
/// ApplicationConfiguration.OnApplicationStart(Contex t);
/// }
/// </script>
/// </code>
/// </example>
/// </remarks>
/// </summary>
public class ApplicationConfiguration : IConfigurationSectionHandler
{
//
// Constant values for all of the SystemFramework standard settings
//
private const String TRACING_ENABLED = "SystemFramework.Tracing.Enabled";
private const String TRACING_TRACEFILE = "SystemFramework.Tracing.TraceFile";
private const String TRACING_TRACELEVEL = "SystemFramework.Tracing.TraceLevel";
private const String TRACING_SWITCHNAME = "SystemFramework.Tracing.SwitchName";
private const String TRACING_SWITCHDESCRIPTION = "SystemFramework.Tracing.SwitchDescription";
private const String EVENTLOG_ENABLED = "SystemFramework.EventLog.Enabled";
private const String EVENTLOG_MACHINENAME = "SystemFramework.EventLog.Machine";
private const String EVENTLOG_SOURCENAME = "SystemFramework.EventLog.SourceName";
private const String EVENTLOG_TRACELEVEL = "SystemFramework.EventLog.LogLevel";
//
// Static member variables. These contain the application settings
// from Config.Web, or the default values.
//
private static bool tracingEnabled;
private static String tracingTraceFile;
private static TraceLevel tracingTraceLevel;
private static String tracingSwitchName;
private static String tracingSwitchDescription;
private static bool eventLogEnabled;
private static String eventLogMachineName;
private static String eventLogSourceName;
private static TraceLevel eventLogTraceLevel;
//
// The root directory of the application. Established in the
// OnApplicationStart callback form Global.asax.
//
private static String appRoot;
//
// Constant values for all of the default settings.
//
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 = "ApplicationTraceSwitch";
private const String TRACING_SWITCHDESCRIPTION_DEFAULT = "Application error and tracing information";
private const bool EVENTLOG_ENABLED_DEFAULT = true;
private const String EVENTLOG_MACHINENAME_DEFAULT = ".";
private const String EVENTLOG_SOURCENAME_DEFAULT = "WebApplication";
private const TraceLevel EVENTLOG_TRACELEVEL_DEFAULT = TraceLevel.Error;
/// <summary>
/// Called from OnApplicationStart to initialize settings from
/// the Web.Config file(s).
/// <remarks>
/// The app domain will restart if settings change, so there is
/// no reason to read these values more than once. This funtion
/// uses the NameValueSectionHandler base class to generate a
/// hashtablefrom the XML, which is then used to store the current
/// settings. Because all settings are read here, we do not actually
/// store the generated hashtable object for later retrieval by
/// Context.GetConfig. The application should use the accessor
/// functions directly.
/// </remarks>
/// <param name="parent">An object created by processing a section
/// with this name in a Config.Web file in a parent directory.
/// </param>
/// <param name="configContext">The config''s context.</param>
/// <param name="section">The section to be read.</param>
/// <retvalue>
/// <para>
/// A ConfigOutput object: which we leave empty because all settings
/// are stored at this point.
/// </para>
/// <para>
/// null: if there was an error.
/// </para>
/// </retvalue>
/// </summary>
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)
{
tracingEnabled = TRACING_ENABLED_DEFAULT;
tracingTraceFile = TRACING_TRACEFILE_DEFAULT;
tracingTraceLevel = TRACING_TRACELEVEL_DEFAULT;
tracingSwitchName = TRACING_SWITCHNAME_DEFAULT;
tracingSwitchDescription = TRACING_SWITCHDESCRIPTION_DEFAULT;
eventLogEnabled = EVENTLOG_ENABLED_DEFAULT;
eventLogMachineName = EVENTLOG_MACHINENAME_DEFAULT;
eventLogSourceName = EVENTLOG_SOURCENAME_DEFAULT;
eventLogTraceLevel = EVENTLOG_TRACELEVEL_DEFAULT;
}
else
{
tracingEnabled = ReadSetting(settings, TRACING_ENABLED, TRACING_ENABLED_DEFAULT);
tracingTraceFile = ReadSetting(settings, TRACING_TRACEFILE, TRACING_TRACEFILE_DEFAULT);
tracingTraceLevel = ReadSetting(settings, TRACING_TRACELEVEL, TRACING_TRACELEVEL_DEFAULT);
tracingSwitchName = ReadSetting(settings, TRACING_SWITCHNAME, TRACING_SWITCHNAME_DEFAULT);
tracingSwitchDescription = ReadSetting(settings, TRACING_SWITCHDESCRIPTION, TRACING_SWITCHDESCRIPTION_DEFAULT);
eventLogEnabled = ReadSetting(settings, EVENTLOG_ENABLED, EVENTLOG_ENABLED_DEFAULT);
eventLogMachineName = ReadSetting(settings, EVENTLOG_MACHINENAME, EVENTLOG_MACHINENAME_DEFAULT);
eventLogSourceName = ReadSetting(settings, EVENTLOG_SOURCENAME, EVENTLOG_SOURCENAME_DEFAULT);
eventLogTraceLevel = ReadSetting(settings, EVENTLOG_TRACELEVEL, EVENTLOG_TRACELEVEL_DEFAULT);
}
return null;
}
/// <summary>
/// String version of ReadSetting.
/// <remarks>
/// Reads a setting from a hashtable and converts it to the correct
/// type. One of these functions is provided for each type
/// expected in the hash table. These are public so that other
/// classes don''t have to duplicate them to read settings from
/// a hash table.
/// </remarks>
/// <param name="settings">The Hashtable to read from.</param>
/// <param name="key">A key for the value in the Hashtable.</param>
/// <param name="defaultValue">The default value if the item is not found.</param>
/// <retvalue>
/// <para>value: from the hash table</para>
/// <para>
/// default: if the item is not in the table or cannot be case to the expected type.
/// </para>
/// </retvalue>
/// </summary>
public static String ReadSetting(NameValueCollection settings, String key, String defaultValue)
{
try
{
Object setting = settings[key];
return (setting == null) ? defaultValue : (String)setting;
}
catch
{
return defaultValue;
}
}
/// <summary>
/// Boolean version of ReadSetting.
/// <remarks>
/// Reads a setting from a hashtable and converts it to the correct
/// type. One of these functions is provided for each type
/// expected in the hash table. These are public so that other
/// classes don''t have to duplicate them to read settings from
/// a hash table.
/// </remarks>
/// <param name="settings">The Hashtable to read from.</param>
/// <param name="key">A key for the value in the Hashtable.</param>
/// <param name="defaultValue">The default value if the item is not found.</param>
/// <retvalue>
/// <para>value: from the hash table</para>
/// <para>
/// default: if the item is not in the table or cannot be case to the expected type.
/// </para>
/// </retvalue>
/// </summary>
public static bool ReadSetting(NameValueCollection settings, String key, bool defaultValue)
{
try
{
Object setting = settings[key];
return (setting == null) ? defaultValue : Convert.ToBoolean((String)setting);
}
catch
{
return defaultValue;
}
}
/// <summary>
/// int version of ReadSetting.
/// <remarks>
/// Reads a setting from a hashtable and converts it to the correct
/// type. One of these functions is provided for each type
/// expected in the hash table. These are public so that other
/// classes don''t have to duplicate them to read settings from
/// a hash table.
/// </remarks>
/// <param name="settings">The Hashtable to read from.</param>
/// <param name="key">A key for the value in the Hashtable.</param>
/// <param name="defaultValue">The default value if the item is not found.</param>
/// <retvalue>
/// <para>value: from the hash table</para>
/// <para>
/// default: if the item is not in the table or cannot be case to the expected type.
/// </para>
/// </retvalue>
/// </summary>
public static int ReadSetting(NameValueCollection settings, String key, int defaultValue)
{
try
{
Object setting = settings[key];
return (setting == null) ? defaultValue : Convert.ToInt32((String)setting);
}
catch
{
return defaultValue;
}
}
/// <summary>
/// TraceLevel version of ReadSetting.
/// <remarks>
/// Reads a setting from a hashtable and converts it to the correct
/// type. One of these functions is provided for each type
/// expected in the hash table. These are public so that other
/// classes don''t have to duplicate them to read settings from
/// a hash table.
/// </remarks>
/// <param name="settings">The Hashtable to read from.</param>
/// <param name="key">A key for the value in the Hashtable.</param>
/// <param name="defaultValue">The default value if the item is not found.</param>
/// <retvalue>
/// <para>value: from the hash table</para>
/// <para>
/// default: if the item is not in the table or cannot be case to the expected type.
/// </para>
/// </retvalue>
/// </summary>
public static TraceLevel ReadSetting(NameValueCollection settings, String key, TraceLevel defaultValue)
{
try
{
Object setting = settings[key];
return (setting == null) ? defaultValue : (TraceLevel)Convert.ToInt32((String)setting);
}
catch
{
return defaultValue;
}
}
/// <summary>
/// Function to be called by Application_OnStart as described in the
/// class description. Initializes the application root.
/// <param name="myAppPath">The path of the running application.</param>
/// </summary>
public static void OnApplicationStart(String myAppPath)
{
appRoot = myAppPath;
// System.Configuration.ConfigurationSettings.GetConf ig("ApplicationConfiguration");
System.Configuration.ConfigurationSettings.GetConf ig("JCartConfiguration");
// System.Configuration.ConfigurationSettings.GetConf ig("SourceViewer");
}
/// <value>
/// Property AppRoot is used to get the root path of the application.
/// </value>
public static String AppRoot
{
get
{
return appRoot;
}
}
/// <value>
/// Property TracingEnabled is used to get the configuration setting, defaulting to False on error.
/// </value>
public static bool TracingEnabled
{
get
{
return tracingEnabled;
}
}
/// <value>
/// Property TracingTraceFile is used to get the full path name to the file that contains trace
/// settings, defaults to ApplicationTrace.txt.
/// </value>
public static String TracingTraceFile
{
get
{
return appRoot + "\\" + tracingTraceFile;
}
}
/// <value>
/// Property TracingTraceFile is used to get the highest logging level that should be written to
/// the tracing file, defaults to TraceLevel.Verbose (however, TracingEnabled defaults
/// to False, so you have to turn it on explicitly).
/// </value>
public static TraceLevel TracingTraceLevel
{
get
{
return tracingTraceLevel;
}
}
/// <value>
/// Property TracingSwitchName is used to get the trace switch name, defaults to ApplicationTraceSwitch.
/// </value>
public static String TracingSwitchName
{
get
{
return tracingSwitchName;
}
}
/// <value>
/// Property TracingSwitchDescription is used to get the trace settings file, defaults to
/// "Application error and tracing information".
/// </value>
public static String TracingSwitchDescription
{
get
{
return tracingSwitchDescription;
}
}
/// <value>
/// Property EventLogEnabled is used to get whether writing to the event log is support, defaults to True.
/// <remarks>Returns true if writing to the event log is enabled, false otherwise</remarks>
/// </value>
public static bool EventLogEnabled
{
get
{
return eventLogEnabled;
}
}
/// <value>
/// Property EventLogMachineName is used to get the machine name to log the event to, defaults to an
/// empty string, indicating the current machine. A machine name
/// (without \\), may be empty.
/// </value>
public static String EventLogMachineName
{
get
{
return eventLogMachineName;
}
}
/// <value>
/// Property EventLogMachineName is used to get the source of the error to be written to the event log,
/// defaults WebApplication.
/// </value>
public static String EventLogSourceName
{
get
{
return eventLogSourceName;
}
}
/// <value>
/// Property EventLogTraceLevel is used to get the highest logging level that should be written to the event log,
/// defaults to TraceLevel.Error.
/// </value>
public static TraceLevel EventLogTraceLevel
{
get
{
return eventLogTraceLevel;
}
}
} //class ApplicationConfiguration
} //namespace JCart.SystemFramework
WEB.CONFIG
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="ApplicationConfiguration" type="JCart.SystemFramework.ApplicationConfigurati on, JCart.SystemFramework" />
<section name="JCartConfiguration" type="JCart.Common.JCartConfiguration, JCart.Common" />
</configSections>
<system.web>
<compilation defaultLanguage="c#" debug="true" />
<!-- xx The sessionState is currently set to inproc: the lines following [mode="inproc"] are not used but are present for ease of configuration -->
<sessionState cookieless="false" timeout="20" mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
<!-- security -->
<authentication mode="Windows" />
<!--
<authentication mode="Forms">
<forms name=".ADUAUTH2" loginUrl="logon.aspx" protection="All" timeout="60" >
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
-->
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
</system.web>
<ApplicationConfiguration>
<!-- Trace file settings -->
<add 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. -->
<add key="SystemFramework.Tracing.TraceFile" value="DuwamishTrace.txt" />
<!-- The TraceLevel for this switch. -->
<add key="SystemFramework.Tracing.TraceLevel" value="4" />
<!-- This switch name. The trace level for this name can be set through
environment variables or the registry -->
<add key="SystemFramework.Tracing.SwitchName" value="DuwamishTraceSwitch" />
<!-- This description of the Tracing.SwitchName switch -->
<add 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.
-->
<add key="SystemFramework.EventLog.Enabled" value="True" />
<add key="SystemFramework.EventLog.Machine" value="." />
<add key="SystemFramework.EventLog.SourceName" value="Duwamish7" />
<!-- Use the standard TraceLevel values:
0 = Off
1 = Error
2 = Warning
3 = Info
4 = Verbose -->
<add key="SystemFramework.EventLog.LogLevel" value="1" />
</ApplicationConfiguration>
<JCartConfiguration>
<!-- Settings specific to the Duwamish application -->
<add key="JCart.DataAccess.ConnectionString" value="server=EMPIRE2;User ID=sa;Password=;database=JCart;Connection Reset=FALSE" />
<add key="JCart.Web.EnablePageCache" value="True" />
<add key="JCart.Web.PageCacheExpiresInSeconds" value="3600" />
<add key="JCart.Web.EnableSsl" value="False" />
</JCartConfiguration>
<!-- String dsn = ConfigurationSettings.AppSettings["JCart"];
<appSettings>
<add key="JCart" value="server=EMPIRE2;User ID=sa;Password=;database=JCart;Connection Reset=FALSE" />
</appSettings>
-->
</configuration>
这篇关于在远程类中使用变量超出范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!