標籤:factor asc 部署 states 緩衝 cfile xom mdf clu
一、設定檔入門
.Net提供了一種儲存項目配置資訊的辦法,就是利用設定檔,設定檔的尾碼一般是.config。在WinForm程式中設定檔一般是App.config。在Asp.net中一般預設是web.config。
一個.config設定檔都是基於XML的文字檔,並且可以儲存到Web應用程式中的任何目錄中。在發布Web應用程式時web.config檔案並不編譯進dll檔案中。將來如果用戶端發生了變化,僅僅需要使用記事本開啟Web.config文本編輯相關的設定就可以重新正常使用,而無需重新編譯器。
1.設定檔的尋找
我們先從設定檔的尋找方式來瞭解設定檔。
.net提供了一個針對當前機器的設定檔,這個檔案是machine.config,它位於%windir%Microsoft.NETFrameworkv2.0.50727CONFIG檔案下。
(%windir%是系統磁碟分割下的系統目錄,在命令列模式下輸入%windir%然後斷行符號就能查看當前機器的系統目錄,在Windows 2003以及Window XP中%windir%是系統磁碟分割下的windows目錄,在Windows 2000中%windir%是系統磁碟分割下的WinNT目錄)。這個檔案裡面定義了針對當前及其的WinForm程式和Asp.net應用程式的配置。
machine.config在我的電腦的路徑是:C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 由於裡面的內容比較多,而且看不懂,所以貼出來也沒有什麼用了。
在同樣的檔案夾下還有一個web.config檔案,這個檔案包含了Asp.net網站的常用配置。Asp.net網站IIS啟動的時候會載入設定檔中的配置資訊,然後緩衝這些資訊,這樣就不必每次去讀取配置資訊。在運行過程中asp.net應用程式會監視設定檔的變化情況,一旦編輯了這些配置資訊,就會重新讀取這些配置資訊並緩衝。
當我們要讀取某個節點或者節點群組資訊時,是按照以下方式搜尋的:
(1)、如果在當前頁面所在的目錄下存在web.config檔案,查看是否存在所要尋找的節點名稱,如果存在返回結果並停止尋找。
(2)、如果當前頁面所在目錄下不存在web.config檔案或者web.config檔案中不存在該節點名,則尋找它的上級目錄,直到網站的根目錄。
(3)、如果網站根目錄下不存在web.config檔案或者web.config檔案中不存在該節點名則在 C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\webconfig.config檔案中尋找。
(4)如果在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\webconfig.config檔案中不存在響應的節點則在 C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config中尋找。
(5)如果仍然沒有找到則返回null。
當前頁面所在目錄的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>節點
<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>
<connectionStrings>節點
<connectionStrings>節點主要用於設定資料庫串連的,我們可以在<connectionStrings>節點中增加任意個節點來儲存資料庫連接字串,以後再代碼中通過代碼的方法動態擷取節點的值來執行個體化資料庫連接對象,這樣更改資料庫僅僅需要更改一下設定檔即可。
<connectionStrings> <!--SQL Server資料庫配置--> <add name="DBConnection" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;User ID=sa;Password=123"/></connectionStrings>
<compilation>節點
<compilation>節點配置ASP.NET使用的所有編譯設定,預設的debug屬性為"true",即允許調試,在這種情況下會影響網站的效能,所以在部署以後應該將該節點的值設定為false。
<authentication>節點
設定asp.net身分識別驗證模式,有四種身分識別驗證模式,取值如下:
Mode 說明
Windows 使用Windows身分識別驗證,適用於域使用者或者區域網路使用者。
Forms 使用表單驗證,依靠網站開發人員進行身分識別驗證。
Passport 使用微軟提供的驗證服務進行身分識別驗證。
Node 不進行任何身分識別驗證
<customErrors>節點
<customErrors>節點用於定義一些錯誤資訊的資訊。此節點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示程式發生錯誤時重新導向到的預設URL,如果沒有指定該屬性則顯示一般性錯誤。Mode屬性是一個必選屬性,它有三個可能值,他們所代表的意義分別如下:
Mode 說明
On 表示在本地和遠端使用者都會看到自訂錯誤資訊。
Off 禁用自訂錯誤資訊,本地和遠端使用者都會看到詳細的錯誤資訊。
RemoteOnly 表示本機使用者將看到詳細錯誤資訊,而遠端使用者將會看到自訂錯誤資訊。
有必要說明一下本機使用者和遠端使用者的概念。當我們訪問Asp.net應用程式時所使用的機器和發布asp.net應用程式所使用的機器為同一台機器時為本機使用者,否則就算為遠端使用者。在開發調試階段為了尋找錯誤。Mode屬性建議設定為Off,而在部署階段應將Mode屬性設定為On或者RemoteOnly,以避免這些詳細的錯誤資訊暴露了程式碼細節從而引來駭客的入侵。
2013-04-16
今天同事在部署程式的時候,程式在本地測試正常,傳上伺服器就出錯,但是不知道相信錯誤資訊在哪裡被屏蔽了,當時就是設定這個地方傳上伺服器後,相應的詳細錯誤資訊就顯示了。
<customErrors mode="Off"></customErrors>
<error>子節點
在<customRrrors>節點下還包含有<error>子節點,這個節點主要是根據伺服器的HTTP錯誤狀態碼而重新導向到我們自訂的錯誤頁面,注意要使<error>子節點下的配置生效,必須將<custonErrors>節點的Mode屬性設定為"On"。
<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>節點
<httpHandlers>節點用於根據使用者請求的URL和HTTP謂詞將使用者的請求交給相應的處理常式。可以再配置層級的任何層次配置此節點,也就是說可以針對某個特定目錄下制定的特殊檔案進行特殊處理。
下面是與machine.config檔案同一目錄下的web.config檔案中的<httpHandlers>節點配置:
<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運行庫設定。該節可以在電腦、網站、應用程式和子目錄層級聲明。
例如下面的配置控制使用者最大能上傳的檔案為40M(40*1024k),最大逾時時間為60秒,最大並發請求為100個。
<httpRuntime maxRequestLength="40960" executionTimeout="60" appRequestQueueLimie="100"/>
<pages>節點
<pages>節點用於表示對特定頁設定,主要有三個屬性,分別如下:
屬性名稱 說明
buffer 是否啟用了HTTP響應緩衝。
enableViewStateMac 是否應該對頁的檢視狀態運行電腦身分識別驗證檢查(MAC)
validateRequest 是否驗證使用者輸入中有跨網站指令碼攻擊和SQL注入式漏洞攻擊,預設為true,如果出現匹配情況就會發生HttpRequestValidationException異常。對 於包含線上文字編輯器頁面一半自行驗證使用者輸入而將此屬性視為false。
<pagesbuffer="true"enableViewStateMac="true"validateRequest="false"/>
<sessionState>節點
<sessionState>節點用於配置當前asp.net應用程式的工作階段狀態配置。以下就是一個常見配置:
<sessionStatecookieless="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應用程式中的預設配置:
<globalizationfileEncoding="utf-8"requestEncoding="utf-8"responseEncoding="utf-8"/>
http://www.cnblogs.com/kissdodog/archive/2013/04/09/3009854.html
設定檔入門 - WebConfig.config常用配置節點介紹