<?
xml version="1.0"
?>
<!--
在.net提供了一个针对当前机器的配置文件,这个文件是machine.config,它位于(\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\文件下)
这个文件里面定义了针对当前机器的WinForm程序和asp.net应用程序的配置。还有一个web.config文件,这个文件包含了asp.net网站的常用配置。
在.net提供了一个针对当前机器的配置文件,这个文件是machine.config,它位于(\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\文件下)
这个文件里面定义了针对当前机器的WinForm程序和asp.net应用程序的配置。还有一个web.config文件,这个文件包含了asp.net网站的常用配置。
asp.net网站IIS启动的时候会加载配置文件中的配置信息,然后缓存这些信息,这样就不必每次去读取配置信息。在运行过程中asp.net应用程序会监视配置文件的变化情况,一旦编辑了这些配置信息,就会重新读取这些配置信息并缓存。
当我们要读取某个节点或者节点组信息时,是按照如下方式搜索的:
(1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找。
(2)如果当前页面所在目录下不存在web.config文件或者web.config文件中不存在该结点名,则查找它的上级目录,直到网站的根目录。
(3)如果网站根目录下不存在web.config文件或者web.config文件中不存在该节点名则在 \Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config文件中查找。
(4)如果在%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config文件中不存在相应结点,则在%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config文件中查找。
(5)如果仍然没有找到则返回null。所以如果我们对某个网站或者某个文件夹有特定要求的配置,可以在相应的文件夹下创建一个web.config文件,覆盖掉上级文件夹中的web.config文件中的同名配置即可。这些配置信息的寻找只查找一次,以后便被缓存起来供后来的调用。在asp.net应用程序运行过程中,如果web.config文件发生更改就会导致相应的应用程序重新启动,这时存储在服务器内存中的用户会话信息就会丢失(如存储在内存中的Session)。一些软件(如杀毒软件)每次完成对web.config的访问时就会修改web.config的访问时间属性,也会导致asp.net应用程序的重启。
-->
<
configuration
>
<!--
配置节点申明区
-->
<
configSections
>
<
sectionGroup
name
="system.web.extensions"
type
="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
>
<
sectionGroup
name
="scripting"
type
="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
>
<
section
name
="scriptResourceHandler"
type
="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission
="false"
allowDefinition
="MachineToApplication"
/>
<
sectionGroup
name
="webServices"
type
="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
>
<
section
name
="jsonSerialization"
type
="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission
="false"
allowDefinition
="Everywhere"
/>
<
section
name
="profileService"
type
="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission
="false"
allowDefinition
="MachineToApplication"
/>
<
section
name
="authenticationService"
type
="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission
="false"
allowDefinition
="MachineToApplication"
/>
<
section
name
="roleService"
type
="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission
="false"
allowDefinition
="MachineToApplication"
/>
</
sectionGroup
>
</
sectionGroup
>
</
sectionGroup
>
</
configSections
>
<
appSettings
>
<
add
key
= "Conntction"
value
= "server=.;userid=sa;password=;database=Info; "
/>
<!--
定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.
-->
<
add
key
= "ErrPage "
value
= "Error.aspx "
/>
<!--
定义了一个错误重定向页面.
-->
<
add
key
="ImageType"
value
=".jpg;.bmp;.gif;.png;.jpeg"
/>
<!--
允许上传的图片格式类型
-->
<
add
key
="FileType"
value
=".jpg;.bmp;.gif;.png;.jpeg;.pdf;.zip;.rar;.xls;.doc"
/>
<!--
允许上传的文件类型
-->
</
appSettings
>
<!--
对于<appSettings>
节点中的值可以按照key来进行访问,以下就是一个读取key值为“FileType”节点值的例子:
string fileType=ConfigurationManager.AppSettings["FileType "];
-->
<
connectionStrings
>
<!--
节点:主要用于配置数据库连接的,我们可以节点中增加任意个节点来保存数据库连接字符串,
将来在代码中通过代码的方式动态获取节点的值来实例化数据库连接对象,
这样一旦部署的时候数据库连接信息发生变化我们仅需要更改此处的配置即可,
而不必因为数据库连接信息的变化而需要改动程序代码和重新部署。
例如 SQL Server数据库配置
-->
<
add
name
="AspNetStudyConnectionString1"
connectionString
="Data Source=(local);Initial Catalog=AspNetStudy;User ID=sa;Password=sa"
/>
<!--
在代码中我们可以这么实例化数据库连接对象:
//读取web.config节点配置
string connectionString = ConfigurationManager.ConnectionStrings["AspNetStudyConnectionString1"].ConnectionString;
//实例化SqlConnection对象
SqlConnection connection = new SqlConnection(connectionString);
这样做的好处是一旦开发时所用的数据库和部署时的数据库不一致,仅仅需要用记事本之类的文本编辑工具编辑connectionString属性的值就行了。
-->
</
connectionStrings
>
<
system.web
>
<
compilation
debug
="false"
>
<!--
debug :
为true时,启动aspx调试;
为false不启动aspx调试,因而可以提高应用程序运行时的性能。
一般程序员在开发时设置为true,交给客户时设置为false.
-->
<
assemblies
>
<
add
assembly
="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
/>
<
add
assembly
="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
/>
<
add
assembly
="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
assembly
="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
/>
</
assemblies
>
</
compilation
>
<
authentication
mode
= "Forms "
>
<!--
I.Windows: 使用IIS验证方式
II.Forms: 使用基于窗体的验证方式
III.Passport: 采用Passport cookie验证模式
IV.None: 不采用任何验证方式
-->
<
forms
name
= ".ASPXUSERDEMO "
loginUrl
= "Login.aspx "
protection
= "All "
timeout
="30"
/>
<!--
Forms节点的属性涵义:
I.Name: 指定完成身份验证的Http cookie的名称.
II.LoginUrl: 如果未通过验证或超时后重定向的页面URL,一般为登录页面,让用户重新登录
III.Protection: 指定 cookie数据的保护方式.
可设置为: All None Encryption Validation四种保护方式
a. All表示加密数据,并进行有效性验证两种方式
b. None表示不保护Cookie.
c. Encryption表示对Cookie内容进行加密
d. validation表示对Cookie内容进行有效性验证
IV. TimeOut: 指定Cookie的失效时间. 超时后要重新登录.
-->
</
authentication
>
<
authorization
>
<!--
以下示例禁止匿名用户的访问
-->
<
deny
users
= "? "
/>
<!--
注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的
-->
</
authorization
>
<
sessionState
mode
= "InProc "
stateConnectionString
= "tcpip=127.0.0.1:42424 "
sqlConnectionString
= "data source=127.0.0.1;Trusted_Connection=yes "
cookieless
= "false "
timeout
="20"
/>
<!--
I.mode: 分为off,Inproc,StateServer,SqlServer几种状态
这里有详细介绍此属性: http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx
II. stateConnectionString :指定Asp.net应用程序存储远程会话状态的服务器名,默认为本机
III.sqlConnectionString: 当用会话状态数据库时,在这里设置连接字符串
IV. Cookieless: 设置为true时,表示不使用cookie会话状态来标识客户; 否则,相反.
V. TimeOut: 用来定义会话状态存储的时间,超过期限,将自动终止会话.
一般默认情况下使用InProc模式来存储会话状态数据,这种模式的好处是存取速度快,缺点是比较占用内存,
所以不宜在这种模式下存储大型的用户会话数据。
-->
<
customErrors
mode
= "RemoteOnly "
defaultRedirect
= "error.aspx "
>
<!--
I.mode : 具有On,Off,RemoteOnly 3种状态。
On表示始终显示自定义的信息;
Off表示始终显示详细的asp.net错误信息;
RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.
II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的
III.statusCode: 指明错误状态码,表明一种特定的出错状态.
IV. redirect:错误重定向的URL.
-->
<
error
statusCode
= "440 "
redirect
= "err440page.aspx "
/>
<
error
statusCode
= "500 "
redirect
= "err500Page.aspx "
/>
</
customErrors
>
<
pages
buffer
="true"
enableViewStateMac
="true"
validateRequest
="false"
>
<!--
节点用于表示对特定页设置,主要有三个属性,分别如下:
属性名 说明
buffer 是否启用了 HTTP 响应缓冲。
enableViewStateMac 是否应该对页的视图状态运行计算机身份验证检查 (MAC),以放置用户篡改,默认为false,如果设置为true将会引起性能的降低。
validateRequest 是否验证用户输入中有跨站点脚本攻击和SQL注入式漏洞攻击,默认为true,如果出现匹配情况就会发 HttpRequestValidationException 异常。
对于包含有在线文本编辑器页面一般自行验证用户输入而将此属性设为false。
下面就是一个配置节点的例子:
-->
<
controls
>
<
add
tagPrefix
="asp"
namespace
="System.Web.UI"
assembly
="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
tagPrefix
="asp"
namespace
="System.Web.UI.WebControls"
assembly
="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
</
controls
>
</
pages
>
<
globalization
requestEncoding
= "utf-8 "
responseEncoding
= "utf-8 "
fileEncoding
= "utf-8 "
/>
<!--
I.requestEncoding: 它用来检查每一个发来请求的编码.
II.responseEncoding: 用于检查发回的响应内容编码.
III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.
-->
<
httpHandlers
>
<!--
节点用于根据用户请求的URL和HTTP谓词将用户的请求交给相应的处理程序。可以在配置级别的任何层次配置此节点,也就是说可以针对某个特定目录下指定的特殊文件进行特殊处理。
如果我们某个文件夹下的文件或者某个类型的文件不允许用户下载,可以在<httpHandlers>节点中增加相应的子节点
节点的用法,在我们的asp.net应用程序中建立一个IPData目录,在IPData目录中创建一个IPData.txt文件,然后在Web.config中添加以下配置:
-->
<
remove
verb
="*"
path
="*.asmx"
/>
<
add
verb
="*"
path
="*.asmx"
validate
="false"
type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
verb
="*"
path
="*_AppService.axd"
validate
="false"
type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
verb
="GET,HEAD"
path
="ScriptResource.axd"
type
="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
validate
="false"
/>
<
add
path
="IPData/*.txt"
verb
="*"
type
=""
/>
<!--
上面的代码的作用是禁止访问IPData目录下的任何txt文件。
-->
</
httpHandlers
>
<
httpRuntime
maxRequestLength
= "4096 "
executionTimeout
="60"
appRequestQueueLimit
= "100 "
/>
<!--
示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100
-->
<
httpModules
>
<
add
name
="ScriptModule"
type
="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
</
httpModules
>
</
system.web
>
<
system.codedom
>
<
compilers
>
<
compiler
language
="c#;cs;csharp"
extension
=".cs"
warningLevel
="4"
type
="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
>
<
providerOption
name
="CompilerVersion"
value
="v3.5"
/>
<
providerOption
name
="WarnAsError"
value
="false"
/>
</
compiler
>
</
compilers
>
</
system.codedom
>
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<
system.webServer
>
<
validation
validateIntegratedModeConfiguration
="false"
/>
<
modules
>
<
remove
name
="ScriptModule"
/>
<
add
name
="ScriptModule"
preCondition
="managedHandler"
type
="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
</
modules
>
<
handlers
>
<
remove
name
="WebServiceHandlerFactory-Integrated"
/>
<
remove
name
="ScriptHandlerFactory"
/>
<
remove
name
="ScriptHandlerFactoryAppServices"
/>
<
remove
name
="ScriptResource"
/>
<
add
name
="ScriptHandlerFactory"
verb
="*"
path
="*.asmx"
preCondition
="integratedMode"
type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
name
="ScriptHandlerFactoryAppServices"
verb
="*"
path
="*_AppService.axd"
preCondition
="integratedMode"
type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
name
="ScriptResource"
preCondition
="integratedMode"
verb
="GET,HEAD"
path
="ScriptResource.axd"
type
="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
</
handlers
>
</
system.webServer
>
<
runtime
>
<
assemblyBinding
xmlns
="urn:schemas-microsoft-com:asm.v1"
>
<
dependentAssembly
>
<
assemblyIdentity
name
="System.Web.Extensions"
publicKeyToken
="31bf3856ad364e35"
/>
<
bindingRedirect
oldVersion
="1.0.0.0-1.1.0.0"
newVersion
="3.5.0.0"
/>
</
dependentAssembly
>
<
dependentAssembly
>
<
assemblyIdentity
name
="System.Web.Extensions.Design"
publicKeyToken
="31bf3856ad364e35"
/>
<
bindingRedirect
oldVersion
="1.0.0.0-1.1.0.0"
newVersion
="3.5.0.0"
/>
</
dependentAssembly
>
</
assemblyBinding
>
</
runtime
>
</
configuration
>