精华内容
下载资源
问答
  • webconfig建立
    千次阅读
    2022-01-04 15:58:19

    WEBCONFIG中常用的connectionStrings配置

    一般配置模板

    --语法示例
    <connectionStrings>
        <add 
    		name="connection" 
    		connectionString="Data Source=10.42.44.228;Initial Catalog=leftover_sys;Persist Security Info=True;User ID=root;Password=123456" 
    		providerName="System.Data.SqlClient"
        />
      </connectionStrings>
    

    当中的解释

    name="自定义连接字符串名称"
    
    connectionString="Data Source=服务器名
    
    Initial Catalog=数据库名
    
    User ID=用户;   Password=密码"
    
    providerName="数据库类型"
    
    当中的数据库类型主要分为如下:
    MYSQL :Mysql.Data.MySqlClient
    
    ORACLE: providerName="System.Data.OracleClient"   or   providerName="Oracle.DataAccess.Client"
    
    SQLSERVER:   providerName="System.Data.SqlClient"
    
    SQLite:  providerName="System.Data.SQLite"
    
    Access:  providerName="System.Data.OleDb"
    

    (详细说明–可以不看)

    Data Source

    定义:指生成用户实例的 SQL Server Express 的父实例

    SqlConnectionStringBuilder的DataSource属性,

    ​ 对应 connectionString中的Data Source,

    ​ “Data Source”可以由下列字符串代替:“Server”,“Address”,“Addr”和“Network Address”。
    Data Source=.\SQLExpress:也可以写成这样Data Source=(local)\SQLExpress。

    Integrated Security

    若要连接到用户实例,需要 Windows 身份验证;不支持 SQL Server 登录名

    SqlConnectionStringBuilder 的 IntegratedSecurity 属性,

    ​ 对应 connectionString 中的Integrated Security,

    ​ “Integrated Security”可以写成“trusted_connection”。
    ​ 为 True 时,

    ​ 使用当前的 Windows 帐户凭据进行身份验证,

    ​ 为 False 时,

    ​ 需要在连接中指定用户 ID 和密码。可识别的值为 True、False、Yes、No 以及与 True 等效的 SSPI。
    ​ 如果没有些则必须写上 uid=sa;pwd=123 之类的设置“uid”也可使用“User ID”,“pwd”也可换为“PassWord”。

    SSPI:

    Microsoft安全支持提供器接口(SSPI)是:

    ​ 定义得较全面的公用API,

    ​ 用来获得验证、信息完整性、信息隐私等集成安全服务,

    ​ 以及用于所有分布式应用程序协议的安全方面的服务。

    应用程序协议设计者能够利用该接口获得不同的安全性服务而不必修改协议本身。

    SqlConnectionStringBuilder 的 IntegratedSecurity 属性,

    ​ 对应 connectionString 中的Integrated Security,“Integrated Security”可以写成“trusted_connection”。

    AttachDBFilename

    连接字符串关键字用于附加主数据库文件 (.mdf),该文件必须包含完整路径名

    SqlConnectionStringBuilder 的 AttachDBFilename 属性,

    ​ 对应 connectionString 中的 AttachDBFilename,“AttachDBFilename”可以写成“extended properties”,“initial file name”。
    AttachDbFileName 属性指定连接打开的时候动态附加到服务器上的数据库文件的位置。
    这个属性可以接受数据库的完整路径和相对路径(例如使用|DataDirectory|语法),在运行时这个路径会被应用程序的 App_Data 目录所代替。

    User Instance

    设置为 true,这样就可调用用户实例

    SqlConnectionStringBuilder 的 UserInstance 属性,

    ​ 对应 connectionString 中的 User Instance ,该值指示是否将连接从默认的 SQL Server 实例重定向到在调用方帐户之下运行并且在运行时启动的实例。
    ​ UserInstance=true 时,

    ​ SQLServerExpress 为了把数据库附加到新的实例,建立一个新的进程,在打开连接的用户身份下运行。
    在 ASP.NET 应用程序中,这个用户是本地的 ASPNET 帐号或默认的 NetworkService,这依赖于操作系统。
    为了安全地附加非系统管理员帐号(例如ASP.NET帐号)提供的数据库文件,建立一个独立的 SQLServer 用户实例是必要的。

    providerName

    指定值“System.Data.OracleClient”,该值指定 ASP.NET 在使用此连接字符串进行连接时应使用 ADO.NET System.Data.OracleClient 提供程序。

    DataDirectory

    允许开发人员创建基于到数据源的相对路径(而无需指定完整路径)的连接字符串

    使用 DataDirectory 时,目录结构中的结果文件的路径不能高于替代字符串指向的目录。

    如果完全展开的 DataDirectory 为 C:\AppDirectory\app_data,则上面显示的示例连接字符串有效,因为它在 c:\AppDirectory 之下。

    参考:https://www.cnblogs.com/lipanpan/p/3665779.html

    更多相关内容
  • webconfig

    2019-10-05 13:37:50
    web.config配置文件 Web 配置文件web.config位于 Web 应用程序的任何目录中,子目录如果没有 web.config 文件,就是继承父目录 web.config 文件的相关设定;如果子目录有 web.config 文件,就会覆盖父目录 web....

    web.config配置文件  

    Web 配置文件web.config位于 Web 应用程序的任何目录中,子目录如果没有 web.config 文件,就是继承父目录 web.config 文件的相关设定;如果子目录有 web.config 文件,就会覆盖父目录 web.config 文件的相关设定。Web 配置文件是一份 XML 文件,在 XML 标记的属性就是设定值,标记名称和属性值格式是字符串,第 1 个开头字母是小写,之后每一字头是大写,例如<appSettings>。Web 配置文件的范例如下所示。

    <configuration>

      <appSettings>

        <add key="dbType" value="Access Database"/>

      </appSettings>

     

      <connectionStrings>//2.0之後引進的。

        <add name="provider"

             connectionString="Microsoft.Jet.OLEDB.4.0;"/>

        <add name="database"

             connectionString="/Ch11/Products.mdb"/>

      </connectionStrings>

     

      <system.web>

        <sessionState cookieless="false" timeout="10"/>

        <globalization

           fileEncoding="gb2312"

           requestEncoding=" gb2312"

           responseEncoding=" gb2312"

           culture="zh-CN"/>

        <compilation defaultLanguage="VB" debug="true"/>

        <customErrors mode="RemoteOnly"/>

      </system.web>

    </configuration>

    上述 Web 配置文件的根标记是<configuration>,其子标 记<appSettings>、<connectionStrings>和<system.web>是各设定区段。 在<system.web>下的设定区段属于ASP.NET相关设定。常用设定区段标记说明如表11-9所示。

    表11-9  常用设定区段标记

    设 定 区 段

    说    明

    <anonymousIdentification>

    控制 Web 应用程序的匿名用户

    <authentication>

    设定 ASP.NET 验证方式,参阅第 13 章

    <authorization>

    设定 ASP.NET 用户授权,参阅第 13 章

    <browserCaps>

    设定浏览程序兼容组件 HttpBrowserCapabilities

    <compilation>

    设定 ASP.NET 应用程序的编译方式

    <customErrors>

    设定 ASP.NET 应用程序的自订错误处理

    <globalization>

    关于 ASP.NET 应用程序的全球化设定,也就是本地化设定

    <httpHandlers>

    设定 HTTP 处理是对应到 URL 请求的 IHttpHandler 类

    <httpModules>

    创建、删除或清除 ASP.NET 应用程序的 HTTP 模块

    <httpRuntime>

    ASP.NET 的 HTTP 执行期相关设定

    <identity>

    设定 ASP.NET 应用程序的用户识别是使用服务器端用户账号的权限(impersonate 属性),或指定的用户账号(userName 和 password 属性)

    <machineKey>

    设定在使用窗体基础验证的 Cookie 数据时,用来加码和解码的金钥值

    <membership>

    设定 ASP.NET 的 Membership 机制,参阅第 13 章

    <pages>

    设定 ASP.NET 程序的相关设定,即 Page 指引命令的属性

    <profile>

    设定个人化信息的 Porfile 对象,详细说明参阅第 14 章

    <roles>

    设定 ASP.NET 的角色管理,详细说明参阅第 13 章

    <sessionState>

    设定 ASP.NET 应用程序的 Session 状态 HttpModule

    (续表)  

    设 定 区 段

    说    明

    <siteMap>

    设定 ASP.NET 网站导览系统,详细说明参阅第 12 章

    <trace>

    ASP.NET 应用程序的除错功能,可以设定是否追踪应用程序的执行

    <webParts>

    设定ASP.NET应用程序的网页组件,详细说明参阅第18章

    <webServices>

    设定 ASP.NET 的 Web 服务,详细说明参阅第 18 章

    11.7.2  appSettingconnectionStrings区段的参数和连接字符串

    在 Web 配置文件的 <appSettings> 区段可以创建 ASP.NET 程序所需的参数,ASP.NET 2.0 新增 <connectionStrings> 区段,可以指定数据库连接字符串。

    1. Web配置文件web.config的内容

    在web.config文件<configuration>标记的子标记<appSettings> 和 <connectionStrings> 区段中,可以创建参数和数据库连接字符串,如下所示。

    <configuration>

      <appSettings>

        <add key="dbType" value="Access Database"/>

      </appSettings>

      <connectionStrings>

        <add name="provider"

             connectionString="Microsoft.Jet.OLEDB.4.0;"/>

        <add name="database"

             connectionString="/Ch11/Products.mdb"/>

      </connectionStrings>

      <system.web>

        ………

      </system.web>

    </configuration>

    上述 <appSettings> 标记的子标记是创建参数,每一个 <add> 标记可以创建一个参数,属性 key 是参数名称,value 是参数值。

    在 <connectionStrings> 标记的 <add> 子标记也可以创建连接字符串,属性 name 是名称,connectionString 属性是连接字符串内容。

    11.7.3  sessionState区段设定Session状态

    ASP.NET的Session状态管理拥有扩充性,可以在web.config文件的 <sessionState>区段设定Session状态管理,它属于<system.web>的子标记,如下所示。

    <configuration>

      <system.web>

          <sessionState cookieless="false" timeout="10"/>

        ………

      </system.web>

    </configuration>

    上述<sessionState>标记的常用属性如表11-10所示。

    表11-10  <sessionState> 标记的常用属性

    属    性

    说    明

    mode

    Session 状态存储的位置可以是 off(不存储)、InProc(使用Cookie)、StateServer(使用状态服务器)和 SqlServer(存储在 SQL Server)

    cookieless

    是否使用 Cookie 存储 Session 状态。True 为不使用,False 为使用

    timeout

    Session 时间的期限,以分钟计,默认值为20 分钟,其功能如同 Session 对象的 TimeOut 属性

    11.7.4  globalization区段的编码设定

    在<system.web>子标记的<globalization>区段是本地化相关设定,可以设定 ASP.NET 程序默认的文件编码、请求和响应的编码方式、日期时间格式和数字等本地化设定,如下所示。

    <configuration>

      <system.web>

        <globalization

           fileEncoding="gb2312"

           requestEncoding=" gb2312"

           responseEncoding=" gb2312"

           culture="zh-CN"/>

        ………

      </system.web>

    </configuration>

    上述标记属性设定编码方式gb2312,culture是本地化设定值,zh-CN为中国大陆。相关属性说明如表11-11所示。

    表11-11  globalization 区段的相关属性

    属    性

    说    明

     requestEncoding

    指定 Request 请求的编码方式,默认为UTF-8 编码,大多数情况 requestEncoding 和 responseEncoding 属性的编码应该相同

     responseEncoding

    指定 Response 响应的编码方式,默认为UTF-8 编码

     fileEncoding

    指定扩展名 .aspx、.asmx 和 .asax 文件默认的编码方式

     culture

    指定本地化的语系地区,不同的地区拥有不同的日期时间格式、数字等默认的本地化设定

    上表culture属性值可以使用语系和地区代码,以中文语系来说的 culture 属性值如表11-12所示。

    表11-12  culture 属性值可以使用语系和地区代码

    culture 属性值

    语系或地区

     zh-HK

    香港

     zh-MO

    澳门

     zh-CN

    中国大陆

     zh-SG

    新加坡

     zh-TW

    台湾

     zh-CHS

    中文简体

     zh-CHT

    中文繁体

    11.7.5  compilation区段的编译设定

    在 <system.web> 子标记的 <compilation> 区段,可以设定 ASP.NET 程序默认的编译方式,如下所示。

    <configuration>

      <system.web>

        <compilation defaultLanguage="VB" debug="true"/>

        ………

      </system.web>

    </configuration>

    上述标记属性设定默认程序语言和是否打开除错模式。相关属性说明如表11-13所示。

    表11-13  compilation区段的相关属性

    属    性

    说    明

    debug

    是否打开除错模式,默认为 False 不打开,True 为打开

    defaultLanguage

    默认的程序语言,例如C#、VB 或 PERL,默认值是 VB

    explicit

    Microsoft Visual Basic 是否使用 explicit 方式编译,也就是所有变量都需要事先声明,默认值是 True

    在 web.config 文件中使用 compilation 标记,如同 ASP.NET 程序文件开头加上 Page 命令的 Language 和 Debug 属性,如下所示。

    <%@ Page Language="VB" Debug="True" %>

    11.7.6  customErrors区段的自订错误网页

    在 <system.web> 子标记 <customErrors> 区段,可以设定 ASP.NET 程序的自订错误网页。例如错误代码 HTTP 404,如图11-13所示。

     

    图11-13  显示错误信息

    上述错误信息是默认错误网页,显示找不到网页数据错误。在 <customErrors> 区段可以指定错误网页,如下所示。

    <configuration>

      <system.web>

        <customErrors mode="On" defaultRedirect="Ch11-7error.htm"/>

        ………

      </system.web>

    </configuration>

    上述标记属性设定模式为 On。相关属性说明如表11-14所示。

    表11-14  customErrors区段的相关属性

    属    性

    说    明

    mode

    是否启动自订错误功能,On为启动自订错误处理,此时需要指定 defaultRedirect 属性,Off为取消自订错误处理,RemoteOnly 指定自订错误处理只显示在远程客户端,本地计算机仍然显示 ASP.NET 默认错误网页,此为默认值

    defaultRedirect

    指定 URL 网址,当错误产生时就转址到此网址的网页,此例是显示 Ch11-7error.htm 网页

    在 customErrors 区段拥有多个 error 子标记,每一个 error 标记可以定义 HTTP 错误代码的自订错误网页,如下所示。

    <configuration>

       <system.web>

          <customErrors mode="On"

                        defaultRedirect="Ch11-7error.htm">

             <error statusCode="404"

                   redirect="NotFoundError.htm"/>

          </customErrors>

       </system.web>

    </configuration>

    上述的 error 标记使用 statusCode 属性指定 HTTP 错误代码为 404,如果错误产生,就转址到 redirect 属性值的 NotFoun dError.htm 网页。

    11.8.2  ASP.NET 设定工具

    除了 Visual Web Developer 提供 Web 接口的 ASP.NET 网站管理工具外,如果计算机安装了IIS,在安装 .NET Framework 2.0后就会在 Internet Information Services 管理工具中创建ASP.NET 设定工具。

    启动 Internet Information Services 管理工具,在网站虚拟目录上右击,在弹出的快捷菜单中选择“属性”命令,打开属性对话框,如图11-15所示。

     

    图11-15  默认网站的属性对话框

    在ASP.NET选项卡中单击“编辑配置”按钮,可以看到“ASP.NET 配置设置”工具,如图11-16所示。

     

    图11-16  “ASP.NET配置设置”对话框

    在上图中各选项卡的功能如下所示。

    ●     常规:创建与编辑数据库连接字符串和应用程序参数。

    ●     自定义错误:设定自定义错误处理和自定义错误网页。

    ●     授权:创建与编辑验证规则。

    ●     身份验证:指定使用的认证方式和选择成员与角色提供者。

    ●     应用程序:设定与编辑 Web 应用程序的相关设定。

    ●     状态管理:设定 Web 应用程序的状态管理。

    ●     位置:指定特殊路径和子路径,是否需要拥有专用设定数据。

     

     

     

    一、认识Web.config文件

      Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的 Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个 Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。

      (一).Web.Config是以XML文件规范存储,配置文件分为以下格式

      1.配置节处理程序声明

      特点: 位于配置文件的顶部,包含在 <configSections> 标志中。

      2.特定应用程序配置

      特点: 位于 <appSetting> 中。 可以定义应用程序的全局常量设置等信息.

      3.配置节设置

      特点: 位于 <system.Web> 节中,控制Asp.net运行时的行为.

      4.配置节组

      特点: 用 <sectionGroup> 标记,可以自定义分组,可以放到 <configSections> 内部或其它 <sectionGroup> 标记的内部.

      (二).配置节的每一节

      1. <configuration> 节

      根元素,其它节都是在它的内部.

      2. <appSetting> 节

      此节用于定义应用程序设置项。对一些不确定设置,还可以让用户根据自己实际情况自己设置

      用法:

      I.

      <appSettings>

      <add key= "Conntction " value= "server=192.168.85.66;userid=sa;password=;database=Info; "/>

      <appSettings>

      定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.

      II. <appSettings>

      <add key= "ErrPage " value= "Error.aspx "/>

      <appSettings>

      定义了一个错误重定向页面.

      3. <compilation> 节

      格式:

      <compilation

      defaultLanguage= "c# "

      debug= "true "

      />

      I.default language: 定义后台代码语言,可以选择C#和VB.net两种语言.

      IIdebug : 为true时,启动aspx调试; 为false不启动aspx调试,因而可以提高应用程序运行

      时的性能。 一般程序员在开发时设置为true,交给客户时设置为false.

      4. <customErrors> 节

      格式:

      <customErrors

      mode= "RemoteOnly "

      defaultRedirect= "error.aspx "

      <error statusCode= "440 " redirect= "err440page.aspx "/>

      <error statusCode= "500 " redirect= "err500Page.aspx "/>

      />

      I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.

      II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的

      III.statusCode: 指明错误状态码,表明一种特定的出错状态.

      IV. redirect:错误重定向的URL.

      5. <globalization> 节

      格式:

      <globalization

      requestEncoding= "utf-8 "

      responseEncoding= "utf-8 "

      fileEncoding= "utf-8 "

      />

      I.requestEncoding: 它用来检查每一个发来请求的编码.

      II.responseEncoding: 用于检查发回的响应内容编码.

      III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.

      6. <sessionState> 节

      格式:

      <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: 用来定义会话状态存储的时间,超过期限,将自动终止会话.

      7. <authentication> 节

      格式:

      <authentication mode= "Forms ">

      <forms name= ".ASPXUSERDEMO " loginUrl= "Login.aspx " protection= "All " timeout= "30 "/>

      </authentication>

      <authorization>

      <deny users= "? "/>

      </authorization>

      I.Windows: 使用IIS验证方式

      II.Forms: 使用基于窗体的验证方式

      III.Passport: 采用Passport cookie验证模式

      IV.None: 不采用任何验证方式

      里面内嵌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的失效时间. 超时后要重新登录. 在运行时对Web.config文件的修改不需要重启服务就可以生效(注: <processModel> 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。

      web.config配置文件(默认的配置设置)以下所有的代码都应该位于

      <configuration>

      <system.web>

      和

      </system.web>

      </configuration>

      之间,出于学习的目的下面的示例都省略了这段XML标记。

      1、 <authentication> 节

      作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。 < authentication> 元素必需与 <authorization> 节配合使用。

      示例:

      以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。

      <authentication mode= "Forms " >

      <forms loginUrl= "logon.aspx " name= ".FormsAuthCookie "/>

      </authentication>

      其中元素loginUrl表示登陆网页的名称,name表示Cookie名称。

      2、 <authorization> 节

      作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与 <authentication> 节配合使用。

      示例:以下示例禁止匿名用户的访问

      <authorization>

      <deny users= "? "/>

      </authorization>

      注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的

      3、 <compilation> 节

      作用:配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为False(Web.config文件中有详细说明,此处省略示例)

      4、 <customErrors>

      作用:为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。

      示例:当发生错误时,将网页跳转到自定义的错误页面。

      <customErrors defaultRedirect= "ErrorPage.aspx " mode= "RemoteOnly ">

      </customErrors>

      其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示:对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。

      5、 <httpRuntime> 节

      作用:配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。

      示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100

      <httpRuntime maxRequestLength= "4096 " executionTimeout= "60 " appRequestQueueLimit= "100 "/>

      ConfigurationSettings.AppSettings[ "scon "]

     

     

     

    web.config文件是一个XML文件,它的根结点是<configuration>,在<configuration>节 点下的常见子节点 有:<configSections>、<appSettings>、<connectionStrings> 和<system.web>。其中<appSettings>节点主要用于配置一些网站的应用配置信息, 而<connectionStrings>节点主要用于配置网站的数据库连接字符串信息。


    <system.web>节点主要是网站运行时的一些配置,它的常见节点有如下:


    1.<appSettings>节点
    <appSettings>节点主要用来存储asp.net应用程序的一些配置信息

    2.<compilation>节点

    <compilation>节点配置 ASP.NET 使用的所有编译设置。默认的debug属性为“true”,即允许调试,在这种情况下会影响网站的性能,所以在程序编译完成交付使用之后应将其设为“false”。

    3.<authentication>节点

    设置asp.net身份验证模式,有四种身份验证模式,它们的值分别如下:
    Mode 说明
    Windows 使用Windows身份验证,适用于域用户或者局域网用户。
    Forms 使用表单验证,依靠网站开发人员进行身份验证。
    Passport 使用微软提供的身份验证服务进行身份验证。
    None 不进行任何身份验证。

    4.<customErrors>节点
    <customErrors>节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个 属性,其中defaultRedirect属性是一个可选属性,表示应用程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。 Mode属性是一个必选属性,它有三个可能值,它们所代表的意义分别如下:
    Mode 说明
    On 表示在本地和远程用户都会看到自定义错误信息。
    Off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
    RemoteOnly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。
    这里有必要说明一下本地用户和远程用户的概念。当我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成 为本地用户,反之则称之为远程用户。在开发调试阶段为了便于查找错误Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者 RemoteOnly,以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵。

     
    5.<error>子节点
    在<customErrors>节点下还包含有<error>子节点,这个节点主要是根据服务器的HTTP错误状态代码而重定向 到我们自定义的错误页面,注意要使<error>子节点下的配置生效,必须将<customErrors>节点节点的Mode属 性设置为“On”。下面是一个例子:

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
    <error statusCode="403" redirect="403.htm" />
    <error statusCode="404" redirect="404.htm" />
    </customErrors>
    在上面的配置中如果用户访问的页面不存在就会跳转到404.htm页面,如果用户没有权限访问请求的页面则会跳转到403.htm页面,403.htm和404.htm页面都是我们自己添加的页面,我们可以在页面中给出友好的错误提示。

    6.<httpHandlers>节点
    <httpHandlers>节点用于根据用户请求的URL和HTTP谓词将用户的请求交给相应的处理程序。可以在配置级别的 任何层次配置此节点,也就是说可以针对某个特定目录下指定的特殊文件进行特殊处理。下面是与machine.config文件同一目录下的 web.config文件中的<httpHandlers>节点配置: (大多数已略)

    <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>

    <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>
    <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>
    <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>

    从上面的配置中可以看出,针对*.config文件的Get或者Post请求都会交给 System.Web.HttpForbiddenHandler来处理,处理的结果就是用户不能查看或者下载相关的文件。如果我们某个文件夹下的文件或 者某个类型的文件不允许用户下载,可以在</httpHandlers>节点中增加相应的子节点。
    下面我们以一个例子来说明<httpHandlers>节点的用法,在我们的asp.net应用程序中建立一个IPData目录,在IPData目录中创建一个IPData.txt文件,然后在Web.config中添加以下配置:

    <httpHandlers>
    <add path="IPData/*.txt" verb="*" type="System.Web.HttpForbiddenHandler"/>
    </httpHandlers>
    上面的代码的作用是禁止访问IPData目录下的任何txt文件。


    7.<httpRuntime>节点
    <httpRuntime>节点用于对 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
    例如下面的配置控制用户最大能上传的文件为40M(40*1024K),最大超时时间为60秒,最大并发请求为100个。

    <httpRuntime maxRequestLength="40960" executionTimeout="60" appRequestQueueLimit="100"/>

    8.<pages>节点
    <pages>节点用于表示对特定页设置,主要有三个属性,分别如下:
    属性名 说明
    buffer 是否启用了 HTTP 响应缓冲。
    enableViewStateMac 是否应该对页的视图状态运行计算机身份验证检查 (MAC),以放置用户篡改,默认为false,如果设置为true将会引起性能的降低。
    validateRequest 是否验证用户输入中有跨站点脚本攻击和SQL注入式漏洞攻击,默认为true,如果出现匹配情况就会发 HttpRequestValidationException 异常。对于包含有在线文本编辑器页面一般自行验证用户输入而将此属性设为false。
    下面就是一个配置节点的例子:
    <pages buffer="true" enableViewStateMac="true" validateRequest="false"/>


    9.<sessionState>节点
    <sessionState>节点用于配置当前asp.net应用程序的会话状态配置。以下就是一个常见配置:
    <sessionState cookieless="false" mode="InProc" timeout="30" />
    上面的节点配置是设置在asp.net应用程序中启用Cookie,并且指定会话状态模式为在进程中保存会话状态,同时还指定了会话超时为30分钟。
    <sessionState>节点的Mode属性可以是以下几种值之一:
    属性值 说明
    Custom 使用自定义数据来存储会话状态数据。
    InProc 默认值。由asp.net辅助进程来存储会话状态数据。
    Off 禁用会话状态。
    SQLServer 使用进程外SQL Server数据库保存会话状态数据。
    StateServer 使用进程外 ASP.NET 状态服务存储状态信息。
    一般默认情况下使用InProc模式来存储会话状态数据,这种模式的好处是存取速度快,缺点是比较占用内存,所以不宜在这种模式下存储大型的用户会话数据。

    10.<globalization>节点:
    用于配置应用程序的全球化设置。此节点有几个比较重要的属性,分别如下:
    属性名 说明
    fileEncoding 可选属性。设置.aspx、.asmx 和 .asax 文件的存储编码。
    requestEncoding 可选属性。设置客户端请求的编码,默认为UTF-8.
    responseEncoding 可选属性。设置服务器端响应的编码,默认为UTF-8.
    以下就是asp.net应用程序中的默认配置:

    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/>

     

    一、认识Web.config文件
    Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的 Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个 Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
    (一).Web.Config是以xml文件规范存储,配置文件分为以下格式
    1.配置节处理程序声明
    特点:位于配置文件的顶部,包含在<configSections>标志中。
    2.特定应用程序配置
    特点: 位于<appSetting>中。可以定义应用程序的全局常量设置等信息.
    3.配置节设置
    特点: 位于<system.Web>节中,控制asp.net运行时的行为.
    4.配置节组
    特点: 用<sectionGroup>标记,可以自定义分组,可以放到<configSections>内部或其它<sectionGroup>标记的内部.
    (二).配置节的每一节
    1.<configuration>节根元素,其它节都是在它的内部.
    2.<appSetting>节此节用于定义应用程序设置项。对一些不确定设置,还可以让用户根据自己实际情况自己设置
    用法:
    I.<appSettings>
    <add key="Conntction" value="server=192.168.85.66;userid=sa;password=;database=Info;"/>
    <appSettings>
    定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.
    II.<appSettings>
    <add key="ErrPage" value="Error.aspx"/><appSettings> 定义了一个错误重定向页面.
    3.<compilation>节
    格式:
    <compilation
    defaultLanguage="c#"
    debug="true"
    />
    I.default language: 定义后台代码语言,可以选择c#和vb.net两种语言.
    IIdebug : 为true时,启动aspx调试;为false不启动aspx调试,因而可以提高应用程序运行时的性能。一般程序员在开发时设置为true,交给客户时设置为false.
    4.<customErrors>节
    格式:
    <customErrors
    mode="RemoteOnly"
    defaultRedirect="error.aspx"
    <error statusCode="440" redirect="err440page.aspx"/>
    <error statusCode="500" redirect="err500Page.aspx"/>
    />
    I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.
    II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的
    III.statusCode: 指明错误状态码,表明一种特定的出错状态.
    IV. redirect:错误重定向的URL.
    5.<globalization>节
    格式:
    <globalization
    requestEncoding="utf-8"
    responseEncoding="utf-8"
    fileEncoding="utf-8"
    />
    I.requestEncoding: 它用来检查每一个发来请求的编码.
    II.responseEncoding: 用于检查发回的响应内容编码.
    III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.
    6.<sessionState>节
    格式:
    <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几种状态
    mode = InProc 存储在进程中特点:具有最佳的性能,速度最快,但不能跨多台服务器存储共享.mode = "StateServer" 存储在状态服务器中特点:   当需要跨服务器维护用户会话信息时,使用此方法。但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢失. mode="SqlServer" 存储在sql server中特点:工作负载会变大,但信息不会丢失.
    II. stateConnectionString :指定asp.net应用程序存储远程会话状态的服务器名,默认为本机
    III.sqlConnectionString:当用会话状态数据库时,在这里设置连接字符串
    IV. Cookieless:设置为true时,表示不使用cookie会话状态来标识客户;否则,相反.
    V. TimeOut:用来定义会话状态存储的时间,超过期限,将自动终止会话.
    7.<authentication>节
    格式:
    <authentication mode="Forms">
    <forms name=".ASPXUSERDEMO" loginUrl="Login.aspx" protection="All" timeout="30"/>
    </authentication>
    <authorization>
    <deny users="?"/>
    </authorization>
    I.Windows: 使用IIS验证方式
    II.Forms: 使用基于窗体的验证方式
    III.Passport: 采用Passport cookie验证模式
    IV.None: 不采用任何验证方式
    里面内嵌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的失效时间. 超时后要重新登录.
    在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
    web.config配置文件(默认的配置设置)以下所有的代码都应该位于
    <configuration>
    <system.web>

    </system.web>
    </configuration>
    之间,出于学习的目的下面的示例都省略了这段xml标记。
    1、<authentication> 节
    作 用:配置 asp.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。< authentication> 元素必需与<authorization> 节配合使用。
    示例:
    以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。
    <authentication mode="Forms" >
    <forms loginUrl="logon.aspx" name=".FormsAuthCookie"/>
    </authentication>
    其中元素loginUrl表示登陆网页的名称,name表示Cookie名称。
    2、<authorization> 节
    作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与<authentication> 节配合使用。
    示例:以下示例禁止匿名用户的访问
    <authorization>
       <deny users="?"/>
    </authorization>
    注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的
    3、<compilation>节
    作用:配置 asp.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为False(Web.config文件中有详细说明,此处省略示例)
    4、<customErrors>
    作用:为 asp.NET 应用程序提供有关自定义错误信息的信息。它不适用于 xml Web services 中发生的错误。
    示例:当发生错误时,将网页跳转到自定义的错误页面。
    <customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly">
    </customErrors>
    其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示:对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。
    5、<httpRuntime>节
    作用:配置 asp.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
    示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100
    <httpRuntime maxRequestLength="4096" executionTimeout="60" appRequestQueueLimit="100"/>
    6、 <pages>
    作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序和子目录级别声明。
    示例:不检测用户在浏览器输入的内容中是否存在潜在的危险数据(注:该项默认是检测,如果你使用了不检测,一要对用户的输入进行编码或验证),在从客户端回发页时将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。(注:该项默认是不验证)
    <pages buffer="true" enableViewStateMac="true" validateRequest="false"/>
    7、<sessionState>
    作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。
    示例:
    <sessionState mode="InProc" cookieless="true" timeout="20"/>
    </sessionState>
    注:
    mode="InProc"表示:在本地储存会话状态(你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态)
    cookieless="true"表示:如果用户浏览器不支持Cookie时启用会话状态(默认为False)
    timeout="20"表示:会话可以处于空闲状态的分钟数
    8、<trace>
    作用:配置 asp.NET 跟踪服务,主要用来程序测试判断哪里出错。
    示例:以下为Web.config中的默认配置:
    <trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
    注:
    enabled="false"表示不启用跟踪;
    requestLimit="10"表示指定在服务器上存储的跟踪请求的数目
    pageOutput="false"表示只能通过跟踪实用工具访问跟踪输出;
    traceMode="SortByTime"表示以处理跟踪的顺序来显示跟踪信息
    localOnly="true" 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器
    自定义Web.config文件配置
    自定义Web.config文件配置节过程分为两步。
    1.在配置文件顶部 <configSections> 和 </configSections>标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。
    2.是在 <configSections> 区域之后为声明的节做实际的配置设置。
    示例:创建一个节存储数据库连接字符串
    <configuration>
      <configSections>
      <section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </configSections>
      <appSettings>
       <add key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/>
      </appSettings>
      <system.web>
       ......
      </system.web>
    </configuration>
    访问Web.config文件你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例:获取上面例子中建立的连接字符串。例如:
    protected static string Isdebug = ConfigurationSettings.AppSettings["debug"]
    二、web.config中的session配置详解
    打开某个应用程序的配置文件Web.config后,我们会发现以下这段:
    < sessionState
      mode="InProc"
      stateConnectionString="tcpip=127.0.0.1:42424"
      sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
      cookieless="false"
      timeout="20"
    />
      这一段就是配置应用程序是如何存储session信息的了。我们以下的各种操作主要是针对这一段配置展开。让我们先看看这一段配置中所包含的内容的意思。sessionState节点的语法是这样的:
    < sessionState mode="Off|InProc|StateServer|SQLServer"
                 cookieless="true|false"
                 timeout="number of minutes"
                 stateConnectionString="tcpip=server:port"
                 sqlConnectionString="sql connection string"
                 stateNetworkTimeout="number of seconds"
    />
    必须有的属性是:属性选项描述
    mode 设置将session信息存储到哪里
    Ø         Off 设置为不使用session功能,
    Ø         InProc 设置为将session存储在进程内,就是asp中的存储方式,这是默认值,
    Ø         StateServer 设置为将session存储在独立的状态服务中,
    Ø         SQLServer 设置将session存储在sql server中。
    可选的属性是:属性选项描述
    Ø         cookieless 设置客户端的session信息存储到哪里,
    Ø         ture 使用Cookieless模式,
    Ø         false 使用Cookie模式,这是默认值,
    Ø         timeout 设置经过多少分钟后服务器自动放弃session信息,默认为20分钟。
    stateConnectionString 设置将session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。
    sqlConnectionString 设置与sql server连接时的连接字符串。例如"data source= localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是 SQLServer时,这个属性是必需的。
    stateNetworkTimeout 设置当使用StateServer模式存储session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的tcp/IP连接的。默认值是10秒钟。
    asp.NET中客户端session状态的存储
       在我们上面的session模型简介中,大家可以发现session状态应该存储在两个地方,分别是客户端和服务器端。客户端只负责保存相应网站的 SessionID,而其他的session信息则保存在服务器端。在asp中,客户端的SessionID实际是以Cookie的形式存储的。如果用户 在浏览器的设置中选择了禁用Cookie,那末他也就无法享受session的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在 asp.NET中客户端的session信息存储方式分为:Cookie和Cookieless两种。
      asp.NET中,默认状态下,在客户端还是使用Cookie存储session信息的。如果我们想在客户端使用Cookieless的方式存储session信息的方法如下:
      找到当前Web应用程序的根目录,打开Web.Config文件,找到如下段落:
    < sessionState
      mode="InProc"
      stateConnectionString="tcpip=127.0.0.1:42424"
      sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
      cookieless="false"
      timeout="20"
    />
       这段话中的cookieless="false"改为:cookieless="true",这样,客户端的session信息就不再使用 Cookie存储了,而是将其通过URL存储。关闭当前的IE,打开一个新IE,重新访问刚才的Web应用程序,就会看到类似下面的样子:
    其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245) /default.aspx中黑体标出的就是客户端的session ID。注意,这段信息是由IIS自动加上的,不会影响以前正常的连接。
    asp.NET中服务器端session状态的存储准备工作:
      为了您能更好的体验到实验现象,您可以建立一个叫做SessionState.aspx的页面,然后把以下这些代码添加到< body>< /body>中。
    < scriptrunat="server">
    Sub Session_Add(sender As Object, e As EventArgs)
      session("MySession") = text1.Value
      span1.InnerHtml = "Session data updated! < P>Your session contains: < font color=red>" & session("MySession"). ToString() & "< /font>"
    End Sub
    Sub CheckSession(sender As Object, eAs EventArgs)
      If (Session("MySession")Is Nothing) Then
        span1.InnerHtml = "NOTHING, session DATA LOST!"
      Else
         span1.InnerHtml = "Your session contains: < font color= red>" & session("MySession").ToString() & "<   /font>"
    End If
    End Sub
    < /script>
    < formrunat="server"id="Form2">
      < inputid="text1"type="text"runat="server"name="text1">
      < inputtype="submit"runat="server"OnServerClick="Session_Add"
          value="Add to session State " id="Submit1"name="Submit1">
      < inputtype="submit"runat="server"OnServerClick="CheckSession"
          value=" View session State " id="Submit2"name="Submit2">
    < /form>
    < hrsize="1">
    < fontsize="6">< spanid="span1"runat="server" />< /font>
      这个SessionState.aspx的页面可以用来测试在当前的服务器上是否丢失了session信息。
    将服务器session信息存储在进程中
      让我们来回到Web.config文件的刚才那段段落中:
    < sessionState
      mode="InProc"
      stateConnectionString="tcpip=127.0.0.1:42424"
      sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
      cookieless="false"
      timeout="20"
    />
      当mode的值是InProc时,说明服务器正在使用这种模式。
       这种方式和以前asp中的模式一样,就是服务器将session信息存储在IIS进程中。当IIS关闭、重起后,这些信息都会丢失。但是这种模式也有自 己最大好处,就是性能最高。应为所有的session信息都存储在了IIS的进程中,所以IIS能够很快的访问到这些信息,这种模式的性能比进程外存储 session信息或是在sql server中存储session信息都要快上很多。这种模式也是asp.NET的默认方式。
      好了,现在让 我们做个试验。打开刚才的SessionState.aspx页面,随便输入一些字符,使其存储在session中。然后,让我们让IIS重起。注意,并 不是使当前的站点停止再开始,而是在IIS中本机的机器名的节点上点击鼠标右键,选择重新启动IIS。(想当初使用NT4时,重新启动IIS必须要重新启 动计算机才行,微软真是@#$%^&)返回到SessionState.aspx页面中,检查刚才的session信息,发现信息已经丢失了。
    将服务器session信息存储在进程外
       首先,让我们来打开管理工具->服务,找到名为:asp.NET State Service的服务,启动它。实际上,这个服务就是启动一个要保存session信息的进程。启动这个服务后,你可以从Windows任务管理器 ->进程中看到一个名为 aspnet_state.exe的进程,这个就是我们保存session信息的进程。
      然后,回到 Web.config文件中上述的段落中,将mode的值改为StateServer。保存文件后的重新打开一个IE,打开 SessionState.aspx页面,保存一些信息到session中。这时,让我们重起IIS,再回到SessionState.aspx页面中查 看刚才的session信息,发现没有丢失。
      实际上,这种将session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可 以将session信息存储在其他的服务器的进程中。这时,不光需要将mode的值改为StateServer,还需要在 stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1,你想把session存储在ip为 192.168.0.2的计算机的进程中,就需要设置成这样: stateConnectionString="tcpip=192.168.0.2:42424"。当然,不要忘记在192.168.0.2的计算机中 装上.NET Framework,并且启动asp.NET State Services服务。
    将服务器session信息存储在sql server中
       首先,还是让我们来做一些准备工作。启动sql server和sql server代理服务。在sql server中执行一个叫做 InstallSqlState.sql的脚本文件。这个脚本文件将在sql server中创建一个用来专门存储session信息的数据库,及一个维护session信息数据库的sql server代理作业。我们可以在以下路径中找到那个文件:
    [system drive]\winnt\Microsoft.NET\Framework\[version]\
       然后打开查询分析器,连接到sql server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的 数据库。但是这个数据库中只是些存储过程,没有用户表。实际上session信息是存储在了tempdb 数据库的ASPStateTempSessions表中的,另外一个ASPStateTempApplications表存储了asp中 application对象信息。这两个表也是刚才的那个脚本建立的。另外查看管理->SQL server代理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是 每分钟去ASPStateTempSessions 表中删除过期的session信息的。
      接着,我们返回到Web.config文件,修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:
    sqlConnectionString="data source=localhost; Integrated Security=SSPI;"
       其中data source是指sql server服务器的ip地址,如果sql server与IIS是一台机子,写127.0.0.1 就行了。Integrated Security=SSPI的意思是使用Windows集成身份验证,这样,访问数据库将以asp.NET的身份进行,通过如此配置,能够获得比使用 userid=sa;password=口令的sql server验证方式更好的安全性。当然,如果sql server运行于另一台计算机上,你可能会需要通过Active Directory域的方式来维护两边验证的一致性。
      同样,让我们做个试 验。向SessionState.aspx中添加session信息,这时发现session信息已经存在 sql server中了,即使你重起计算机,刚才的session信息也不会丢失。现在,你已经完全看见了session信息到底是什么样子的了,而且又是存储 在sql server中的,能干什么就看你的发挥了。

    总结
    三、asp.net 关于form认证的一般设置
    asp.net 关于form认证的一般设置:
    1: 在web.config中,加入form认证;
       <authentication mode="Forms">
                <forms name="auth" loginUrl="index.aspx" timeout="30"></forms>
    </authentication>
    <authorization>
            <deny users="?" />
    </authorization>
    2: 如果有注册页面时还应该允许匿名用户调用注册页面进行注册;
    以下代码应该在<configuration><system.web>之间,而不应该包含到<system.web>..</system.web>之间;
    ----------------表示允许匿名用户对 userReg.aspx页面进行访问.
    <location path="userReg.aspx">
    <system.web>
         <authorization>
             <allow users="?" />
         </authorization>
    </system.web>
    </location>
    3 在登录成功后要创建身份验证票, 表明已经通过认证的合法用户;
    if(登陆成功)
    System.Web.Security.FormsAuthentication.SetAuthCookie(用户名称, false);
      四、访问Web.config文件
      你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例:获取上面例子中建立的连接字符串。例如:
    protected static string Isdebug = ConfigurationSettings.AppSettings["scon"]
    asp.Net性能优化.
    (一).选择会话状态存储方式
        在Webconfig文件配置:
        <sessionState mode="???" stateConnectionString="tcpip=127.0.0.1:42424"
             sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
          cookieless="false" timeout="20"/>
         
        asp.net有三种方式存储会话状态信息:
        1. 存储在进程中: 属性mode = InProc
           特点: 具有最佳的性能,速度最快,但不能跨多台服务器存储共享.

        2. 存储在状态服务器中: 属性mode = "StateServer"
           特点:   当需要跨服务器维护用户会话信息时,使用此方法。
                   但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢失
       
        3. 存储在sql server中: 属性mode="SqlServer"
           特点:   工作负载会变大,但信息不会丢失.
        补充一点:
           I. 由于某些页面不需要会话状态,则可以将会话状态禁用:
                 代码如下: <%@ Page EnableSessionState="false" %>
           II.如果页面需要访问会话变量但不允许修改它们,可以设置页面会话状态为只读:
                 代码如下: <%@ Page EnableSessionState="false" %>
        使用时可以根据具体情况选择某种方式
    (二).使用Page.IsPostBack
        Page.IsPostBack表示是否是从客户端返回的. 初次运行时,不是从客户端返回,它的值
        为false,当触发页面上的事件或刷新页面时,Page.IsPostBack由于是回发的,值变为true;
        一般在: Page_Load方法中用:
        private void Page_Load(Object sender,EventArgs e)
        {
            if(!Page.IsPostBack)
            {
                 ....; //初始化页面的代码。这些代码第一次页面初始化时执行,当第二次回发时,
                        //不会再执行。提高效率。
            }
        }
        往往很多时候不得不用IsPostBack, 因为有些控件初始化后,要保持它的状态.
        例如: DropDownList,如果每次都初始化,则用户无论选择其选项,都会被初始化为默认值.
    (三).避免使用服务器控件
        1.一般的静态显示信息,尽量不要用服务端控件显示. 因为服务端控件需要回发服务端执行,
          会降低程序执行效率,一般用<DIV>显示即可.
          如果用了服务端控件,将: runat="server"去掉,也会提高效率.
        2.禁用服务端控件的状态视图,有些控件不需要维护其状态,可以设置其属性: EnableViewState=false;
          如果整个页面控件都不需要维持状态视图,则可以设置整个页面的状态视力为false:
             代码如下: <%@ Page EnableViewState="false"%>
        3.在Web.Config文件中配置:
              asp.NET Sessionss可以在Web.config或Machine.config中的Sessionsstate元素中配置。
              下面是在 Web.config中的设置的例子:
                <Sessionsstate timeout="10" cookieless="false" mode="Inproc" />
    (四).避免使用DataGrid
        大家都知道DataGrid功能强大。但是功能强大的同时,增加了性能上的开销。一般用其它控件: DataList
        或Repeater控件能实现的,尽量不用DataGrid.
    (五).字符串操作
        1.避免装箱操作. 装箱操作运行效率比较低.
          例如运行两个代码段:  
            string test="";
             for(for int i=0;i<10000;i++)
             {
                 test = test + i;            
             }
             和
                      string test="";
             for(for int i=0;i<10000;i++)
             {
                 test = test + i.ToString();            
             }
           下面的代码段显然效率要高.因为i是整型的,系统要先把i进行装箱转换为string型的,再进行连接. 需要时间
           读者可以Copy到自己机器上测试一下.
         2.使用StringBulider类
           在进行字符串连接时: string str = str1 + str2 + ....;
           一般超过三项连接,最好用StringBuilder来代替string类. StringBuilder可以避免重新创建string 对象造成
           的性能损失.
           一般用于组装sql语句时用到: StringBulider.
           读者可以到自己机器上测试一下.
    3.尽量少用:
            try
            {}
            catch
            {}
            finally
            {}
            语句.此语句执行效率比较低.
    (六).ADO.Net使用方面优化
         1.数据库连接打开和关闭。 在需要连接时打开,当访问完数据库要立刻关闭连接.
           举例说明,还是看两个代码段:
          I.
               DataSet ds = new DataSet();
               SqlConnection MyConnection = new SqlConnection("server=localhost; uid=sa; pwd=; database=NorthWind");
               SqlCommand myCommand = new SqlCommand(strSql,MyConnection);  
               SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
            MyConnection.Open();      //打开连接
            for(int i=0;i<1000;i++)   //for循环模拟取得数据前的商业逻辑操作
             {
                Thread.Sleep(1000);
           }
           myAdapter.Fill(ds);
            for(int i=0;i<1000;i++)   //for循环模拟取得数据后的商业逻辑操作
            {
               Thread.Sleep(1000);
            }
            MyConnection.Close();     //关闭连接
            II.
               DataSet ds = new DataSet();
               SqlConnection MyConnection = new SqlConnection("server=localhost; uid=sa; pwd=; database=NorthWind");
               SqlCommand myCommand = new SqlCommand(strSql,MyConnection);  
               SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);       
             for(int i=0;i<1000;i++)   //for循环模拟取得数据前的商业逻辑操作
             {
                Thread.Sleep(1000);
           }
           MyConnection.Open();      //打开连接
               myAdapter.Fill(ds);
              MyConnection.Close();     //关闭连接
            for(int i=0;i<1000;i++)   for循环模拟取得数据后的商业逻辑操作
            {
               Thread.Sleep(1000);
            }
             显示II代码比I代码好的多,I中早早占着连接不放,如果用户很多的话,容易出现连接池满情况。严重时出现死机现象.
           2.数据库查询
              I. 直接生成sql语句。 sql server每次都要对其进行编译,在性能方面不会有很大的提高。另外也不够安全。容易被攻击.
              II. 使用带参数的sql命令。这种方式sql server只对其编译一次,对于不同的参数可以重复使用编译后的命令。提高了性能.
              III.使用sql server存储过程. 编译一次. 具有独立性,便于修改和维护. 一次能完成用语句发送多次的功能.减少了网络的
                  流量。 并不一定存储过程一定比语句效率要高,如果商业逻辑很复杂的话,有时候用语句比存储过程效率要高.
    (六).缓存优化
         缓存分为两种:页面缓存和API缓存.
        1.使用页面缓存和片段缓存
            <%@ OutputCache Duration="5" VaryByParam="None"%>
            <%@ OutputCache Duration=60 VaryByParam=”TextBox1,TextBox2” %>
          说明: Duration是设置Cache的过期时间;
              VarByParam是设置是否根据参数而变化,None时所有参数使用同一Cache,
              设置TextBox1时则根据TextBox1的不同值分别缓存;当有多个参数时则要组合缓存;
        2.API缓存。用于在应用程序中使用
           I. 一个Cache使用的例子:
               http://blog.csdn.net/chengking/archive/2005/10/03/494545.aspx
           II.使用时注意Page.Cache和HttpContext.Current.Cache区别:
              它们指的同一个对象,在Page里,用Page.Cache,如果在global.asax或自己的类里 用:HttpContext.Current.Cache 在有些事件中,由于其没有HttpContext,就用HttpRuntime.Cache.

     

     

    在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我们开发时的环境与部署环境可能不一致(比如数据库不一样),如 果在代码中保存这些配置这些信息部署时需要到用户那里更改代码再重新编译,这种部署方式非常麻烦。在.net中提供了一种便捷的保存项目配置信息的办法, 那就是利用配置文件,配置文件的文件后缀一般是.config,在asp.net中配置文件名一般默认是web.config。每个web.config 文件都是基于XML的文本文件,并且可以保存到Web应用程序中的任何目录中。在发布Web应用程序时web.config文件并不编译进dll文件中。 如果将来客户端发生了变化,仅仅需要用记事本打开web.config文件编辑相关设置就可以重新正常使用,非常方便。

        本篇要讲述的知识如下:
    配置文件的查找优先级
    配置文件节点说明
    配置文件的操作

    配置文件的查找优先级

        在.net提供了一个针对当前机器的配置文件,这个文件是machine.config,它位于%windir%\Microsoft.NET \Framework\v2.0.50727\CONFIG\文件下(%windir%是系统分区下的系统目录,在命令行模式下输入%windir%然后 回车就能查看当前机器的系统目录,在Windows2003及WindowsXP中%windir%是系统分区下的windows目录,在 Windows2000中%windir%是系统分区下的WinNT目录,在笔者机器上这个系统目录是C:\WINDOWS)。这个文件里面定义了针对当 前机器的WinForm程序和asp.net应用程序的配置。下面是machine.config文件的内容:

     

    在这个文件夹下还有一个web.config文件,这个文件包含了asp.net网站的常用配置。下面是这个web.config文件的内容:

     

        asp.net网站IIS启动的时候会加载配置文件中的配置信息,然后缓存这些信息,这样就不必每次去读取配置信息。在运行过程中asp.net应用程序会监视配置文件的变化情况,一旦编辑了这些配置信息,就会重新读取这些配置信息并缓存。
    当我们要读取某个节点或者节点组信息时,是按照如下方式搜索的:
        (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找。
        (2)如果当前页面所在目录下不存在web.config文件或者web.config文件中不存在该结点名,则查找它的上级目录,直到网站的根目录。
        (3)如果网站根目录下不存在web.config文件或者web.config文件中不存在该节点名则在%windir%\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应用程序的重启。

        配置文件节点说明
    web.config 文件是一个XML文件,它的根结点是<configuration>,在<configuration>节点下的常见子节点 有:<configSections>、<appSettings>、<connectionStrings> 和<system.web>。     其中<appSettings>节点主要用于配置一些网站的应用配置信息,而<connectionStrings>节点主要用 于配置网站的数据库连接字符串信息。
    <system.web>节点主要是网站运行时的一些配置,它的常见节点有如下:
        <appSettings>节点
    <appSettings>节点主要用来存储asp.net应用程序的一些配置信息,比如上传文件的保存路径等,以下是一个例子:

    <appSettings>
        <!--允许上传的图片格式类型-->
        <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>节点
    <connectionStrings> 节点主要用于配置数据库连接的,我们可以<connectionStrings>节点中增加任意个节点来保存数据库连接字符串,将来在代码中 通过代码的方式动态获取节点的值来实例化数据库连接对象,这样一旦部署的时候数据库连接信息发生变化我们仅需要更改此处的配置即可,而不必因为数据库连接 信息的变化而需要改动程序代码和重新部署。
        以下就是一个<connectionStrings>节点配置的例子:

    <connectionStrings>
        <!--SQL Server数据库配置-->
        <add name="AspNetStudyConnectionString1" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;User ID=sa;Password=sa"/>
    </connectionStrings>

        在代码中我们可以这么实例化数据库连接对象:

    //读取web.config节点配置    
    string connectionString = ConfigurationManager.ConnectionStrings["AspNetStudyConnectionString1"].ConnectionString;
    //实例化SqlConnection对象    
    SqlConnection connection = new SqlConnection(connectionString);

        这样做的好处是一旦开发时所用的数据库和部署时的数据库不一致,仅仅需要用记事本之类的文本编辑工具编辑connectionString属性的值就行了。

        <compilation>节点
    <compilation>节点配置 ASP.NET 使用的所有编译设置。默认的debug属性为“true”,即允许调试,在这种情况下会影响网站的性能,所以在程序编译完成交付使用之后应将其设为“false”。

    <authentication>节点设置asp.net身份验证模式,有四种身份验证模式,它们的值分别如下:
    Mode 说明
    Windows 使用Windows身份验证,适用于域用户或者局域网用户。
    Forms 使用表单验证,依靠网站开发人员进行身份验证。
    Passport 使用微软提供的身份验证服务进行身份验证。
    None 不进行任何身份验证。

        <authentication>节点
    <authentication>节点控制用户对网站、目录或者单独页的访问,必须配合<authentication>节点一起使用。

        <customErrors>节点
    <customErrors> 节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选 属性,表示应用程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。Mode属性是一个必选属性,它有三个可能值,它们所代表的意 义分别如下:
    Mode 说明
    On 表示在本地和远程用户都会看到自定义错误信息。
    Off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
    RemoteOnly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。
        这里有必要说明一下本地用户和远程用户的概念。当我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成 为本地用户,反之则称之为远程用户。在开发调试阶段为了便于查找错误Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者 RemoteOnly,以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵。
        下面我们添加一个页面CustomErrorsDemo.aspx,在它的Page_Load事件里抛出一个异常,代码如下:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    public partial class CustomErrorsDemo : System.Web.UI.Page
    {
    void Page_Load() void Page_Load(object sender, EventArgs e)
        {
        throw new Exception("故意抛出的异常。");
        }
    }


    我们先配置<customErrors>如下:

    <customErrors mode="RemoteOnly">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>

    这时本地运行CustomErrorsDemo.aspx的效果如下:

    远程访问时看到的效果:

     

    如果我们将customErrors的Mode属性设置为“On”本地运行和远程访问都会看到如下效果:

     

    如果将customErrors的Mode属性设置为“Off”本地运行和远程访问都会看到如下效果:

     

    <error>子节点
        在<customErrors>节点下还包含有<error>子节点,这个节点主要是根据服务器的HTTP错误状态代码而重定向 到我们自定义的错误页面,注意要使<error>子节点下的配置生效,必须将<customErrors>节点节点的Mode属 性设置为“On”。下面是一个例子:

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="403.htm" />
        <error statusCode="404" redirect="404.htm" />
    </customErrors>

        在上面的配置中如果用户访问的页面不存在就会跳转到404.htm页面,如果用户没有权限访问请求的页面则会跳转到403.htm页面,403.htm和404.htm页面都是我们自己添加的页面,我们可以在页面中给出友好的错误提示。

        <httpHandlers>节点
    <httpHandlers>节点用于根据用户请求的URL和HTTP谓词将用户的请求交给相应的处理程序。可以在配置级别的任何层次配置此节点,也就是说可以针对某个特定目录下指定的特殊文件进行特殊处理。

    下面是与machine.config文件同一目录下的web.config文件中的<httpHandlers>节点配置:

    <httpHandlers>
        <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
        <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="true"/>
        <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/>
        <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="true"/>
        <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
        <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="true"/>
        <add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
        <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
        <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
        <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>
        <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>
        <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
        <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
        <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>
        <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="true"/>
        </httpHandlers>


            从上面的配置中可以看出,针对*.mdf、*.ldf文件的Get或者Post请求都会交给 System.Web.HttpForbiddenHandler来处理,处理的结果就是用户不能查看或者下载相关的文件。如果我们某个文件夹下的文件或 者某个类型的文件不允许用户下载,可以在</httpHandlers>节点中增加相应的子节点。
            下面我们以一个例子来说明<httpHandlers>节点的用法,在我们的asp.net应用程序中建立一个IPData目录,在IPData目录中创建一个IPData.txt文件,然后在Web.config中添加以下配置:

    <httpHandlers>
        <add path="IPData/*.txt" verb="*" type="System.Web.HttpForbiddenHandler"/>
    </httpHandlers>


            上面的代码的作用是禁止访问IPData目录下的任何txt文件。
    然后新建一个页面,在页面中添加一个超级链接,链接到该目录下IPData.txt文件,代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="HttpHandlersDemo.aspx.cs" Inherits="HttpHandlersDemo" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>httpHandlers节点的例子</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <a href="IPData/IPData.txt" title="打开IPData/IPData.txt">打开IPData/IPData.txt</a>
        </div>
        </form>
    </body>
    </html>

    运行这个页面的效果如下:

    当前web.config文件的<customErrors>节点配置如下:

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="403.htm" />
        <error statusCode="404" redirect="404.htm" />
    </customErrors>

    如果存在403.htm和404.htm页面,点击超级链接之后会出现如下效果:

    我们从上图中可以看到当<customErrors>节点的Mode属性为“On”时,因为被禁止访问IPData文件夹下的所有txt文件,所以会跳转到自定义的没有权限提示页面,即403.htm。

            <httpRuntime>节点
    <httpRuntime>节点用于对 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
    例如下面的配置控制用户最大能上传的文件为40M(40*1024K),最大超时时间为60秒,最大并发请求为100个。
    <httpRuntime maxRequestLength="40960" executionTimeout="60" appRequestQueueLimit="100"/>

            <pages>节点
    <pages>节点用于表示对特定页设置,主要有三个属性,分别如下:
    属性名 说明
    buffer 是否启用了 HTTP 响应缓冲。
    enableViewStateMac 是否应该对页的视图状态运行计算机身份验证检查 (MAC),以放置用户篡改,默认为false,如果设置为true将会引起性能的降低。
    validateRequest 是否验证用户输入中有跨站点脚本攻击和SQL注入式漏洞攻击,默认为true,如果出现匹配情况就会发 HttpRequestValidationException 异常。对于包含有在线文本编辑器页面一般自行验证用户输入而将此属性设为false。
    下面就是一个配置节点的例子:
    <pages buffer="true" enableViewStateMac="true" validateRequest="false"/>

            <sessionState>节点
    <sessionState>节点用于配置当前asp.net应用程序的会话状态配置。以下就是一个常见配置:
    <sessionState cookieless="false" mode="InProc" timeout="30" />

            上面的节点配置是设置在asp.net应用程序中启用Cookie,并且指定会话状态模式为在进程中保存会话状态,同时还指定了会话超时为30分钟。
    <sessionState>节点的Mode属性可以是以下几种值之一:
    属性值 说明
    Custom 使用自定义数据来存储会话状态数据。
    InProc 默认值。由asp.net辅助进程来存储会话状态数据。
    Off 禁用会话状态。
    SQLServer 使用进程外SQL Server数据库保存会话状态数据。
    StateServer 使用进程外 ASP.NET 状态服务存储状态信息。
            一般默认情况下使用InProc模式来存储会话状态数据,这种模式的好处是存取速度快,缺点是比较占用内存,所以不宜在这种模式下存储大型的用户会话数据。

            <globalization>节点:
    用于配置应用程序的全球化设置。此节点有几个比较重要的属性,分别如下:
    属性名 说明
    fileEncoding 可选属性。设置.aspx、.asmx 和 .asax 文件的存储编码。
    requestEncoding 可选属性。设置客户端请求的编码,默认为UTF-8.
    responseEncoding 可选属性。设置服务器端响应的编码,默认为UTF-8.
    以下就是asp.net应用程序中的默认配置:
    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/>

            配置文件的读写操作
    虽然web.config文件是一个XML文件,但是由于权限的原因它在部署中不能像操作普通XML文件那样进行修改,在.net中提供了一个类用于对web.config进行修改。
    下面是针对web.config修改通用类的代码:

    using System;
    using System.Configuration;
    using System.Web;
    using System.Web.Configuration;
    /// <summary>    
    /// ConfigurationOperator 的摘要说明    
    /// </summary>    
    public class ConfigurationOperator:IDisposable
    {
        private Configuration config;
    ConfigurationOperator() ConfigurationOperator():this(HttpContext.Current.Request.ApplicationPath)
    {
            
    }
    ConfigurationOperator() ConfigurationOperator(string path)
        {
        config = WebConfigurationManager.OpenWebConfiguration(path);
        }
        /// <summary>    
        /// 设置应用程序配置节点,如果已经存在此节点,则会修改该节点的值,否则添加此节点    
        /// </summary>    
        /// <param name="key">节点名称</param>    
        /// <param name="value">节点值</param>    
    void SetAppSetting() void SetAppSetting(string key, string value)
        {
        AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
        if (appSetting.Settings[key] == null)//如果不存在此节点,则添加    
        {
        appSetting.Settings.Add(key, value);
        }
        else//如果存在此节点,则修改    
        {
        appSetting.Settings[key].Value = value;
        }
        }
        /// <summary>    
        /// 设置数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值,存在则修改    
        /// </summary>    
        /// <param name="key">节点名称</param>    
        /// <param name="value">节点值</param>    
    void SetConnectionString() void SetConnectionString(string key, string connectionString)
        {
        ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
        if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加    
        {
        ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
        connectionSetting.ConnectionStrings.Add(connectionStringSettings);
        }
        else//如果存在此节点,则修改    
        {
        connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
        }
        }
        /// <summary>    
        /// 保存所作的修改    
        /// </summary>    
    void Save() void Save()
        {
        config.Save();
        config = null;
        }
    void Dispose() void Dispose()
        {
        if (config != null)
        {
        config.Save();
        }
        }
    }


    把上面的代码存放到App_Code文件夹下,我们在项目中就可以直接使用了。
    我们通过一个例子演示如果使用这个通用类对web.config进行设置。新建一个aspx页面,下面是前台代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConfigModifyDemo.aspx.cs" Inherits="ConfigModifyDemo" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>在部署后修改web.config的例子</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <table border="0" cellpadding="0" cellspacing="0">
        <tr><td>类型</td><td>名称</td><td>值</td></tr>
        <tr><td>
        程序配置</td><td>
        <asp:TextBox ID="txtKey" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtKey"
        ErrorMessage="*" Display="Dynamic"></asp:RequiredFieldValidator></td><td>
        <asp:TextBox ID="txtAppSetting" runat="server"></asp:TextBox></td></tr>
        <tr><td>
        数据库连接</td><td>
        <asp:TextBox ID="txtConnectionName" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="*" ControlToValidate="txtConnectionName" Display="Dynamic"></asp:RequiredFieldValidator></td><td style="height: 24px">
        <asp:TextBox ID="txtConnectionString" runat="server"></asp:TextBox></td></tr>
        <tr><td>
        <asp:Button ID="btnModify" runat="server" OnClick="btnModify_Click" Text="修改" /></td><td></td><td></td></tr>
        </table>
        </div>
        </form>
    </body>
    </html>

    编写后台代码有时可能需要增加对配置文件读写操作类所在dll的引用,如下:


    下面是后台代码:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Web.Configuration;//注意添加这个命名空间    
    public partial class ConfigModifyDemo : System.Web.UI.Page
    {
    void Page_Load() void Page_Load(object sender, EventArgs e)
        {
        }
    void btnModify_Click() void btnModify_Click(object sender, EventArgs e)
        {
        string appSetting = txtAppSetting.Text;//appSetting子节点值    
        string connectionString = txtConnectionString.Text;//连接字符串    
        string key = txtKey.Text;//appSetting子节点Key    
        string connectionName = txtConnectionName.Text;//连接Name    
        ConfigurationOperator op = new ConfigurationOperator();
        op.SetAppSetting(key, appSetting);
        op.SetConnectionString(connectionName, connectionString);
        op.Save();
        }
            
    }


    下面是运行界面:

    我们在上面的表单中填入如下信息:

     

    假设此时web.config文件相关节点的内容如下:

    <appSettings>
        </appSettings>
        <connectionStrings>
            <add name="Conn" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa" />
        </connectionStrings>

    我们点击“修改”按钮之后的文件内容如下:

    <appSettings>
            <add key="country" value="china" />
        </appSettings>
        <connectionStrings>
            <add name="Conn" connectionString="Data Source=(local);Initial Catalog=Study;User ID=sa;Password=sa"
                providerName="System.Data.SqlClient" />
        </connectionStrings>

            从执行结果可以看出我们的程序确实能做到修改和添加web.config中的节点的功能。需要注意的是,在利用了某些版本控制软件之后(如 Microsoft Visual SourceSafe),版本控制软件可能会将web.config设置为只读属性,就会出现不能设置的情况,我们需要手动将web.config的只读 属性去掉才能设置web.config文件。在实际部署项目的时候就不会存在这个问题。

            总结:web.config是asp.net应用程序中一个很重要的配置文件,通过web.config文件可以方便我们进行开发和部署asp.net应 用程序。此外还能对程序进行一些灵活的控制。在本篇中详细讲述了各节点的作用。因为在部署asp.net应用程序后因为权限原因不能按照XML方式进行修 改web.config文件,所以在本篇中还提供了一个针对<appSettings>节点 和<connectionStrings>节点设置的通用类,读者朋友可以根据实际项目需要对这个通用类进行完善和补充。

     

    花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法。很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点。所以这里只介绍一些比较常用的节点。

    <?xml version="1.0"?>

    <!--注意: 除了手动编辑此文件以外,您还可以使用 Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的“网站”->“Asp.Net 配置”选项。

    设置和注释的完整列表在 machine.config.comments 中,该文件通常位于 "Windows"Microsoft.Net"Framework"v2.x"Config 中。-->

     <!--Webconfig文件是一个xml文件,configuration是xml文件的根节点,由于xml文件的根节点只能有一个,所以Webconfig的所有配置都是在这个节点内进行的。-->

    <configuration>

      <!--指定配置节和命名空间声明。clear:移除对继承的节和节组的所有引用,只允许由当前 section 和 sectionGroup 元素添加的节和节组。remove:移除对继承的节和节组的引用。

     section:定义配置节处理程序与配置元素之间的关联。sectionGroup:定义配置节处理程序与配置节之间的关联。-->

     <configSections>

        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">

          <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">

            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>

          </sectionGroup>

        </sectionGroup>

        <section name="rewriter" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />

     </configSections>

     

     <!--appSettings是应用程序设置,可以定义应用程序的全局常量设置等信息-->

         <appSettings>

     <add key="1" value="1" />

     <add key="gao" value="weipeng" />

     </appSettings>

     

     <!--连接字符串设置-->

     <connectionStrings>

        <add name="ConnString" connectionString="Data Source=GAO;Initial Catalog=HBWXDate;User ID=sa;password=sa"></add>

        <add name="111" connectionString="11111" />

     </connectionStrings>

     

     <!--指定应用子配置设置的资源,并锁定配置设置,以防止它们被子配置文件重写。page指定应用包含的配置设置的资源.allowOverride是否允许配置文件的重写,提高配置文件的安全性-->

     <location path="Default.aspx" allowOverride="false">

        <!--控制asp.net运行时的行为-->

    <system.web>

        <!--identity控制web应用程序的身份验证标识.-->

        <identity impersonate="false" />

       

        <!--标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序和子目录级别声明.

        这 里的几个属性的意思是默认主页为Index,主题是Default,不检测用户在浏览器输入的内容中是否存在潜在的危险数据(注:该项默认是检测,如果你 使用了不检测,一要对用户的输入进行编码或验证),在从客户端回发页时将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。(注:该项默认是不验 证)禁用ViewState-->

        <pages masterPageFile="Index" theme="Default" buffer="true" enableViewStateMac="true" validateRequest="false" enableViewState="false">

          <!--controls 元素定义标记前缀所在的 register 指令和命名空间的集合-->

          <controls></controls>

          <!--将在程序集预编译期间使用的导入指令的集合-->

          <namespaces></namespaces>

        </pages>

       

        <!--默 认错误页设置,mode:具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.defaultRedirect:用于出现错误时重定向的URL地址-->

        <customErrors defaultRedirect="Err.html" mode="RemoteOnly">

          <!--特殊代码编号的错误从定向文件-->

          <error statusCode="403" redirect="NoAccess.htm" />

          <error statusCode="404" redirect="FileNotFound.htm" />

        </customErrors>

       

        <!--配置调试和跟踪:下面配置的意思是启动调试(默认),捕获跟踪信息,要缓存的跟踪请求个数(15),跟踪结果的排列顺序-->

        <trace enabled="true" localOnly="false" pageOutput="true" requestLimit="15" traceMode="SortByCategory"/>

       

        <!-- 设置 compilation debug="true" 将调试符号插入已编译的页面中。但由于这会影响性能,因此只在开发过程中将此值设置为 true。设置默认的开发语言C#。batch是否支持批处理-->

        <compilation debug="true" defaultLanguage="c#" batch="false">

          <assemblies>

            <!--加的程序集引用,每添加一个程序集,就表示你的应用程序已经依赖了一个程序集,你就可以在你的应用程序中使用了-->

            <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

            <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

            <add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

            <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

            <add assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

            <add assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

            <add assembly="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

            <add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

            <add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

            <add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

            <add assembly="System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

          </assemblies>

          <!--定义用于编译自定义资源文件的生成提供程序的集合。-->

          <buildProviders>

            <!---->

            <add extension=".aspx" type="System.Web.Compilation.PageBuildProvider"/>

            <add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider"/>

            <add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider"/>

            <add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider"/>

            <add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider"/>

            <add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider"/>

            <add extension=".resx" type="System.Web.Compilation.ResXBuildProvider"/>

            <add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider"/>

            <add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider"/>

            <add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider"/>

            <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

          </buildProviders>

        </compilation>

       

          <!--通 过 <authentication> 节可以配置 ASP.NET 使用的 安全身份验证模式,以标识传入的用户。Windows: 使用IIS验证方式,Forms: 使用基于窗体的验证方式,Passport: 采用Passport cookie验证模式,None: 不采用任何验证方式-->

        <authentication mode="Forms">

          <!--Name: 指定完成身份验证的Http cookie的名称.LoginUrl: 如果未通过验证或超时后重定向的页面URL,一般为登录页面,让用户重新登录。Protection: 指定 cookie数据的保护方式. 

          可 设置为:All表示加密数据,并进行有效性验证两种方式,None表示不保护Cookie,Encryption表示对Cookie内容进行加 密,validation表示对Cookie内容进行有效性验证,TimeOut: 指定Cookie的失效时间. 超时后要重新登录。-->

          <forms name=".ASPXUSERDEMO" loginUrl="Login.aspx" protection="All" timeout="30"/>

        </authentication>

        <!--控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与<authentication> 节配合使用。此处的意思是对匿名用户不进行身份验证。拒绝用户weipeng-->

        <authorization>

          <allow users="*"/>

          <deny users="weipeng"/>

          <allow users="aa" roles="aa" />

        </authorization>

        <!--站点全球化设置,requestEncoding: 它用来检查每一个发来请求的编码.responseEncoding: 用于检查发回的响应内容编码.fileEncoding:用于检查aspx,asax等文件解析的默认编码,默认的编码是utf-8-->

        <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" />

        <!--会 话状态设置。mode: 分为off,Inproc,StateServer,SqlServer几种状态 mode = InProc 存储在进程中特点:具有最佳的性能,速度最快,但不能跨多台服务器存储共享.mode = "StateServer" 存储在状态服务器中特点:当需要跨服务器维护用户会话信息时,使用此方法。但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢失. mode="SqlServer" 存储在sql server中特点:工作负载会变大,但信息不会丢失

        stateConnectionString :指 定asp.net应用程序存储远程会话状态的服务器名,默认为本机。sqlConnectionString:当用会话状态数据库时,在这里设置连接字符 串。Cookieless:设置为flase时,表示使用cookie会话状态来标识客户.timeout表示会话超时时间。-->

        <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"></sessionState>

        <!--为 ASP.NET 应用程序配置页的视图状态设置。设置要存储在页历史记录中的项数。-->

        <sessionPageState historySize="9"/>   

        <!--配置asp.net http运行库的设置。可以在计算机,站点,应用程序和子目录级别声明

        允许最多的请求个数100,最长允许执行请求时间为80秒,控制用户上传文件的大小,默认是4M。useFullyQualifiedRedirectUrl客户端重定向不需要被自动转换为完全限定格式。-->

        <httpRuntime appRequestQueueLimit="100" executionTimeout="80" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>

        <!--httpModules在一个应用程序内配置 HTTP 模块。-->

        <httpModules>

          <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />

          <add name="Session" type="System.Web.SessionState.SessionStateModule" />

          <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />

          <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />

          <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />

          <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />

          <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />

          <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />

          <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />

          <!--自定义的URL重写,type基本上就是dll名-->

          <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />

          <add name="Profile" type="System.Web.Profile.ProfileModule" />

        </httpModules

        <!--httpHandlers用于根据用户请求的URL和HTTP谓词将用户的请求交给相应的处理程序。可以在配置级别的任何层次配置此节点,也就是说可以针对某个特定目录下指定的特殊文件进行特殊处理。

        add:指定映射到处理程序的谓词/路径。clear:移除当前已配置或已继承的所有处理程序映射。remove:移除映射到处理程序的谓词/路径。remove 指令必须与前一个 add 指令的谓词/路径组合完全匹配。该指令不支持通配符。-->

        <httpHandlers>

          <remove verb="*" path="*.asmx"/>

          <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

          <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

          <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>

          <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>

        </httpHandlers>

        <!--为 Web 应用程序使用的 Cookie 配置属性。domain:设置 Cookie 域名。httpOnlyCookies:在 Internet Explorer 6 SP1 中启用 HttpOnlyCookies Cookie 的输出。默认值为 false。requireSSL:获取一个指示是否需要安全套接字层 (SSL) 通信的值.-->

        <httpCookies httpOnlyCookies="false" requireSSL="false"/> 

        <!--控制 ASP.NET Web 服务及其客户端的行为。protocols:指定传输协议,ASP.NET 可使用这些传输协议来解密 HTTP-->

        <webServices>

          <protocols>

            <add/>

          </protocols>

        </webServices>

        <!--为 Web 应用程序配置缓存设置。cache:定义全局应用程序缓存设置。outputCache :指定应用程序范围的输出缓存设置。outputCacheSettings:指定可以应用于应用程序中页的输出缓存设置。 sqlCacheDependency:为 ASP.NET 应用程序配置 SQL 缓存依赖项。-->

        <caching>

          <cache disableMemoryCollection = "false" disableExpiration = "false" privateBytesLimit = "0" percentagePhysicalMemoryUsedLimit = "90" privateBytesPollTime = "00:02:00"/>

          <!--设计需要以这种方式缓存的页时,您需要向该页添加以下指令:<%@ OutputCache CacheProfile="ServerOnly" %>-->

          <outputCacheSettings>

            <outputCacheProfiles>

              <add name="ServerOnly" duration="60" varyByCustom="browser" location="Server" />

            </outputCacheProfiles>

          </outputCacheSettings>

        </caching>

         </system.web>

     </location>

     <!--网 络设置,authenticationModules:指定用于对 Internet 请求进行身份验证的模块。connectionManagement:指定与 Internet 宿主的连接的最大数目。defaultProxy:配置超文本传输协议 (HTTP) 代理服务器。

     mailSettings:配置简单邮件传输协议 (SMTP) 邮件发送选项。requestCaching:控制网络请求的缓存机制。settings:配置 System.Net 的基本网络选项。-->

     <system.net>

     <!--配置SMTP电子邮件设置-->

     <mailSettings>

       <smtp from="weipeng">

        <network host="Gao" password="" userName="" />

       </smtp>

     </mailSettings>

       <!--禁用所有缓存-->

       <requestCaching disableAllCaching="true"></requestCaching>

       <!--指定代理地址,并对本地访问和 contoso.com 跳过代理。-->

       <defaultProxy>

         <proxy usesystemdefault="True" proxyaddress="http://192.168.1.10:3128" bypassonlocal="True"/>

         <bypasslist>

           <add address="[a-z]+".contoso".com" />

         </bypasslist>

       </defaultProxy>

     </system.net>

     <!--该 节替换在 httpHandlers 和 httpModules 节中添加的与 AJAX 相关的 HTTP 处理程序和模块。该节使 IIS 7.0 在集成模式下运行时可使用这些处理程序和模块。在iis7.0 下运行 ASP.NET AJAX 需要 system.webServer

     节。对早期版本的 IIS 来说则不需要此节。 -->

     <system.webServer>

        <validation validateIntegratedModeConfiguration="false"/>

        <modules>

          <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

        </modules>

        <handlers>

          <remove name="WebServiceHandlerFactory-Integrated"/>

          <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>

     

     <!--ASP.NET AJAX 中配置 ASP.NET 服务-->

     <system.web.extensions>

        <!--配置 JSON 序列化-->

        <scripting>

          <webServices>

            <jsonSerialization maxJsonLength="5000"/>

          </webServices>

        </scripting>

     </system.web.extensions>

     <!--对WCF的相关配置-->

     <system.serviceModel>

        <services>

          <service name="WCFStudent.WCFStudentText" behaviorConfiguration="ServiceBehavior">

            <!-- Service Endpoints -->

            <endpoint address="" binding="wsHttpBinding" contract="WCFStudent.IStuServiceContract">

              <!-- 部署时,应删除或替换下列标识元素,以反映在其下运行部署服务的标识。删除之后,WCF 将自动推导相应标识。-->

              <identity>

                <dns value="localhost"/>

              </identity>

            </endpoint>

            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

          </service>

        </services>

        <behaviors>

          <serviceBehaviors>

            <behavior name="ServiceBehavior">

              <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->

              <serviceMetadata httpGetEnabled="true"/>

              <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->

              <serviceDebug includeExceptionDetailInFaults="false"/>

            </behavior>

          </serviceBehaviors>

        </behaviors>

     </system.serviceModel>

     

     <!--URL重定向-->

     <rewriter>

        <rewrite url="~/user/u(.+).aspx" to="~/user/index.aspx?r=$1" />

        <rewrite url="~/ask/q(.+).aspx" to="~/home/ask/content.aspx?id=$1" />

        <rewrite url="~/blog/b(.+).aspx" to="~/home/blog/article.aspx?r=$1" />

        <rewrite url="~/news/n(.+).aspx" to="~/home/news/content.aspx?nid=$1" />

        <rewrite url="~/default.aspx" to="~/home/ram/net.aspx" />

     </rewriter>

    </configuration>

     來自:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html

    转载于:https://www.cnblogs.com/sdya/p/4602345.html

    展开全文
  • 配置webconfig

    2018-05-27 23:29:00
    记录下webconfig的配置(复制很久的笔记): 1、 配置Session在url传递 在web.config中的 <system.web> 节点下添加,手动修改session的相关设置 <sessionState timeout="5" cookieless="true"> </...

    记录下webconfig的配置(复制很久的笔记):

    1、 配置Session在url传递

    在web.config中的 <system.web> 节点下添加,手动修改session的相关设置

    <sessionState timeout="5" cookieless="true"> </sessionState>

    2、 配置上传文件大于4M,里面是字节数,比如下面10M是1024*1024*10

    <system.web>

        <httpRuntime targetFramework="4.5" maxRequestLength="10485760"/>

    </system.web>

    3、比如上传1g的内容。请求的筛选模块是被直接拒绝,不会到后台指定的页面的,跟上面的界面配置要相同才行

    <configuration>

      <system.webServer>

    <security>

        <requestFiltering>

          <requestLimits maxAllowedContentLength="1073741824"></requestLimits>

        </requestFiltering>

      </security>

      </system.webServer>

    </configuration>

    4、自定义一般处理程序类及配置

     

    ①新建一个类,继承IHttpHandler,实现里面的ProcessRequest方法与IsReusable属性。属性中如果get{return false;}表示每次浏览器的请求都会新创建这个一般处理程序的类的对象,为true每次浏览器请求都是重用第一次创建的类的对象

    ②比如用户需要xxx.hh这样子在浏览器中访问,我们新建的这个类继承IhttpHandler接口之后实现里面的代码专门接管处理这样的需求。如果要要Session,还要实现Session的接口。 verb的GET与POST一定是大写,也可以*或者GET或者POST。

    ③参数name:可以由程序自己定义,建议取有意义的名字,多个配置的name值不能重复

          参数path:告诉asp.net处理机制,什么样的url才会给 type指定的类型类处理

          参数verb:告诉asp.net处理机制,是GET或者POST请求才进行截获处理

    IIS集成模式下配置

     <system.webServer>

    <!--适配IIS集成模式-->

        <handlers>

          <add name="iishander" path="*.hh" verb="*" type="WebApplication1.IISHandler1"/>

        </handlers>

      </system.webServer>

    IIS经典模式下配置

    <system.web>

     <httpHandlers>

          <add path="*.hh" verb="get,post" type="WebApplication1.IISHandler1" />

        </httpHandlers>

      </system.web>

    5、配置URL重写,新建一个类实现IHttpMoudle接口,或者写在Global中(不需要配置文件)

    ①<system.webServer>

        <modules>

          <add name="url rewrite" type="利用过滤器实现url重写.UrlRewrite"/>

        </modules>

      </system.webServer>

    ②利用IIS  Url重写模块来实现url的友好重写

    利用IIS  Url重写模块来实现url的友好重写

    在Web平台安装程序下载URL重写工具安装,返回就看到这个工具了。点击打开,添加规则,友好url,输入动态的url……(就是重写之前的url)

    6、进程外Session

    使用状态服务器存session

    注意session存储的对象必须支持可序列化,即类上面增加[Serializable]特性

    <sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer"/>

    修改默认端口:

     

    使用数据库存session

    1、  Session保存的位置:

    <sessionState mode=“InProc | StateServer| SQLServer”>

    <sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer"/>

    创建数据库脚本文件在C:\Windows\Microsoft.NET\Framework\v4.0.30319下的:InstallPersistSqlState.sql和InstallSqlState.sql

    可以用下面命令安装保存Session的数据库,sa,master aspbetdb用户名,密码,数据库

    aspnet_regsql -U sa -P master –ssadd -sstype c -d aspnetdb

    一定要开数据库的TCPIP连接,否则不能创建成功

    web.config可以配置成:

    <sessionState  sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true"  mode="SQLServer"/>

    7、Cache

    <%@ OutputCache Duration="60" VaryByParam="none" %>

    VaryByParam

    是指页面根据使用 POST 或 GET 发送的名称/值对(参数)来更新缓存的内容,多个参数用分号隔开。如果不希望根据任何参数来改变缓存内容,请将值设置为 none。如果希望通过所有的参数值改变都更新缓存,请将属性设置为星号 (*)。

    例如: http://localhost:1852/WebForm.aspx?p=1 
    则可以在WebForm1.aspx页面头部声明缓存:

    <%@ OutputCache Duration="60" VaryByParam="p" %>

    以上代码设置页面缓存时间是60秒,并根据p参数的值来更新缓存,即p的值发生变化才更新缓存。

    如果一直是WebForm1.aspx?p=1访问该页,则页面会缓存当前数据,当p=2时又会执行后台代码更新缓存内容。

     

    如果有多个参数时,如:http://localhost:1852/WebForm.aspx?pp=1&ln=1

    可以这样声明:<%@ OutputCache Duration="60" VaryByParam="pp;ln" %> 

    根据控件ID缓存<%@ OutputCache Duration="60" VaryByControl="ID" %> 

    在WebConfig中配置,直接读取配置文件(指令集:<%@ OutputCache CacheProfile=”cache10”%>)

    <system.web>

       <caching>

            <outputCacheSettings>

              <outputCacheProfiles>

                <add name="cache10" duration="10" varyByParam="none" />

              </outputCacheProfiles>

            </outputCacheSettings>

          </caching>

    </system.web>

     

    数据库缓存依赖:

    数据库缓存依赖

    实现步骤:

        下面就让我们看一下如何实现数据库缓存依赖功能:

    第一步: 修改web.config,让项目启用SqlCacheDependency 。

    将下列代码加入web.config的<system.web>节:       

    <?xml version="1.0"?>

    <configuration>

     <appSettings/>

    <connectionStrings>

    <add name="connectionstring" connectionString="data source=127.0.0.1;initial catalog=Test;user id=sa;password="  providerName="System.Data.SqlClient" />

    </connectionStrings>

    <system.web>

    <caching>

    <sqlCacheDependency enabled="true" pollTime="6000">

     <databases>

      <add name="Test" connectionStringName=" connectionstring " />

    </databases>

    </sqlCacheDependency>         

    </caching> 

    </system.web>

    </configuration>

     

     

    这里的connectionStringName指定了在<connectionStrings>中添加的某一个连接字符串。name则是为该SqlCacheDependency起的名字,这个名字将在第3步中用到。
    SqlCacheDependency类会自动完成对此配置节信息的读取以建立和数据库之间的联系。

     

    注意:

    在<databases>节的<add name=" Test" connectionStringName=" connectionstring" />中的name属性值必须和第三步的Page_Load代码中System.Web.Caching.SqlCacheDependency("Test", "依赖的表名称(这里使用Contact)"); 中的第一个参数(数据库名称)相一致。

     

    第二步:执行下述命令,为 数据库启用缓存依赖。

    如果要配置SqlCacheDependency,则需要以命令行的方式执行。

    aspnet_regsql.exe工具位于Windows\\Microsoft.NET\\Framework\\[版本]文件夹中。

    aspnet_regsql -C "data source=127.0.0.1;initial catalog= Test;user id=sa;password=master" -ed -et -t " Contact "

    参数-C后面的字符串是连接字符串(请替换成自己所需要的值),

    参数-t后面的字符串是数据表的名字。

     

    命令执行后,在指定的数据库中会多出一个AspNet_SqlCacheTablesForChangeNotification表。

     

    第三步:在代码中使用缓存,并为其设置SqlCacheDependency依赖:

    public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep)
    
    {
    
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    
        objCache.Insert(
    
            CacheKey,
    
            objObject,
    
            dep,
    
            System.Web.Caching.Cache.NoAbsoluteExpiration,//从不过期
    
            System.Web.Caching.Cache.NoSlidingExpiration,//禁用可调过期
    
            System.Web.Caching.CacheItemPriority.Default,
    
            null);
    
    }
    
    protected void Page_Load(object sender, EventArgs e)
    
    {
    
        string CacheKey = "cachetest";
    
        object objModel = GetCache(CacheKey);//从缓存中获取
    
        if (objModel == null)//缓存里没有
    
        {
    
            objModel = GetData();//把当前时间进行缓存
    
            if (objModel != null)
    
            {
    
                //依赖数据库Test中的Contact表变化 来更新缓存
    
                System.Web.Caching.SqlCacheDependency dep = newSystem.Web.Caching.SqlCacheDependency("Test", " Contact ");
    
                SetCache(CacheKey, objModel, dep);//写入缓存
    
            }
    
        }
    
                   
    
        rpdata.DataSource = (DataSet)objModel;
    
        rpdata.DataBind();
    
    }
    
     
    

      

    8、IIS网站发布-自定义domain

    将网站部署到IIS的方式演示

    修改C:\Windows\System32\Drivers\etc下的hosts文件

    将127.0.0.1  www.stud.com

    修改IIS站点的绑定

     

     

    9、简单示例读写xml文件

    ①可以用XmlSerializer序列化
    ②XMLDocument
    写:
      XmlDocument xml= new XmlDocument();
                XmlDeclaration xdec=  xml.CreateXmlDeclaration("1.0", "utf-8", "yes");
                xml.AppendChild(xdec);
                XmlElement rootElement = xml.CreateElement("root");
                xml.AppendChild(rootElement);
                XmlElement subElement = xml.CreateElement("subEle");
                subElement.SetAttribute("name", "kk");
                rootElement.AppendChild(subElement);
                xml.Save(@"c:\a.xml");
    读:   XmlDocument doc = new XmlDocument();
                doc.Load("");
                XmlElement ele= doc.DocumentElement;//获取根节点
               XmlNodeList list=  ele.ChildNodes;//获取所有子节点
       foreach (XmlNode item in list)
                {
                    if (item.NodeType==XmlNodeType.Element)//判断是元素节点才操作
                    {
    
                    }
                }
    搜索指定节点,进行修改操作
    doc.GetElementsByTagName("name");//获取指定名字的全部节点
    ③XDocument
    写:
        XDocument xml = new XDocument();
                XDeclaration dec = new XDeclaration("1.0","utf-8",”no”);
                xml.Add(dec);
                XElement ele = new XElement("root");
                xml.Add(ele);
                ele.SetElementValue("", "");//也可以这样创建
                xml.Save("c:\\x.xml");
    读:
      XDocument doc = XDocument.Load("");//加载指定的xml
                XElement root= doc.Root;//获取根节点
                root.Elements("name");//获取根节点下的name名字的节点
    搜索指定节点,进行修改操作:
      XDocument doc = XDocument.Load("");//加载指定的xml
                XElement root = doc.Root;//获取根节点
                root.Descendants().Where (c=>c.Attribute("").ToString()=="");   // 按文档顺序返回此文档或元素的子代节点集合。
    ④Xpath  路径表达式
    /      --从根目录开始
    //aaa   --找到整篇文档的aaa所有节点
    //*     --找到所有任何元素
    //aaa/bbb --找到整篇文档的aaa所有节点中的bbb节点,bbb节点属于aaa的才能找到
    /aaa/bbb/*  *代表所属节点的所有
    /*/*/*/bbb
    /aaa/bbb[0]   aaa节点下的第一个bbb
    /aaa/bbb[last()]   aaa节点下的最后一个bbb
    //@id   --@代表属性  ,选择所有元素中所具有id属性的属性,不是查找元素
    //BBB[@id]  --在有id属性的BBB元素
    用C#获取:XMLDocument document=new XMLDocument();
    Document.load(“aa.xml”);
    Document.SelectNodes(“/Users/user[id=3]”);//就是用这种语法,更新也是setattribute

     

    10、有潜在的危险Request.Form值

    在页面的指令集中使用VaildataRequest=false就行,不过有些低版本不行,还得在配置文件中配置<httpRuntime requestValidationMode="2.0"/>

     

    11、配置跳转到同一的错误页面,MVC中的配置一样

    <system.web>

        <customErrors mode="On" defaultRedirect="Error"></customErrors>

      </system.web>

    部署网站的时候mode一定为false或者remote。defaultRedirect是跳转的页面

    12、<configSections>    //一定紧贴configuration这个节点,否则会报错

    13、重要:优化:在指定的bin目录下的指定程序集中查找,这样就不用在每个程序集中一一查找:

    下面表示直接在CRM.Test 的dll中查找。

       <object id="myAnimal" type="TestSpring.Dog,CRM.Test" singleton="false">

    转载于:https://www.cnblogs.com/entclark/p/9098101.html

    展开全文
  • WebConfig

    2015-10-27 09:27:00
    任意建立一个项目,新建一个类,或者直接在App_Code里新建一个类,如下: namespace   ConfigurationSectionTest {   ///   ///WebSiteInfoHandler 的摘要说明   ///   public   class ...

    1,什么是web.config?

    MSDN上说:"ASP.NET 配置数据存储在 XML 文本文件中(每个文件都名为 Web.config)。 Web.config 文件可以出现在 ASP.NET 应用程序的多个目录中。"。  

    在园子里有为大神的说话我觉得也计较容易理解“web.config是asp.net中保存配置信息(比如数据库连接字符串等)的重要文件。它是基于xml的文本文件方式放在Web应用程序的任何目录中,并且默认不随源文件编译到Dll中,而运行环境随时监视着它是否有改变,一但有变动,系统会自动重新加载里面的最新内容。”。

    说到底就是网站的配置文件了。

    2,web.config的加载顺序

    前边既然提到了web.config可以在一个网站里出现多个,那在网站运行时候服务器是怎样去执行他们的呢?这就是要了解到web.config的加载顺序了。

    相信很多新手特别是没有好好接触过web.config知识的童鞋一直都对一个asp.net网站有很多个配置文件感到棘手,即新奇又感到迷茫,反正我以前是这样的。但是现在知道了下面这些知识就不会了。

    IIS在Asp.net网站启动时,会加载配置文件中的配置信息,然后缓存这些信息,不会每次要用都去读取配置文件,只是IIS会随时监视着这些文件的变化,一量有变化,它会重新去读取并缓存配置信息。

    Asp.net网站运行时会按照以下方式加载配置文件中的节点信息:

    1) 如果在当前运行页面所在的目录下有web.config文件,则查找是否存在所需要的节点,如果存在则返回结果,并停止下一步地查找。

    2) 如里所在目录不存在web.config配置或者配置文件里没有所需要的节点,则查找它所在的上一级目录的配置文件中的节点,直到网站根目录。

    3) 如果网站根目录中都不存在web.config或者所需要的配置节点,转而到“windows目录\Microsoft.NET\Framework\对应.net版本\config\web.config”中去查找。

    4) 如果第3条中还没找到,继续到“windows目录\Microsoft.NET\Framework\对应.net版本\config\machine.config”中去查找。

    5) 如果还没找到,那就报错吧。

    可能对于第 3 步, 第 4 步有好多童鞋该不明白了,那个是 iis服务器的默认配置目录。可以这样简单的理解:我们让网站去找一个配置信息,那他肯定就会一层一层的去找配置文件里的节点名称,当网站目录里没有找到的时候,服务器会找自己的配置文件。当这些都没找到,报错吧。

    这样理解了,就对一个asp.net网站拥有多个配置文件不足为奇了吧。其实对于上边说的这个问题,我觉得是在项目开发过程中养成良好的编程习惯就可以完全避免了。在配置文件的表示字段上,尽量不要有重复的。

    3,web.config节点介绍。

    这个才是正文吖。因为web.config节点有很多需要知道的地方,我们这里只对那些常用的节点做介绍。

    前边说了,Web.config文件是一个xml文本文件。所以它的配置信息都是以节点形式存在的。

    根节点为<configuration>,常见的子节点有:<configSections> ,<appSettings> <connectionStrings>,<location>,<system.web>等等。

    <configSections />

    这是什么玩意?

    我们平时在网站里用到的一些对象或者数据,是配置在web.config里的,但是配在哪呢?就是配置在这个configSections节点下。

    web.config是网站运行在iis服务器上的配置文件,他怎么可能允许我们随随便便的配置我们自己的节点呢,不行你自己试试, 在任何位置添加任何没有申明的节点, 系统都不会让你通过, 更不会让你去读它了, 当然, 你打算在别的xml文件里添加节点, 然后读出来, 创建对象, 这个没问题。不过这样一样也就失去了配置文件的意义了。所以,为了系统能有组织的管理用户的在配置文件里的自定义信息, 就要使用configSections了。

    configSections 元素指定了配置节和处理程序声明。由于 ASP.NET 不对如何处理配置文件内的设置作任何假设,因此这非常必要。但 ASP.NET 会将配置数据的处理委托给配置节处理程序。配置结构信息如下:

    <configSections>

    <!--定义配置节处理程序与配置元素之间的关联。-->

    <section />

    <!--定义配置节处理程序与配置节之间的关联。-->

    <sectionGroup />

    <!--移除对继承的节和节组的引用。-->

    <remove />

    <!--移除对继承的节和节组的所有引用,只允许由当前 section 和 sectionGroup 元素添加的节和节组。-->

    <clear/>

    </configSections>

    每个 section 元素标识一个配置节或元素以及对该配置节或元素进行处理的关联 ConfigurationSection 派生类。可以在 sectionGroup 元素中对 section 元素进行逻辑分组,以对 section 元素进行组织并避免命名冲突。section 和 sectionGroup 元素包含在 configSections 元素中。

    如果配置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素。

    下面我们来示例写一个自定义配置信息,并完成它的SectionHandler.

    1,首先我们在<configuration>节点下添加configSections。

    <configSections>
        <sectionGroup name="WebSiteInfo">
            <section name="basicInfo" type="ConfigurationSectionTest.WebSiteInfoHandler"/>
            <section name="fileUpload" type="ConfigurationSectionTest.WebSiteInfoHandler"/>
        </sectionGroup>
    </configSections>

    <WebSiteInfo>
        <basicInfo>
            <add key="name" value="imecc studio"/>
            <add key="version" value="1.0"/>
        </basicInfo>
        <fileUpload>
            <add key="fileUploadPath" value="E:\\MyHomePage\\Web\\Upload\\"/>
            <add key="fileUploadSizeMax" value="2M"/>
        </fileUpload>
    </WebSiteInfo>

    说明: 在configSections下添加一个section/sectionGroup子节点, 写好标示名和类型, 然后在紧接这下面实现这个标示名的细节内容,就是我们当初想添加的自己的自定义信息了.

    以上我们在WebSiteInfo节点下定义了两个节点basicInfo和fileUpload,并定义了节点处理程序类ConfigurationSectionTest.WebSiteInfoHandler,并且随后运用了我们定义的节点。

    2,我们来看看节点处理程序ConfigurationSectionTest.WebSiteInfoHandler。

    任意建立一个项目,新建一个类,或者直接在App_Code里新建一个类,如下:

    namespace  ConfigurationSectionTest
    {
         /// <summary>
         ///WebSiteInfoHandler 的摘要说明
         /// </summary>
         public  class  WebSiteInfoHandler : IConfigurationSectionHandler
         {
             public  WebSiteInfoHandler()
             {
                 //
                 //TODO: 在此处添加构造函数逻辑
                 //
     
             }
     
             #region IConfigurationSectionHandler 成员
     
             public  object  Create( object  parent, object  configContext, System.Xml.XmlNode section)
             {
                //这里我们首先返回个hello,并且在此处设置一个断点。看看程序什么时候执行到这。
                 return  "hello" ;
             }
     
             #endregion
         }
     
    }

    可以看到这个处理程序实现了一个叫做IConfigurationSectionHandler的接口,并且里边有个唯一的方法 public object Create(object parent, object configContext, XmlNode section), 这里的最后一个参数就是自定义信息那个节点了,  通过处理你配置的这堆信息, 返回你要的对象.

    3,要使用这个返回的对象,通过System.Configuration.ConfigurationManager.GetSection()方法.

      我们在Default.aspx的Page_Load事件处理程序中去访问我们自定义的节点,用ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo");注意参数的格式。

    这里是 section Group Name/section ,如果是单独的section,就只传这个section的name就好了。

    protected void Page_Load(object sender, EventArgs e)
    {
        Object o = ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo");
    }

    在Page_Load的代码段里打个断点我们启动调试,看到程序首先执行到ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo");这句。

    然后执行到ConfigurationSectionTest.WebSiteInfoHandler中的Create函数。

    我们再看看这时处理函数中参数的值:

    parent为null

    configContext 为配置上下文对象。

    section 的InnerXml为<add key="name" value="huchen's homepage" /><add key="version" value="1.0" />

    按F11继续执行return "hello", 继续执行...

    在执行到Object o = ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo")后面的“}“,我们发现o的值为”hello”。 

     

    相信您已经明白的差不多了,当读取自定义节点的内容时,程序去执行我们定义的节点处理程序,并把节点中的内容传给Create函数中的参数。然后我们在Create中自己处理节点下的内容,并返回我们格式化后的节点内容给调用者,也就是ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo")。

    注意:程序第一次运行的时候可以调试到Create这个方法,第二次运行的时候就调试不到了,这是因为配置文件时缓存了起来.

    只有改变了配置文件或者继承自IConfigurationSectionHandler的类才会重新调用.

    好,知道这些以后,我们就来完善我们的代码,我们在Create中处理传进来的节点内容。

    为了简单起见,我们引入两个类NameValueCollection,NameValueSectionHandler。

    NameValueCollection:表示可通过键或索引访问的关联 String 键和 String 值的集合。

    NameValueSectionHandler:提供配置节中的名称/值对配置信息。NameValueSectionHandler 这个类也继承IConfigurationSectionHandler
    反编译可以看出NameValueSectionHandler 的Create方法把参数section的结果转化成了一个集合,就是NameValueCollection。

    那么我们可以在节点处理程序中的Create函数中写如下代码:

    NameValueCollection configs;
    NameValueSectionHandler baseHandler = new NameValueSectionHandler();
    configs =(NameValueCollection)baseHandler.Create(parent,configContext,section);
    Return configs;

    这样我们就可以这样访问我们的节点了:

    string myWebSiteName = ((NameValueCollection)ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo"))["name"];

    在Default.aspx的Page_Load事件处理程序中添加如下代码:

    string myWebSiteName = ((NameValueCollection)ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo"))["name"];
    Response.Write(myWebSiteName);

    Ctrl+F5运行,可以看到页面输出了imecc studio

    <appSettings />

    该节点下主要用来存储asp.net应用程序的一些配置信息,也可以把数据库连接字符串也放在这里,不过.net2.0提供了connectionStrings节点,所以数据库连接字符串还是不建议放在这里,下面为一个图片类型的实例。

    <appSettings>

    <!--图片类型扩展名-->

    <add key="ImgType" value=".bmp;.jpg;.gif;.png"/>

    </appSettings>

    调用方法为:

    string ImgType = ConfigurationManager.AppSettings["ImgType"];

    <connectionStrings />

       connectionStrings和appSettings类似,不过用于保存配置数据库连接信息,下面给一个实例。

    <connectionStrings>

    <add name="SqlserverConnStr" connectionString="Data Source=Aron1;Initial Catalog= pubs;UserId=sa;Password=asdasd;"/>

    <add name="OrcleConnStr" connectionString="Provider=msdaora;Data Source= MyOracleDB;UserId=UserName;Password=asdasd;"/>

    </connectionStrings>

    调用方式为:

    string connStr = ConfigurationManager.ConnectionStrings["SqlserverConnStr"].ConnectionString;

    <system.web />

    <system.web>为.net应用程序的行为方式配置节点,该节点包含很多子节点,很多子节点已经由.net配置好了,这里我们只来看看一些重要的配置节点。

    <compilation />节点
    <compilation>节点配置 ASP.NET 使用的所有编译设置。

    默认的debug属性为“true”,即允许调试,在这种情况下会影响网站的性能,所以在程序编译完成交付使用之后应将其设为“false”。

     <customErrors />

    该节点用于定义一些自定义错误信息。

    此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性,表示应用程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。Mode属性是一个必选属性,它有三个可能值,它们所代表的意义分别如下:
    Mode 说明
    On 表示在本地和远程用户都会看到自定义错误信息。
    Off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
    RemoteOnly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。
    这里有必要说明一下本地用户和远程用户的概念。当我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成为本地用户,反之则称之为远程用户。在开发调试阶段为了便于查找错误Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者RemoteOnly,以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵。

    值得一提的是:如果说配置的跳转页面也发生错误,那么网站就没办法处理异常了。

    <authentication />

    该节点为配置 ASP.NET 身份验证方案,该方案用于识别查看 ASP.NET 应用程序的用户。Mode属性包含四种身份验证模式:

    1. Windows(默认)

    将 Windows 验证指定为默认的身份验证模式。将它与以下任意形式的 Microsoft Internet 信息服务 (IIS) 身份验证结合起来使用:基本、摘要、集成 Windows 身份验证 (NTLM/Kerberos) 或证书。在这种情况下,您的应用程序将身份验证责任委托给基础 IIS。

    2. Forms

    将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式。

    3. Passport

    将 Microsoft Passport Network 身份验证指定为默认身份验证模式。

    4. None

    不指定任何身份验证。您的应用程序仅期待匿名用户,否则它将提供自己的身份验证。

    下面的代码示例演示如何为基于窗体的身份验证配置站点、指定传输来自客户端的登录信息的 Cookie 的名称以及指定当初始身份验证失败时使用的登录页的名称。必须将 authorization 节包含在内才能要求对所有用户进行 Forms 身份验证,并拒绝匿名用户访问站点。

    <configuration>

    <system.web>

    <authentication mode="Forms">

    <forms name="401kApp" loginUrl="/login.aspx"/>

    </authentication>

    <authorization>

    <deny users="?"/>

    </authorization>

    </system.web>

    </configuration>

    Login.aspx中登陆通过:

    FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text, true);

    <httpHandlers />

    HttpHandlers可用于根据请求中指定的 URL 和 HTTP 谓词将传入的请求映射到相应的处理程序。也就是说对于网站的某一个请求,我们可以自定义他的一般处理程序。

    相信有很多新手在刚刚入职的时候,会发现很多在学校学的知识(很多都是托控件)到了公司基本上就没有用的地方,打开aspx对应的aspx.cs后置文件,里边一句自己写的代码都找不到。

    很是郁闷。其实很多都是用到了这个东西。

    看下边这个例子:

    <system.web>
    <httpHandlers>
    <add path="httpHandlerTest.ashx" verb="*" type="aspDoNetTest.Handler.httpHandlerTest_Handler"/>
    </httpHandlers>
    </system.web>

    我们配置了一个Test的handler的一般处理程序,用于实现自定义的用户登录。

    传统的我们在处理的时候,会在页面上托两个textbox,再来个Button,然后再Button的click event里写登录的逻辑。

    但是这样配置的一个,当我们请求httpHandlerTest.ashx的时候,就会走我们的处理程序。

    namespace  aspDoNetTest.Handler
    {
         public  class  httpHandlerTest_Handler:IHttpHandler
         {
             public  void  ProcessRequest(HttpContext context)
             {
                 string  action =context.Request.QueryString[ "action" ];
     
                 switch  (action)
                 {
                     case  "Login" :
                         Login(context);
                         break ;
                     case  "1" :
                         break ;
                     case  "2" :
                         break ;
                     default :
                         break ;
                 }
             }
     
             private  void  Login(HttpContext context)
             {
                 string  UserName = context.Request.QueryString[ "UserName" ];
             }
     
             public  bool  IsReusable
             {
                 get
                 {
                     return  true ;
                 }
             }
         }
    }

      看到httpHandlerTest_Handler 类实现了IHttpHandler 接口。关于这个接口的知识,可以在网上找到他的专一学习知识。

     <httpModules />

       大家对于Global.asax应该挺熟悉的吧。对于那里边的HttpApplication时间,有些时候可能并不是我们想要的。这时候httpModules就用上了。

    对于httpModules,我们可以理解为 建立一个通用的可用被插入任何Web应用程序的HttpApplication事件钩子。

    使用HttpModule,是可复用的,不需要特定语应用程序代码的,只需要web.config中的一个条目。

    举个例子:实现在每个页面上添加了一句话:Add BeginRequest by MyHttpModule!

     

    <system.web>

    <httpModules>
    <add name="MyHttpModule" type="aspDoNetTest.Handler.HttpModule"/>
    </httpModules>

    </system.web>

     

    namespace  aspDoNetTest.Handler
    {
         public  class  HttpModule:IHttpModule
         {
             public  void  Dispose()
             {
                 
             }
     
             public  void  Init(HttpApplication context)
             {
                 context.BeginRequest += new  EventHandler(context_BeginRequest);
             }
             void  context_BeginRequest( object  sender, EventArgs e)
             {
                 HttpApplication application = (HttpApplication)sender;
                 HttpContext context = application.Context;
                 context.Response.Write( "Add BeginRequest by MyHttpModule!" );
             }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
         }
    }

      再运行网站,不论请求任何一个页面,都会在网站一开始请求的时候,再页面上输出 Add BeginRequest by MyHttpModule!

    <location />

    Location节点是用来指定子配置的资源。如果在asp.net应用程序中想对某个目录做特殊处理,则可以用该节点来实现.举个例子:

    下面的代码示例演示如何仅将指定页的上载文件大小限制设置为 128 KB。

    <configuration>

    <location path="UploadPage.aspx">

    <httpRuntime maxRequestLength="128"/>

    </location>

    </configuration>

    转载于:https://www.cnblogs.com/zylong/p/4913208.html

    展开全文
  • 比如很多主机都提供了将域名绑定到子目录从而能够建立多个网站的方法,以Godaddy的Windows主机为例,如果我们想通过子目录建立一个全新的网站,如果不配置好正确的Web.config,很可能会报HTTP 500错误Internal ...
  • .net中webconfig 详解

    2017-03-20 18:25:47
    例子:我们的asp.net应用程序中建立一个IPData目录,在IPData目录中创建一个IPData.txt文件,在Web.config中添加以下配置 代码如下: < httpHandlers > < add path = "IPData/*.txt" verb = "*" type = ...
  • WEBconfig RSA

    2019-09-29 16:25:49
    建立虚拟目录名称为EncryptWebConfig并添加Web.config文件如下: XML-Code: < configProtectedData >   < providers >   < add   keyContainerName = "LiuwuNetKeys"   useMachineContainer = "true...
  • 针对.net框架下,建立配置文件全局共享机制解决方法,利用application实现高速缓存全局共享,并与session进行区分
  • 自定义WebConfig

    2014-05-06 16:03:33
    Webconfig中需要的节点配置信息定义好之后,就需要建立对应的Class来读取这些信息,也就是上面提到的 XXX.App.ServicePlanEmailPromotion.DataSourceSettings. 创建的Class内容如下: public sealed class ...
  • 他们各个都有一个webconfig配置文件,部署后发现网站正常,可是WEB接口却报错,说配置文件出了问题,仔细检查发现WEB接口用的是网站的配置文件,一下子没招了. 后来在网上一查,发现利用配置文件的配置节可以让它不继承...
  • 昨天需要新建一个虚拟目录放在以前的一个站点下,新建了应用池,配好了环境置顶路径,虚拟目录页建立成功 ,但是程序一直是报错。这个程序我在测试服务器上是测过的,新建了一个站点是可以正常访问的,排除了程序...
  • --获取上面例子中建立的连接字符串  string sqlcon = ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;--> <!--权限排除 拒绝匿名访问(deny users="?")文件夹Admin-->    ...
  •  由于最近一个项目的数据库变动比较频繁, 为了减少数据层的负担, 打算采用.net的MVC框架, 使用LINQ对付数据层.    这个框架的web.config文件里出现了configSections section, 这个之前没有留意, 乘着项目...
  • webconfig配置信息转发

    2016-05-22 19:41:00
    这篇文章主要介绍了.net中webconfig 详解,需要的朋友可以参考下 .net 提供的是针对当前机器的配置。---名称:machine.config 运行机制:asp.net网站IIS启动的时候会加载配置文件中的配置信息,然后缓存...
  • 他们各个都有一个webconfig配置文件,部署后发现网站正常,可是WEB接口却报错,说配置文件出了问题,仔细检查发现WEB接口用的是网站的配置文件,一下子没招了. 后来在网上一查,发现利用配置文件的配置节可以让它不继承...
  • asp.net webconfig文件详解

    千次阅读 2014-07-29 11:22:05
    asp.net webconfig文件详解 一、认识Web.config文件  Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式),它可以出现在...
  • webconfig 初认识

    2015-01-28 08:53:00
    例子:我们的asp.net应用程序中建立一个IPData目录,在IPData目录中创建一个IPData.txt文件,在Web.config中添加以下配置    *.txt" verb="*" type="System.Web.HttpForbiddenHandler"/>---代码的作用是禁止访问...
  • 原文发布时间为:2008-07-27 —— 来源于本人的百度文章 [由搬家工具导入]webconfig 中<appSettings/> 得后面代码添加如下:<appSettings/> <connectionStrings> <add name="testConn" ...
  • 若要建立访问特定目录的条件,则必须将一个包含 部分的配置文件放置在该目录中。为该目录设置的条件也会应用到其子目录,除非子目录中的配置文件重写这些条件。此部分的常规语法如下所 示。 <[ element ] [ ...
  • 完整带图IIS配置,通过图片的说明,更加快速学习和掌握IIS配置,大有利于开发
  • webconfig详解

    2011-09-17 17:45:27
    <configuration> 所有.NET配置文件所必须的...2、建立网页test1.aspx,加个标签。 宋体"> <asp:Label id="lblSiteName" runat="server" Font-Bold="True" Font-Size="Large"></asp:Label> ...
  • webconfig配置

    2012-03-11 08:40:00
    asp.NET中服务器端session状态的存储准备工作: 为了您能更好的体验到实验现象,您可以建立一个叫做SessionState.aspx的页面,然后把以下这些代码添加到< body>< /body>中。< scriptrunat="server">Sub Session_Add...
  • WebConfig的那些事儿

    千次阅读 热门讨论 2014-03-21 00:16:35
     下面我们以一个例子来说明节点的用法,在我们的asp.net应用程序中建立一个IPData目录,在IPData目录中创建一个IPData.txt文件,然后在Web.config中添加以下配置: *.txt" verb="*" type="System.Web....
  • 他们各个都有一个webconfig配置文件,部署后发现网站正常,可是WEB接口却报错,说配置文件出了问题,仔细检查发现WEB接口用的是网站的配置文件,一下子没招了. 后来在网上一查,发现利用配置文件的配置节可以让它不...
  • webConfig中的session超时详细设置

    万次阅读 2012-01-17 19:47:08
    webConfig中的session超时详细设置 我们在webConfig中设置Session超时的时候,如果最后发行的地址是远程服务器,我们很多不是必须的属性并不用设置,如果设之后,倒不能让 session超时奏效。我在做现在的程序的时候...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,720
精华内容 1,088
热门标签
关键字:

webconfig建立