一、配置文件入门
.Net提供了一种保存项目配置信息的办法,就是利用配置文件,配置文件的后缀一般是.config。在WinForm程序中配置文件一般是App.config。在Asp.net中一般默认是web.config。 一个.config配置文件都是基于XML的文本文件,并且可以保存到Web应用程序中的任何目录中。在发布Web应用程序时web.config文件并不编译进dll文件中。将来如果客户端发生了变化,仅仅需要使用记事本打开Web.config文本编辑相关的设置就可以重新正常使用,而无需重新编译程序。 1.配置文件的查找 machine.config在我的电脑的路径是:C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 由于里面的内容比较多,而且看不懂,所以贴出来也没有什么用了。 在同样的文件夹下还有一个web.config文件,这个文件包含了Asp.net网站的常用配置。Asp.net网站IIS启动的时候会加载配置文件中的配置信息,然后缓存这些信息,这样就不必每次去读取配置信息。在运行过程中asp.net应用程序会监视配置文件的变化情况,一旦编辑了这些配置信息,就会重新读取这些配置信息并缓存。 当我们要读取某个节点或者节点组信息时,是按照以下方式搜索的: 当前页面所在目录的web.config -> 上级目录直至根目录的web.config -> C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\webconfig.config -> C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 所以如果我们对某个网站或者某个文件夹有特定要求的配置,可以在相应的文件夹下创建一个web.config文件,覆盖掉上级文件夹中的web.config文件中的同名配置即可。这些配置信息的寻找只查找一次,所以便缓存起来供后来的调用。在asp.net应用程序运行过程中,如果web.config文件发生更改就会导致相应的应用程序重新启动,这时存储在服务器内存中的用户会话信息就会丢失(如存储在内存中的Session)。一些软件(杀毒软件)每次完成对web.config的访问时就会修改web.config的访问时间属性,也会导致asp.net应用程序的重启。 2、常见的配置节点及读取 web.config文件是一个XML文件,它的根节点是<configuration>,在<configuration>节点下的常见子节点有:<configSections>、<appSettings>、<connectionStrings>和<system.web>。其中<appSettings>节点主要用于配置一些网站的应用配置信息,而<connectionStrings>节点主要用于配置网站的数据库连接字符串信息。 <system.web>节点主要是网站运行时的一些配置,它的常见节点有下面这些: <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> <connectionStrings>节点 <connectionStrings> <!--SQL Server数据库配置--> <add name="DBConnection" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;User ID=sa;Password=123"/> </connectionStrings> <compilation>节点 <authentication>节点 <customErrors>节点 2013-04-16 今天同事在部署程序的时候,程序在本地测试正常,传上服务器就出错,但是不知道相信错误信息在哪里被屏蔽了,当时就是设置这个地方传上服务器后,相应的详细错误信息就显示了。 <customErrors mode="Off"></customErrors> <error>子节点 <customErrorsmode="On"defaultRedirect="GenericErrorPage.htm"> <errorstatusCode="403"redirect="403.htm"/> <errorstatusCode="404"redirect="404.htm"/> </customErrors> 在上面的配置中如果用户访问的页面不存在就会跳转到404.htm页面,如果用户没有权限访问请求的页面则会跳转到403.htm页面,403.htm和404.htm都是我们自己添加的页面,我们可以再页面中给出友好的错误提示。 <httpHandlers> <addpath="*.rules"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.xoml"verb="*"type="System.ServiceModel.Activation.HttpHandler,System.ServiceModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/> <addpath="trace.axd"verb="*"type="System.Web.Handlers.TraceHandler"validate="true"/> <addpath="WebResource.axd"verb="GET"type="System.Web.Handlers.AssemblyResourceLoader"validate="true"/> <addpath="*.axd"verb="*"type="System.Web.HttpNotFoundHandler"validate="true"/> <addpath="*.aspx"verb="*"type="System.Web.UI.PageHandlerFactory"validate="true"/> <addpath="*.ashx"verb="*"type="System.Web.UI.SimpleHandlerFactory"validate="true"/> <addpath="*.asmx"verb="*"type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"validate="false"/> <addpath="*.rem"verb="*"type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/> <addpath="*.soap"verb="*"type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/> <addpath="*.asax"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.ascx"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.master"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.skin"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.browser"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.sitemap"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.dll.config"verb="GET,HEAD"type="System.Web.StaticFileHandler"validate="true"/> <addpath="*.exe.config"verb="GET,HEAD"type="System.Web.StaticFileHandler"validate="true"/> <addpath="*.config"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.cs"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.csproj"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.vb"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.vbproj"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.webinfo"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.licx"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.resx"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.resources"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.mdb"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.vjsproj"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.java"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.jsl"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.ldb"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.ad"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.dd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.ldd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.sd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.cd"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.adprototype"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.lddprototype"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.sdm"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.sdmDocument"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.mdf"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.ldf"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.exclude"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.refresh"verb="*"type="System.Web.HttpForbiddenHandler"validate="true"/> <addpath="*.svc"verb="*"type="System.ServiceModel.Activation.HttpHandler,System.ServiceModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"validate="false"/> <addpath="*"verb="GET,HEAD,POST"type="System.Web.DefaultHttpHandler"validate="true"/> <addpath="*"verb="*"type="System.Web.HttpMethodNotAllowedHandler"validate="true"/> </httpHandlers> 从上面的配置中可以看出,针对*.mdf、*.ldf文件的Get或者Post请求都会交给System.Web.HttpForbiddenHandler来处理,处理的结果就是用户不能查看或者下载相关的文件。如果我们某个文件夹下的文件或者某个类型的文件不允许用户下载,可以在</httpHandlers>节点中增加相应的子节点。 <httpRuntime>节点 <httpRuntime>节点用于对ASP.NET HTTP运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。 <httpRuntime maxRequestLength="40960" executionTimeout="60" appRequestQueueLimie="100"/> <pages>节点 <pagesbuffer="true"enableViewStateMac="true"validateRequest="false"/> <sessionState>节点 <sessionStatecookieless="false"mode="InProc"timeout="30"/> 上面的节点配置是设置在asp.net应用程序中启用Cookie,并且指定会话状态模式为在进程中保存会话状态,同时还指定了会话超时为30分钟。 <globalization>节点 <globalizationfileEncoding="utf-8"requestEncoding="utf-8"responseEncoding="utf-8"/> |
|