.net基礎學習:ASP.NET的Web.Config檔案中的元素

iDotNetSpace發表於2010-05-31
Web.Config檔案預設格式如下:





 

 

 

   

   

 




 

像任何*.config檔案一樣,Web.config定義了根級的元素。它能夠包含大量的子元素,用來控制Web應用程式在執行時應該怎樣執行。

 

Web.config檔案的部分子元素
 

 該元素用於確立自定義名稱/值對,這樣它們可以以程式設計方式讀進記憶體供頁面使用。
 

 該元素可以配置 ASP.NET 使用的安全身份驗證模式,以標識傳入的使用者。

 也是和安全相關聯的元素,用於定義哪一個使用者可以訪問Web伺服器上的哪些資源。
 

 該元素用於啟用(或禁用)除錯,並定義由該Web應用程式使用的預設.NET語言,它可以選擇性地定義應該被自動引用的外部.NET程式集。
 

 該元素用於保持在該站點內使用的外部連線字串。
 

 該元素用於準確地告知執行庫如何顯示在Web應用程式工作期間出現的錯誤。
 如果在執行請求的過程中出現未處理的錯誤,開發人員通過該節可以配置要顯示的 html 錯誤頁以代替錯誤堆疊跟蹤。



 該元素用於對該Web應用程式配置全域性化的各項設定。
 

 該元素用於控制以何種方式和在何處將由.NET執行庫儲存會話狀態資料。
 

 該元素用於對該Web應用程式啟用(或禁用)跟蹤支援。
 

注   關於Web.config格式的細節請檢視.NET Framework 2.0 SDK文件內的“ASP.NET Settings Schema”話題。

通過啟用跟蹤

 

Web.config檔案中第一個要介紹的方面就是子元素。這個XML實體可以用任何數量的特性進一步限定它的行為,如下所示:


  localOnly="true|false"

  pageOutput="true|false"

  requestLimit="integer"

  traceMode="SortByTime|SortByCategory"/>
 
enabled
 指定是否對作為一個整體的應用程式啟用跟蹤(預設設定值為false)。在前一章提到,可以對一個給定的*.aspx檔案使用@Page指令有選擇性地啟用跟蹤

單獨的頁面可以使用指令啟用跟蹤。然而,如果希望在Web應用程式中使所有的頁面都啟用跟蹤功能,只需簡單更新,如下所示:



  enabled="true"

  requestLimit="10"

  pageOutput="false"

  traceMode="SortByTime"

  localOnly="true"

/>


localOnly
 指明跟蹤資訊僅在宿主Web伺服器上可見,而在遠端客戶機上不可見(預設設定值為true)
 
pageOutput
 指定應該如何檢視跟蹤輸出
 
requestLimit
 指定將儲存在伺服器上的跟蹤請求的數量,預設值為10。如果達到極限,跟蹤就自動禁用
 
traceMode
 指明跟蹤資訊以其被處理的順序顯示。預設值為SortByTime,但也可進行配置使得它按照種類排序

通過自定義錯誤輸出

元素可以用來自動將所有錯誤重定向到一個自定義的*.htm檔案集中。如果你希望建立一個比CLR提供的預設頁面更使用者友好的錯誤頁面的話,就可以用到它。元素的外觀大體如下所示:

 





 

例如元素的用處,假設ASP.NET Web應用程式有兩個*.htm檔案。第一個檔案(genericError.htm)是一個捕獲所有錯誤的頁面。可能這個頁面包含了一個你的公司的標誌圖片,一個傳送電子郵件到系統管理員的連結,還有一封冗長的道歉信。第二個檔案(Error404.htm)是一個自定義的錯誤頁面,它應該僅在執行時探測到錯誤編號404(可怕的“資源沒有發現”錯誤)時出現。現在,如果要確保所有的錯誤被這些自定義頁面處理,可以按如下程式碼所示更新Web.config檔案:

 























 

注意,根元素是如何用來為所有未被處理的錯誤指定通用頁面的名字的。一個可能出現在開始標籤中的特性是mode。預設的設定是RemoteOnly,如果HTTP請求來自同一臺作為Web伺服器的機器(這對於想要看細節的開發者來說是非常有幫助的),那麼它指示執行庫不顯示自定義錯誤頁。當設定mode特性為on時,這將導致自定義錯誤對所有機器可見(包括開發工具)。也要注意,元素可以支援許多巢狀元素以指定哪個頁面將用來處理指定的錯誤程式碼。

為了測試這些自定義錯誤重定向,構建一個定義兩個Button部件的*.aspx頁面,然後如下處理這兩個控制元件的Click事件:


private void btnGeneralError_Click(object sender, EventArgs e)
{
    // 這將觸發一般錯誤。
  throw new Exception("General error...");

}

private void btn404Error_Click(object sender, EventArgs e)
{
    // 這將觸發404錯誤(假設沒有名為MyPage.aspx的檔案)。
  Response.Redirect("MyPage.aspx");
}


 

通過儲存狀態

Web.config檔案最強大的方面是元素。預設情況下,ASP.NET將使用由ASP.NET工作程式(aspnet_wp.exe)承載的內部程式*.dll儲存會話狀態。與其他*.dll一樣,好的一面是可以儘可能快地訪問資訊,而缺點是,如果這個應用程式域崩潰了(不管什麼原因),所有的使用者狀態資料都會被銷燬。此外,當儲存狀態資料為一個程式內*.dll時,你不能與一個聯網的Web farm互動。預設情況下,Web.config檔案的元素如下所示:
 

  mode="InProc"

  stateConnectionString="tcpip=127.0.0.1:42424"

  sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

  cookieless="false"

  timeout="20"

/>


如果Web應用程式由一個Web伺服器主機承載,那麼這個儲存的預設模式正好合適。然而,在ASP.NET下,你可以指定執行庫讓ASP.NET會話狀態伺服器(aspnet_state.exe)這個代理程式承載會話狀態*.dll。這麼做,能夠從aspnet_wp.exe將*.dll解除安裝到獨有的*.exe中。第一步是啟動aspnet_state.exe Windows服務。只需要簡單地在命令列輸入:

net start aspnet_state


另外,也可以從Control Panel的Administrative Tools資料夾訪問Services applet來啟動aspnet_state.exe。

這個方法的主要優點是當計算機使用屬性視窗啟動時,你能夠通過配置aspnet_state.exe使其自動啟動。無論如何,一旦會話狀態伺服器執行起來,就可以修改Web.config檔案的元素,如下所示:

 


  mode="StateServer"

  stateConnectionString="tcpip=127.0.0.1:42424"

  sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

  cookieless="false"

  timeout="20"

/>

 

這裡,mode特性已經設定為StateServer。此刻,CLR將在aspnet_state.exe內承載與會話相關的資料。在這種方式下,如果承載Web應用程式的應用程式域崩潰了,會話資料就會儲存下來。還要注意,元素也能支援stateConnectionString特性。預設的TCP/IP地址值(127.0.0.1)指向本地計算機。如果你願意讓.NET執行庫使用網路上另一臺計算機上的aspnet_state.exe服務(又是Web farm),你可以自由更新這個值。

最後,如果要求Web應用程式具有最高階的隔離性和永續性,你可以讓執行庫將所有會話狀態資料儲存到Microsoft SQL Server中。對Web.config檔案做適當的更新非常簡單:

 


  mode="SQLServer"

  stateConnectionString="tcpip=127.0.0.1:42424"

  sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

  cookieless="false"

  timeout="20"

/>

然而,在開始嘗試執行相關的Web應用時,先需要確保目標計算機(由sqlConnectionString特性指定)已經得到正確的配置。安裝.NET Framework 2.0 SDK(或Visual Studio 2005)時,有兩個檔案可供選擇,InstallSqlState.sql和UninstallSqlState.sql,預設情況下,它們位於\Microsoft.NET\ Framework\。在目標計算機上,必須使用如SQL Server 查詢分析器(與Microsoft SQL Server一起釋出的)等工具來執行InstallSqlState.sql檔案。

一旦執行了這個SQL指令碼,你將發現已經建立了一個新的SQL Server資料庫(ASPState),它包含大量被ASP.NET執行庫呼叫的儲存過程和一套用來儲存會話資料本身的表(同時,出於交換目的tempdb資料庫已經用一套表更新了)。你可能已猜到,配置Web應用程式將會話資料儲存到SQL Server是所有可能選項中最慢的。這麼做的好處是,使用者資料可以儘可能地持久儲存了(即使Web伺服器重啟了)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-664049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章