ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-下)

还是接着上一篇说起,在上两篇中主要和大家探讨了ConfigSection的几种常用形式,并举例几个例子说明了一下。其实它们主要都是继承System.Configuration.ConfigurationSection类来创建自定义配置节。其实在.Net Framework 1.0和1.1的时候,我们是实现System.Configuration.IConfigurationSectionHandler接口来创建自定义配置节,现在微软已经不建议这样使用了,如果有兴趣的朋友可以看看这个《使用 IConfigurationSectionHandler 创建自定义配置节》

今天我们就举两个具体的实例来说明一下,其实也是在大家做项目的时候经常要用的两个东东:log4net和EnterpriseLibrary(微软企业库),以下就简单的说明一下他们是怎么使用的。

Log4net的使用



1、log4net的介绍

log4net是一个可以帮助我们(程序员)把日志信息输出到各种不同目标的.net类库。它可以很容易集成到开发项目中,实现程序调试和运行的时候的日志信息输出。它主要由Logger, Appender, Filter, Layout 4个组件构成, 一般情况下后3个组件在配置文件中配置。

2、Log4net的使用

下面就用一个简单的DEMO说明一下;

首先,我们需要先在web.config(或app.config)中配置Log4net,如下:

   1:    <configSections>
   2:      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
   3:    </configSections>
   4:    <log4net>
   5:      <root>
   6:        <appender-ref ref="ConsoleAppender" />     
   7:        <appender-ref ref="FileAppenderInfo" />
   8:      </root>
   9:   
  10:      <appender name="FileAppenderInfo"  type="log4net.Appender.FileAppender">
  11:        <param name="File" value="log-file.txt" />
  12:        <param name="AppendToFile" value="true" />
  13:        <layout type="log4net.Layout.PatternLayout">
  14:          <header value="
----------------------header--------------------------
" />
  15:          <param name="ConversionPattern"  value="%d [%t] %-5p %c- %m%n" />
  16:        </layout>
  17:      </appender>
  18:   
  19:      <appender name="ConsoleAppender"  type="log4net.Appender.ColoredConsoleAppender" >
  20:        <mapping>
  21:          <level value="ERROR" />
  22:          <foreColor value="White" />
  23:          <backColor value="Red, HighIntensity" />
  24:        </mapping>
  25:        <mapping>
  26:          <level value="DEBUG" />
  27:          <foreColor value="Yellow" />
  28:        </mapping>
  29:        <layout type="log4net.Layout.PatternLayout">
  30:          <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  31:        </layout>
  32:        <filter type="log4net.Filter.LevelRangeFilter">
  33:          <param name="LevelMin" value="INFO" />
  34:          <param name="LevelMax" value="FATAL" />
  35:        </filter>
  36:      </appender>
  37:    </log4net>

其次,就可以在程序中使用了。

   1:   log4net.ILog log = log4net.LogManager.GetLogger("kevindiao");
   2:   log4net.Config.XmlConfigurator.Configure();
   3:   log.Info(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
   4:   log.Info("kevindiao");
   5:   log.Error("Hello world!");
   6:   Console.WriteLine("log4net run close");

看看运行的结果1:

结果2:

----------------------header-------------------------- 
2011-04-07 23:06:19,361 [5084] INFO  kevindiao- KevinDiao.Log4netTest.Program 
2011-04-07 23:06:19,441 [5084] INFO  kevindiao- kevindiao 
2011-04-07 23:06:19,441 [5084] ERROR kevindiao- Hello world!

这里我就不详细说明他的配置和使用了,大家可以的博客园中查找相关的介绍。

微软企业库(EnterpriseLibrary 5.0)

1、企业库的介绍

微软企业库是一系列应用程序块的集合,目标是帮助开发人员来处理常见的企业应用开发遇到的挑战。它包含以下主要的模块(5.0):

  • Caching Application Block.

开发人员可以使用此应用模块与他们程序里的缓存协同工作。 它支持可拔插与持久化的存储机制。

  • Cryptography Application Block.

开发人员可以使用此应用模块与他们程序里的哈希与对称加密算法协同工作。

  • Data Access Application Block.

开发人员可以使用此模块与他们系统中的标准的Database功能协同工作,包括同步和一部数据访问,可以返回的多种数据格式

  • Exception Handling Application Block.

开发人员可以使用此模块为异常处理创建持久化策略,处理在企业层各个层次之间发生的异常。

  • Logging Application Block.

开发人员可以使用此模块来处理系统中的不同的日志需求。这次发布改进了日志的性能。

  • Policy Injection Application Block.

此模块可以用来实现侦听策略,对于一些常见的特性实现的简化。比如日志、缓存、异常处理和验证。

  • Security Application Block.

开发人员可以使用这个模块来与他们系统中的授权和安全缓存功能协同工作。

  • Unity Application Block.

开发者可以使用此模块作为轻量级的、可扩展的依赖注入容器,带有构造函数支持、熟悉和方法调用注入,也包含实例和类型注入。

  • Validation Application Block.

开发者可以使用此模块为业务对象去出创建建验证规则,它可以跨越不同的应用程序层。

2、企业库简单的使用

这里就用Logging Application Block来举例说明以下:

首页,我们先开以下web.config中的配置:

   1:    <configSections>
   2:      <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, 
   3:               Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
   4:               requirePermission="true" />
   5:    </configSections>
   6:    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
   7:      <listeners>
   8:        <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener,
   9:             Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
  10:            listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, 
  11:            Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
  12:            source="ygmh" formatter="Text Formatter"
  13:            log="" machineName="." traceOutputOptions="None" />
  14:      </listeners>
  15:      <formatters>
  16:        <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, 
  17:             Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
  18:            template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: 
  19:            {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
  20:            Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
  21:            App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
  22:            Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
  23:            Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}"
  24:            name="Text Formatter" />
  25:      </formatters>
  26:      <categorySources>
  27:        <add switchValue="All" name="General">
  28:          <listeners>
  29:            <add name="Event Log Listener" />
  30:          </listeners>
  31:        </add>
  32:      </categorySources>
  33:      <specialSources>
  34:        <allEvents switchValue="All" name="All Events" />
  35:        <notProcessed switchValue="All" name="Unprocessed Category" />
  36:        <errors switchValue="All" name="Logging Errors &amp; Warnings">
  37:          <listeners>
  38:            <add name="Event Log Listener" />
  39:          </listeners>
  40:        </errors>
  41:      </specialSources>

配置文件的内容可以用企业库自带的配置文件生成程序来生成,位置在安装目录的bin文件夹中。

其次,再看一下在程序中是如何使用的:

   1:   LogEntry logEntry = new LogEntry();
   2:   logEntry.EventId = 1;
   3:   logEntry.Priority = 1;
   4:   logEntry.Title = "企业库";
   5:   logEntry.Categories.Add("企业库");
   6:   logEntry.Categories.Add("企业库 5.0");
   7:   logEntry.Message = "企业库日志应用程序模块工作原理";
   8:   Logger.Write(logEntry, "General");
   9:   Console.WriteLine("日志写入成功!");
  10:   Console.ReadLine();

最后在看看运行结果,

在日志查看器(eventvwr.msc)查看日志日志内容:

   1:  Timestamp: 2011/4/17 3:19:30
   2:   
   3:  Message: Timestamp: 2011/4/17 3:19:30
   4:  Message: 企业库日志应用程序模块工作原理
   5:  Category: 企业库, 企业库 5.0
   6:  Priority: 1
   7:  EventId: 1
   8:  Severity: Information
   9:  Title:企业库
  10:  Machine: KEVINDIAO-PC
  11:  App Domain: KevinDiao.EntLib.LogApp.vshost.exe
  12:  ProcessId: 3400
  13:  Process Name:"************************"
  14:  \KevinDiao.EntLib.LogApp.vshost.exe
  15:  Thread Name: 
  16:  Win32 ThreadId:4928
  17:  Extended Properties: 
  18:   
  19:  Category: General
  20:   
  21:  Priority: -1
  22:   
  23:  EventId: 1
  24:   
  25:  Severity: Information
  26:   
  27:  Title:
  28:   
  29:  Machine: KEVINDIAO-PC
  30:   
  31:  App Domain: KevinDiao.EntLib.LogApp.vshost.exe
  32:   
  33:  ProcessId: 3400
  34:   
  35:  Process Name:"************************"
  36:  \KevinDiao.EntLib.LogApp.vshost.exe
  37:   
  38:  Thread Name: 
  39:   
  40:  Win32 ThreadId:4928
  41:   
  42:  Extended Properties: 

结果中的Process Name的物理路径隐藏了。

参考:

REFERENCE FROM : http://www.cnblogs.com/diaojia/archive/2011/04/17/2018770.html

还是接着上一篇说起,在上两篇中主要和大家探讨了ConfigSection的几种常用形式,并举例几个例子说明了一下。其实它们主要都是继承System.Configuration.ConfigurationSection类来创建自定义配置节。其实在.Net Framework 1.0和1.1的时候,我们是实现System.Configuration.IConfigurationSectionHandler接口来创建自定义配置节,现在微软已经不建议这样使用了,如果有兴趣的朋友可以看看这个《使用 IConfigurationSectionHandler 创建自定义配置节》

今天我们就举两个具体的实例来说明一下,其实也是在大家做项目的时候经常要用的两个东东:log4net和EnterpriseLibrary(微软企业库),以下就简单的说明一下他们是怎么使用的。

Log4net的使用



1、log4net的介绍

log4net是一个可以帮助我们(程序员)把日志信息输出到各种不同目标的.net类库。它可以很容易集成到开发项目中,实现程序调试和运行的时候的日志信息输出。它主要由Logger, Appender, Filter, Layout 4个组件构成, 一般情况下后3个组件在配置文件中配置。

2、Log4net的使用

下面就用一个简单的DEMO说明一下;

首先,我们需要先在web.config(或app.config)中配置Log4net,如下:

   1:    <configSections>
   2:      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
   3:    </configSections>
   4:    <log4net>
   5:      <root>
   6:        <appender-ref ref="ConsoleAppender" />     
   7:        <appender-ref ref="FileAppenderInfo" />
   8:      </root>
   9:   
  10:      <appender name="FileAppenderInfo"  type="log4net.Appender.FileAppender">
  11:        <param name="File" value="log-file.txt" />
  12:        <param name="AppendToFile" value="true" />
  13:        <layout type="log4net.Layout.PatternLayout">
  14:          <header value="
----------------------header--------------------------
" />
  15:          <param name="ConversionPattern"  value="%d [%t] %-5p %c- %m%n" />
  16:        </layout>
  17:      </appender>
  18:   
  19:      <appender name="ConsoleAppender"  type="log4net.Appender.ColoredConsoleAppender" >
  20:        <mapping>
  21:          <level value="ERROR" />
  22:          <foreColor value="White" />
  23:          <backColor value="Red, HighIntensity" />
  24:        </mapping>
  25:        <mapping>
  26:          <level value="DEBUG" />
  27:          <foreColor value="Yellow" />
  28:        </mapping>
  29:        <layout type="log4net.Layout.PatternLayout">
  30:          <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  31:        </layout>
  32:        <filter type="log4net.Filter.LevelRangeFilter">
  33:          <param name="LevelMin" value="INFO" />
  34:          <param name="LevelMax" value="FATAL" />
  35:        </filter>
  36:      </appender>
  37:    </log4net>

其次,就可以在程序中使用了。

   1:   log4net.ILog log = log4net.LogManager.GetLogger("kevindiao");
   2:   log4net.Config.XmlConfigurator.Configure();
   3:   log.Info(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
   4:   log.Info("kevindiao");
   5:   log.Error("Hello world!");
   6:   Console.WriteLine("log4net run close");

看看运行的结果1:

结果2:

----------------------header-------------------------- 
2011-04-07 23:06:19,361 [5084] INFO  kevindiao- KevinDiao.Log4netTest.Program 
2011-04-07 23:06:19,441 [5084] INFO  kevindiao- kevindiao 
2011-04-07 23:06:19,441 [5084] ERROR kevindiao- Hello world!

这里我就不详细说明他的配置和使用了,大家可以的博客园中查找相关的介绍。

微软企业库(EnterpriseLibrary 5.0)

1、企业库的介绍

微软企业库是一系列应用程序块的集合,目标是帮助开发人员来处理常见的企业应用开发遇到的挑战。它包含以下主要的模块(5.0):

  • Caching Application Block.

开发人员可以使用此应用模块与他们程序里的缓存协同工作。 它支持可拔插与持久化的存储机制。

  • Cryptography Application Block.

开发人员可以使用此应用模块与他们程序里的哈希与对称加密算法协同工作。

  • Data Access Application Block.

开发人员可以使用此模块与他们系统中的标准的Database功能协同工作,包括同步和一部数据访问,可以返回的多种数据格式

  • Exception Handling Application Block.

开发人员可以使用此模块为异常处理创建持久化策略,处理在企业层各个层次之间发生的异常。

  • Logging Application Block.

开发人员可以使用此模块来处理系统中的不同的日志需求。这次发布改进了日志的性能。

  • Policy Injection Application Block.

此模块可以用来实现侦听策略,对于一些常见的特性实现的简化。比如日志、缓存、异常处理和验证。

  • Security Application Block.

开发人员可以使用这个模块来与他们系统中的授权和安全缓存功能协同工作。

  • Unity Application Block.

开发者可以使用此模块作为轻量级的、可扩展的依赖注入容器,带有构造函数支持、熟悉和方法调用注入,也包含实例和类型注入。

  • Validation Application Block.

开发者可以使用此模块为业务对象去出创建建验证规则,它可以跨越不同的应用程序层。

2、企业库简单的使用

这里就用Logging Application Block来举例说明以下:

首页,我们先开以下web.config中的配置:

   1:    <configSections>
   2:      <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, 
   3:               Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
   4:               requirePermission="true" />
   5:    </configSections>
   6:    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
   7:      <listeners>
   8:        <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener,
   9:             Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
  10:            listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, 
  11:            Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
  12:            source="ygmh" formatter="Text Formatter"
  13:            log="" machineName="." traceOutputOptions="None" />
  14:      </listeners>
  15:      <formatters>
  16:        <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, 
  17:             Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
  18:            template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: 
  19:            {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
  20:            Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
  21:            App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
  22:            Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
  23:            Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}"
  24:            name="Text Formatter" />
  25:      </formatters>
  26:      <categorySources>
  27:        <add switchValue="All" name="General">
  28:          <listeners>
  29:            <add name="Event Log Listener" />
  30:          </listeners>
  31:        </add>
  32:      </categorySources>
  33:      <specialSources>
  34:        <allEvents switchValue="All" name="All Events" />
  35:        <notProcessed switchValue="All" name="Unprocessed Category" />
  36:        <errors switchValue="All" name="Logging Errors &amp; Warnings">
  37:          <listeners>
  38:            <add name="Event Log Listener" />
  39:          </listeners>
  40:        </errors>
  41:      </specialSources>

配置文件的内容可以用企业库自带的配置文件生成程序来生成,位置在安装目录的bin文件夹中。

其次,再看一下在程序中是如何使用的:

   1:   LogEntry logEntry = new LogEntry();
   2:   logEntry.EventId = 1;
   3:   logEntry.Priority = 1;
   4:   logEntry.Title = "企业库";
   5:   logEntry.Categories.Add("企业库");
   6:   logEntry.Categories.Add("企业库 5.0");
   7:   logEntry.Message = "企业库日志应用程序模块工作原理";
   8:   Logger.Write(logEntry, "General");
   9:   Console.WriteLine("日志写入成功!");
  10:   Console.ReadLine();

最后在看看运行结果,

在日志查看器(eventvwr.msc)查看日志日志内容:

   1:  Timestamp: 2011/4/17 3:19:30
   2:   
   3:  Message: Timestamp: 2011/4/17 3:19:30
   4:  Message: 企业库日志应用程序模块工作原理
   5:  Category: 企业库, 企业库 5.0
   6:  Priority: 1
   7:  EventId: 1
   8:  Severity: Information
   9:  Title:企业库
  10:  Machine: KEVINDIAO-PC
  11:  App Domain: KevinDiao.EntLib.LogApp.vshost.exe
  12:  ProcessId: 3400
  13:  Process Name:"************************"
  14:  \KevinDiao.EntLib.LogApp.vshost.exe
  15:  Thread Name: 
  16:  Win32 ThreadId:4928
  17:  Extended Properties: 
  18:   
  19:  Category: General
  20:   
  21:  Priority: -1
  22:   
  23:  EventId: 1
  24:   
  25:  Severity: Information
  26:   
  27:  Title:
  28:   
  29:  Machine: KEVINDIAO-PC
  30:   
  31:  App Domain: KevinDiao.EntLib.LogApp.vshost.exe
  32:   
  33:  ProcessId: 3400
  34:   
  35:  Process Name:"************************"
  36:  \KevinDiao.EntLib.LogApp.vshost.exe
  37:   
  38:  Thread Name: 
  39:   
  40:  Win32 ThreadId:4928
  41:   
  42:  Extended Properties: 

结果中的Process Name的物理路径隐藏了。

参考:

时间: 2024-11-02 17:15:28

ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-下)的相关文章

ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-上 )

ConfigSections的结构 首先我们先回顾一下ConfigSections的结构和它子节点的说明,如下: 1: <configSections> 2: <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Cult

ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-中)

我们就接着上一篇继续说,上一篇中介绍了ConfigSection的结构和两个简单的DEMO,本篇就说一下SectionGroup.ConfigurationElementCollection和key/value pair configurationsection. 的使用. 1.SectionGroup的使用 下面的代码简单的说明一下SectionGroup的使用: 1).首先定义一个继承ConfigurationSectionGroup的类: 1: /// <summary> 2: ///

WCF项目问题2-无法激活服务,因为它需要 ASP.NET 兼容性。没有未此应用程序启用 ASP.NET 兼容性。请在 web.config 中启用 ASP.NET 兼容性,或将 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 属性设置为 Required 以外的值。

无法激活服务,因为它需要 ASP.NET 兼容性.没有未此应用程序启用 ASP.NET 兼容性.请在 web.config 中启用 ASP.NET 兼容性,或将 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 属性设置为 Required 以外的值. 在web.config中添加 aspNetCompatibilityEnabled="true"属性即可,如下: <servi

SAE上传web应用(包括使用数据库)教程详解及问题解惑

转自:http://blog.csdn.net/baiyuliang2013/article/details/24725995 SAE上传web应用(包括使用数据库)教程详解及问题解惑:       最近由于工作需求,需利用SAE平台,但在使用过程中遇到不少问题,比如如何上传应用,上传应用完毕后打不开,mysql连接不上等等,以及云豆的计费问题,结合个人使用心得,将在本帖一一解答.       1,上传web应用首先,使用SAE平台需要注册自己的账号吧,这个就不说了,然后进入我的首页,会看到: 

SVN中基于Maven的Web项目更新到本地过程详解

环境 MyEclipse:10.7 Maven:3.1.1 概述 最近在做项目的时候,MyEclipse下载SVN上面基于Maven的Web项目总是出现很多问题,有时候搞了很半天,Maven项目还是出现叉号,最后总结了方法步骤,终于可以将出现的问题解决,在此,将重现从SVN上将基于Maven的Web项目变成本地MyEclipse中项目的过程,问题也在其中进行解决. 问题补充 在使用Myeclipse的部署Web项目的时候,在点击部署按钮的时候,没有任何反应,在此提供两种解决方法,问题如图1所示:

玩转CSS3,嗨翻WEB前端,CSS3伪类元素详解/深入浅出[原创][5+3时代]

1.博客背景 在我的上一篇博客中, 很多园友提出说对css3"画图"不是很理解, 在跟他们私聊了一段时间以后,加上自己在开始自学css3的时候的疑惑,我觉得大家之所以不是很理解主要是因为对伪元素不太了解,介于画图和CSS3里一些高大上的特效用的比较广泛的伪类元素就是::before 和 ::after, 写这篇博客主要也是为了起到一个敲门砖的作用,所以本篇博客主要是讲::before 和 ::after.那么就让我们一起来聊聊伪元素吧. 2.CSS历史 伪元素实际上在CSS1(CSS1

好程序员web前端学习路线分享Jsonp详解

好程序员web前端学习路线分享Jsonp详解,Jsonp原理: 咱们先看看POST的数据发送位置: GET的数据发送位置 那什么情况下会发生跨域呢? 当本机请求服务器上数据的时候:会发生跨域: 当本地服务器请求其他服务器数据的时候回发生跨域: 为什么要跨域呢? 同源策略:基于浏览器的安全考虑,浏览器各个厂商之间出现了一个约定,这个约定叫做同源策略.这个约定的主要内容就是,域和域之间数据不共通. 跨域的用途是什么? 当网站发展壮大到一定地步的时候,会建立很多的节点,各个节点的IP是不同的,所以跨域

asp.net夜话之十一:web.config详解

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/166441 在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我们开发时的环境与部署环境可能不一致(比如数据库不一样),如 果在代码中保存这些配置这些信息部署时需要到用户那里更改代码再重新编译,这种部署方式非常麻烦.在.net中提供了一种便捷的保存项目配置信息的办法, 那就是利用配

新手入门:史上最全Web端即时通讯技术原理详解

前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM(相关文章请参见:<IM架构篇>.<IM综合资料>.<IM/推送的通信格式.协议篇>.<IM心跳保活篇>.<IM安全篇>.<实时音视频开发>).消息推送应用(参见:<推送技术好文>)的通信原理介绍也较多