設定與檢測

Microsoft提供

注意

自本文撰寫以來,ASP.NET 成員資格提供者已被 ASP.NET 身分識別取代。 強烈建議您更新應用程式以使用 ASP.NET 身分識別 平臺,而不是本文撰寫時精選的成員資格提供者。 ASP.NET 身分識別對於 ASP.NET 成員資格系統有一些優點,包括 :

  • 更好的效能
  • 改善擴充性和可測試性
  • 支援 OAuth、OpenID Connect 和雙因素驗證
  • 宣告型身分識別支援
  • 與 ASP.Net Core 更好的互通性

ASP.NET 2.0 中的組態和檢測有重大變更。 新的 ASP.NET 設定 API 允許以程式設計方式進行設定變更。 此外,有許多新的組態設定都允許新的組態和檢測。

ASP.NET 2.0 中的組態和檢測有重大變更。 新的 ASP.NET 設定 API 允許以程式設計方式進行設定變更。 此外,有許多新的組態設定都允許新的組態和檢測。

在本課程模組中,我們將討論群組態 API ASP.NET,因為它與讀取和寫入 ASP.NET 組態檔有關,我們也將討論 ASP.NET 檢測。 我們也會涵蓋 ASP.NET 追蹤中可用的新功能。

ASP.NET 設定 API

ASP.NET 組態 API 可讓您使用單一程式設計介面來開發、部署和管理應用程式組態資料。 您可以使用組態 API,以程式設計方式開發及修改完整的 ASP.NET 組態,而不需要直接編輯組態檔中的 XML。 此外,您可以在主控台應用程式和腳本中使用組態 API,這些 API 是在 Web 型管理工具中,以及在 Microsoft Management Console (MMC) 嵌入式管理單元中開發。

下列兩個組態管理工具會使用組態 API,並隨附于 .NET Framework 2.0 版:

  • ASP.NET MMC 嵌入式管理單元,其使用組態 API 簡化系統管理工作,提供來自所有組態階層層級之本機設定資料的整合檢視。
  • 網站管理工具,可讓您管理本機和遠端應用程式的組態設定,包括託管的網站。

ASP.NET 組態 API 包含一組 ASP.NET 管理物件,可用來以程式設計方式設定網站和應用程式。 管理物件會實作為.NET Framework類別庫。 組態 API 程式設計模型可藉由在編譯時期強制執行資料類型,協助確保程式碼一致性和可靠性。 為了更輕鬆地管理應用程式設定,組態 API 可讓您檢視從組態階層中的所有點合併成單一集合的資料,而不是將資料檢視為不同組態檔的不同集合。 此外,組態 API 可讓您操作整個應用程式組態,而不需直接編輯組態檔中的 XML。 最後,API 藉由支援系統管理工具來簡化設定工作,例如網站管理工具。 設定 API 支援在電腦上建立組態檔,並在多部電腦上執行組態腳本,藉此簡化部署。

注意

組態 API 不支援建立 IIS 應用程式。

使用本機和遠端組態設定

Configuration 物件代表套用至特定實體實體之組態設定的合併檢視,例如電腦或邏輯實體,例如應用程式或網站。 指定的邏輯實體可以存在於本機電腦或遠端伺服器上。 當指定的實體沒有組態檔存在時,Configuration 物件代表由Machine.config檔案所定義的預設組態設定。

您可以從下列類別使用其中一個開啟的組態方法,取得 Configuration 物件:

  1. 如果您的實體是用戶端應用程式,則為 ConfigurationManager 類別。
  2. 如果您的實體是 Web 應用程式,則為 WebConfigurationManager 類別。

這些方法會傳回 Configuration 物件,進而提供處理基礎組態檔所需的方法和屬性。 您可以存取這些檔案以供讀取或寫入。

讀取

您可以使用 GetSection 或 GetSectionGroup 方法來讀取組態資訊。 讀取的使用者或進程必須具有階層中所有組態檔的讀取權限。

注意

如果您使用採用 path 參數的靜態 GetSection 方法,path 參數必須參考程式碼執行所在的應用程式。 否則會忽略 參數,並傳回目前執行中應用程式的組態資訊。

寫入

您可以使用其中一個 Save 方法來撰寫組態資訊。 寫入的使用者或進程必須具有組態檔和目前組態階層層級目錄的寫入權限,以及階層中所有組態檔的讀取權限。

若要產生組態檔,代表指定之實體的繼承組態設定,請使用下列其中一種儲存組態方法:

  1. 用來建立新組態檔的 Save 方法。
  2. SaveAs 方法,可在另一個位置產生新的組態檔。

組態類別和命名空間

許多組態類別和方法彼此相似。 下表描述最常使用的組態類別和命名空間。

組態類別或命名空間 說明
System.Configuration 命名空間 包含所有.NET Framework應用程式的主要組態類別。 區段處理常式類別可用來從 GetSection 和 GetSectionGroup 等方法取得區段的組態資料。 這兩種方法是非靜態的。
System.Configuration.Configuration 類別 代表一組電腦、應用程式、Web 目錄或其他資源的組態資料。 這個類別包含實用的方法,例如 GetSection 和 GetSectionGroup,可用來更新組態設定,並取得區段和區段群組的參考。 這個類別是做為取得設計階段設定資料的方法的傳回型別,例如 WebConfigurationManager 和 ConfigurationManager 類別的方法。
System.Web.Configuration 命名空間 包含 ASP.NET 組態設定中所定義 ASP.NET 組 區段的區段處理常式類別。 區段處理常式類別可用來從 GetSection 和 GetSectionGroup 等方法取得區段的組態資料。
System.Web.Configuration.WebConfigurationManager 類別 提供實用的方法來取得執行時間和設計階段組態設定的參考。 這些方法會使用 System.Configuration.Configuration 類別作為傳回型別。 您可以交換使用這個類別的靜態 GetSection 方法或 System.Configuration.ConfigurationManager 類別的非靜態 GetSection 方法。 針對 Web 應用程式設定,建議使用 System.Web.Configuration.WebConfigurationManager 類別,而不是 System.Configuration.ConfigurationManager 類別。
System.Configuration.Provider 命名空間 提供自訂和擴充組態提供者的方法。 這是組態系統中所有提供者類別的基類。
System.Web.Management 命名空間 包含用來管理和監視 Web 應用程式健康狀態的類別和介面。 嚴格來說,此命名空間不會被視為組態 API 的一部分。 例如,追蹤和事件引發是由這個命名空間中的類別完成。
System.Management.Instrumentation 命名空間 提供應用程式檢測所需的類別,以透過 Windows Management Instrumentation (WMI) 向潛在取用者公開其管理資訊和事件。 ASP.NET 健康情況監視會使用 WMI 來傳遞事件。 嚴格來說,此命名空間不會被視為組態 API 的一部分。

從 ASP.NET 組態檔讀取

WebConfigurationManager 類別是從組態檔讀取的核心類別 ASP.NET。 基本上有三個步驟可讀取 ASP.NET 組態檔:

  1. 使用 OpenWebConfiguration 方法取得 Configuration 物件。
  2. 取得組態檔中所需區段的參考。
  3. 從組態檔讀取所需的資訊。

Configuration 物件代表不代表特定的組態檔。 相反地,它代表電腦、應用程式或網站的組態合併檢視。 下列程式碼範例會具現化 Configuration 物件,此物件代表名為 ProductInfo的 Web 應用程式組態。

Configuration config = WebConfigurationManager.OpenWebConfiguration("/ProductInfo);

注意

請注意,如果 /ProductInfo 路徑不存在,上述程式碼會傳回machine.config檔案中指定的預設組態。

擁有 Configuration 物件之後,您就可以使用 GetSection 或 GetSectionGroup 方法來鑽研組態設定。 下列範例會取得上述 ProductInfo 應用程式的模擬設定參考:

Configuration config =
    WebConfigurationManager.OpenWebConfiguration("/ProductInfo);
IdentitySection section =
   (IdentitySection)config.GetSection("system.web/identity");

寫入 ASP.NET 組態檔

如同從組態檔讀取,WebConfigurationManager 類別是寫入組態檔的核心 Asp.NET。 另外還有三個步驟可寫入 ASP.NET 組態檔。

  1. 使用 OpenWebConfiguration 方法取得 Configuration 物件。
  2. 取得組態檔中所需區段的參考。
  3. 使用 Save 或 SaveAs 方法,從組態檔寫入所需的資訊。

下列程式碼會將編譯 > 專案的 <debug屬性變更為 false:

System.Configuration.Configuration updateWebConfig =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/webApp");

System.Web.Configuration.CompilationSection compilation =
    updateWebConfig.GetSection("system.web/compilation")
    as System.Web.Configuration.CompilationSection;

compilation.Debug = false;

if (!compilation.SectionInformation.IsLocked) {
    updateWebConfig.Save();
    Response.Write("Save Success!");
} else {
    Response.Write("Save Failed!");
}

執行此程式碼時,編譯 > 專案的錯屬性 < 將會針對webApp應用程式的web.config檔案設定為 false。

System.Web.Management 命名空間

System.Web.Management 命名空間提供類別和介面,用於管理和監視 ASP.NET 應用程式的健康情況。

記錄是藉由定義將事件與提供者建立關聯的規則來完成。 此規則會定義傳送至提供者的事件種類。 下列基底事件可供您記錄:

WebBaseEvent 所有事件的基底事件類別。 包含所有事件的必要屬性,例如事件程式碼、事件詳細資料代碼、引發事件的日期和時間、序號、事件訊息和事件詳細資料。
WebManagementEvent 管理事件的基底事件類別,例如應用程式存留期、要求、錯誤和稽核事件。
WebHeartbeatEvent 應用程式定期產生的事件,以擷取有用的執行時間狀態資訊。
WebAuditEvent 安全性稽核事件的基類,用來標示授權失敗、解密失敗 等條件。
WebRequestEvent 所有資訊要求事件的基類。
WebBaseErrorEvent 表示錯誤狀況之所有事件的基類。

可用的提供者類型可讓您將事件輸出傳送至事件檢視器、SQL Server、Windows Management Instrumentation (WMI) 和電子郵件。 預先設定的提供者和事件對應可減少記錄事件輸出所需的工作量。

ASP.NET 2.0 會使用現成的事件記錄提供者,根據啟動和停止的應用程式域記錄事件,以及記錄任何未處理的例外狀況。 這有助於涵蓋一些基本案例。 例如,假設您的應用程式擲回例外狀況,但使用者不會儲存錯誤,而且您無法重現錯誤。 使用預設事件記錄規則時,您將能夠收集例外狀況和堆疊資訊,以深入瞭解發生何種錯誤。 如果您的應用程式遺失會話狀態,則適用另一個範例。 在此情況下,您可以查看事件記錄檔,以判斷應用程式域是否正在回收,以及應用程式域第一次停止的原因。

此外,健康情況監視系統也是可延伸的。 例如,您可以定義自訂 Web 事件、在應用程式內引發這些事件,然後定義規則,以將事件資訊傳送至提供者,例如電子郵件。 這可讓您輕鬆地將檢測系結至健康情況監視提供者。 另一個範例是,您可以在每次處理訂單時引發事件,並設定規則,將每個事件傳送至SQL Server資料庫。 您也可以在使用者無法在資料列中多次登入時引發事件,並設定事件以使用以電子郵件為基礎的提供者。

預設提供者和事件的組態會儲存在全域Web.config檔案中。 全域Web.config檔案會儲存儲存在 Machine.config 檔案中的所有 Web 型設定,ASP.NET 1x。 全域Web.config檔案位於下列目錄中:

%windir%\Microsoft.Net\Framework\v2.0.*\config\Web.config

<全域Web.config檔案的 healthMonitoring > 區段提供預設組態設定。 您可以在應用程式的 Web.config 檔案中實 < 作 healthMonitoring > 區段,以覆寫這些設定或設定自己的設定。

<全域Web.config檔案的 healthMonitoring > 區段包含下列專案:

提供者 包含針對事件檢視器、WMI 和SQL Server設定的提供者。
eventMappings 包含各種 WebBase 類別的對應。 如果您產生自己的事件類別,您可以擴充此清單。 產生您自己的事件類別可讓您更細微地瞭解傳送資訊給的提供者。 例如,您可以將未處理的例外狀況設定為傳送至SQL Server,同時將您自己的自訂事件傳送至電子郵件。
規則 將 eventMappings 連結到提供者。
緩衝 與SQL Server和電子郵件提供者搭配使用,以判斷將事件排清給提供者的頻率。

以下是全域Web.config檔案中的程式碼範例。

<healthMonitoring>
  <!-- Event Log Provider being added. -->
  <providers>
    <add name="EventLogProvider"
         type="System.Web.Management.EventLogWebEventProvider,
               System.Web,Version=2.0.0.0,Culture=neutral,
               PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
  <!-- Event mapping provides a friendly name to the
events based on the WebBaseErrorEvent class. -->
  <eventMappings>
    <add name="All Errors"
         type="System.Web.Management.WebBaseErrorEvent,
               System.Web,Version=2.0.0.0,Culture=neutral,
               PublicKeyToken=b03f5f7f11d50a3a"
          startEventCode="0" endEventCode="2147483647" />
  </eventMappings>
  <!-- Rule tying the "All Errors" event mapping to the EventLog Provider. -->
  <rules>
    <add name="All Errors Default" eventName="All Errors"
         provider="EventLogProvider"
         profile="Default" minInstances="1"
         maxLimit="Infinite" minInterval="00:01:00" custom="" />
  </rules>
</healthMonitoring>

如何將事件儲存至事件檢視器

如先前所述,事件檢視器中的記錄事件的提供者會在全域Web.config檔案中為您設定。 根據預設,會記錄以 WebBaseErrorEventWebFailureAuditEvent 為基礎的所有事件。 您可以新增其他規則,以將其他資訊記錄至事件記錄檔。 例如,如果您想要記錄所有事件 (,也就是根據 WebBaseEvent) 的每個事件,您可以將下列規則新增至Web.config檔案:

<healthMonitoring>
    <rules>
        <add name="All Events" eventName="All Events"
             provider="EventLogProvider" profile="Critical" />
    </rules>
</healthMonitoring>

此規則會將 [所有事件] 事件對應連結至事件記錄提供者。 eventMapping 和提供者都包含在全域Web.config檔案中。

如何儲存事件以SQL Server

這個方法會使用由 Aspnet_regsql.exe 工具產生的 ASPNETDB 資料庫。 預設提供者會使用 LocalSqlServer 連接字串,該連接字串會使用 App_data 資料夾中的檔案型資料庫,或是本機 SQLExpress 實例SQL Server。 LocalSqlServer 連接字串和 SqlProvider 都會在全域Web.config檔案中設定。

全域Web.config檔案中的 LocalSqlServer 連接字串看起來像這樣:

<connectionStrings>
    <add name="LocalSqlServer"
         connectionString="data source=.\SQLEXPRESS;
         Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;
         User Instance=true"
         providerName="System.Data.SqlClient" />
</connectionStrings>

如果您想要使用另一個SQL Server實例,您必須使用可在 %windir%\Microsoft.Net\Framework\v2.0.* 資料夾中找到的 Aspnet_regsql.exe 工具。 使用 Aspnet_regsql.exe 工具,在SQL Server實例上產生自訂ASPNETDB資料庫,然後將連接字串新增至應用程式組態檔,然後使用新的連接字串新增提供者。 建立 ASPNETDB 資料庫之後,您必須設定規則,以將 eventMapping 連結到 sqlProvider。

無論您是使用預設的 SqlProvider 或設定自己的提供者,都必須新增規則,連結提供者與事件對應。 下列規則會將您在上方建立的新提供者連結到 [所有事件] 事件對應。 此規則會根據 WebBaseEvent 記錄所有事件,並將其傳送至將使用 MYASPNETDB 連接字串的 MySqlWebEventProvider。 下列程式碼會新增規則,以連結提供者與事件對應:

<healthMonitoring>
    <rules>
        <add name="All Events" eventName="All Events"
        provider="MySqlWebEventProvider" profile="Critical"/>
    </rules>
</healthMonitoring>

如果您想要只將錯誤傳送至SQL Server,您可以新增下列規則:

<add name="All Errors"
    eventName="All Errors"
    provider="MySqlWebEventProvider"
    profile="Critical"/>

如何將事件轉送至 WMI

您也可以將事件轉送至 WMI。 WMI 提供者預設會在全域Web.config檔案中為您設定。

下列程式碼範例會新增規則,以將事件轉送至 WMI:

<providers>
    <add name="WmiWebEventProvider"
      type="System.Web.Management.WmiWebEventProvider,System.Web,
         Version=2.0.0.0,Culture=neutral,
         PublicKeyToken=b03f5f7f11d50a3a" />
</providers>

您必須新增規則,以將 eventMapping 與提供者產生關聯,以及 WMI 接聽程式應用程式以接聽事件。 下列程式碼範例會新增規則,以將 WMI 提供者連結至 [所有事件] 事件對應:

<rules>
    <add name="All Events"
      eventName="All Events" provider="WmiWebEventProvider"
        profile="Critical" />
</rules>

如何將事件轉寄至電子郵件

您也可以將事件轉寄給電子郵件。 請小心您對應至電子郵件提供者的事件規則,因為您可能不小心傳送許多可能更適合SQL Server或事件記錄檔的資訊。 有兩個電子郵件提供者;SimpleMailWebEventProvider 和 TemplatedMailWebEventProvider。 每個都有相同的組態屬性,除了 「template」 和 「detailedTemplateErrors」 屬性之外,這兩者都僅適用于 TemplatedMailWebEventProvider。

注意

這兩個電子郵件提供者都未為您設定。 您必須將它們新增至您的Web.config檔案。

這兩個電子郵件提供者的主要差異在於 SimpleMailWebEventProvider 會在無法修改的一般範本中傳送電子郵件。 範例Web.config檔案會使用下列規則,將此電子郵件提供者新增至已設定的提供者清單:

<add name="mySimple-mailWebEventProvider"
     type="System.Web.Management.Simple-mailWebEventProvider"
     to="e-mail@foo.com" from="e-mail@foo.com"
     maxMessagesPerNotification="1" maxEventsPerMessage="10"
     buffer="true" bufferMode="Critical Notification"
     subjectPrefix="Web Events"/>

也會新增下列規則,將電子郵件提供者系結至 [所有事件] 事件對應:

<add name="All Events" eventName="All Events"
    provider="mySimple-mailWebEventProvider" profile="Critical"/>

ASP.NET 2.0 追蹤

ASP.NET 2.0 中追蹤有三個主要增強功能。

  1. 整合式追蹤功能
  2. 以程式設計方式存取追蹤訊息
  3. 改善應用層級追蹤

整合式追蹤功能

您現在可以將 System.Diagnostics.Trace 類別發出的訊息路由傳送至 ASP.NET 追蹤輸出,並將 ASP.NET 追蹤發出的訊息路由傳送至 System.Diagnostics.Trace。 您也可以將 ASP.NET 檢測事件轉送至 System.Diagnostics.Trace。 這項功能是由追蹤 > 元素的新writeToDiagnosticsTrace屬性 < 所提供。 當這個布林值為 true 時,ASP.NET 追蹤訊息會轉送到 System.Diagnostics 追蹤基礎結構,以供任何已註冊以顯示追蹤訊息的接聽程式使用。

以程式設計方式存取追蹤訊息

ASP.NET 2.0 允許透過 TraceCoNtextRecord 類別和 TraceRecords 集合,以程式設計方式存取所有追蹤訊息。 存取追蹤訊息的最有效率方式,就是在 ASP.NET 2.0) 中註冊 TraceCoNtextEventHandler (委派,以處理新的 TraceFinished 事件。 然後,您可以視需要迴圈查看追蹤訊息。

下列程式碼範例說明此問題:

void Page_Load(object sender, EventArgs e) {
    // Register a handler for the TraceFinished event.
    Trace.TraceFinished += new
        TraceContextEventHandler(this.OnTraceFinished);
    // Write a trace message.
    Trace.Write("Web Forms Infrastructure Methods", 
      "USERMESSAGE: Page_Load complete.");
}

// A TraceContextEventHandler for the TraceFinished event.
void OnTraceFinished(object sender, TraceContextEventArgs e) {
    TraceContextRecord r = null;
    // Iterate through the collection of trace records and write
    // them to the response stream.
    foreach (object o in e.TraceRecords) {
        r = (TraceContextRecord)o;
        Response.Write(String.Format("trace message: {0} <BR>",
        r.Message));
    }
}

在上述範例中,我迴圈執行 TraceRecords 集合,然後將每個訊息寫入回應資料流程。

改善Application-Level追蹤

透過引進追蹤元素的新 mostRecent 屬性 < ,可改善應用層級追蹤 > 。 這個屬性會指定是否顯示最新的應用層級追蹤輸出,以及超過 requestLimit 所指示之限制的較舊追蹤資料是否遭到捨棄。 如果為 false,則會針對要求顯示追蹤資料,直到到達 requestLimit 屬性為止。

ASP.NET 命令列工具

有數個命令列工具可協助設定 ASP.NET。 ASP.NET 開發人員應該熟悉aspnet_regiis.exe工具。 ASP.NET 2.0 提供三個其他命令列工具來協助設定。

下列命令列工具可供使用:

工具 使用
aspnet_regiis.exe 允許向 IIS 註冊 ASP.NET。 此工具有兩個版本隨附于 ASP.NET 2.0,一個用於 Framework) 資料夾中的 32 位系統 (,另一個用於 Framework64 資料夾中的 64 位系統 (。) 64 位版本將不會安裝在 32 位作業系統上。
aspnet_regsql.exe ASP.NET SQL Server註冊工具可用來建立 Microsoft SQL Server 資料庫,以供 ASP.NET 中的SQL Server提供者使用,或新增或移除現有資料庫中的選項。 Aspnet_regsql.exe檔案位於網頁伺服器上的 [drive:]\WINDOWS\Microsoft.NET\Framework\versionNumber 資料夾中。
aspnet_regbrowsers.exe ASP.NET 瀏覽器註冊工具會將所有全系統瀏覽器定義剖析並編譯成元件,並將元件安裝到全域組件快取中。 此工具會使用瀏覽器定義檔案 (。瀏覽器檔案) 來自 .NET Framework Browser 子目錄。 此工具位於 %SystemRoot%\Microsoft.NET\Framework\version\ 目錄中。
aspnet_compiler.exe ASP.NET 編譯工具可讓您就地編譯 ASP.NET Web 應用程式,或用於部署至目標位置,例如生產伺服器。 就地編譯有助於應用程式效能,因為使用者在編譯應用程式時,不會在第一次要求應用程式時遇到延遲。

因為aspnet_regiis.exe工具不是 ASP.NET 2.0 的新手,所以我們不會在這裡討論。

ASP.NET SQL Server註冊工具 - aspnet_regsql.exe

您可以使用 ASP.NET SQL Server註冊工具來設定數種類型的選項。 您可以指定 SQL 連線、指定哪些 ASP.NET 應用程式服務使用SQL Server來管理資訊、指出哪些資料庫或資料表用於 SQL 快取相依性,以及新增或移除使用SQL Server支援來儲存程式和會話狀態。

數個 ASP.NET 應用程式服務依賴提供者來管理從資料來源儲存和擷取資料。 每個提供者都是資料來源特有的。 ASP.NET 包含下列 ASP.NET 功能的SQL Server提供者:

當您安裝 ASP.NET 時,伺服器的Machine.config檔案會包含組態專案,這些組態元素會針對依賴提供者的每個 ASP.NET 功能指定SQL Server提供者。 根據預設,這些提供者會設定為連線到 SQL Server Express 2005 的本機使用者實例。 如果您變更提供者所使用的預設連接字串,則必須先使用Aspnet_regsql.exe安裝SQL Server資料庫和所選功能的任何 ASP.NET 功能。 如果您以 SQL 註冊工具指定的資料庫不存在, (aspnetdb 在命令列上未指定,則如果命令列上未指定資料庫) ,則目前的使用者必須具有許可權,才能在SQL Server中建立資料庫,以及在資料庫中建立架構元素。

SQL 快取相依性

ASP.NET 輸出快取的進階功能是 SQL 快取相依性。 SQL 快取相依性支援兩種不同的作業模式:一種使用資料表輪詢的 ASP.NET 實作,另一種模式則使用 SQL Server 2005 的查詢通知功能。 SQL 註冊工具可用來設定作業的資料表輪詢模式。

工作階段狀態

根據預設,會話狀態值和資訊會儲存在 ASP.NET 進程中的記憶體中。 或者,您可以將會話資料儲存在SQL Server資料庫中,供多部網頁伺服器共用。 如果您為 SQL 註冊工具指定的會話狀態資料庫不存在,則目前使用者必須具有許可權,才能在SQL Server中建立資料庫,以及在資料庫中建立架構元素。 如果資料庫存在,則目前使用者必須具有在現有資料庫中建立架構元素的許可權。

若要在 SQL Server 上安裝會話狀態資料庫,請執行 Aspnet_regsql.exe 工具,並使用 命令提供下列資訊:

  • 使用-S選項SQL Server實例的名稱。
  • 有權在執行 SQL Server 之電腦上建立資料庫的帳戶登入認證。 使用 -E 選項來使用目前登入的使用者,或使用 -U 選項來指定使用者識別碼以及指定密碼的 -P 選項。
  • 新增會話狀態資料庫的 -ssadd 命令列選項。

根據預設,您無法使用 Aspnet_regsql.exe 工具來在執行 SQL Server 2005 Express Edition 的電腦上安裝會話狀態資料庫。

ASP.NET 瀏覽器註冊工具 - aspnet_regbrowsers.exe

在 ASP.NET 1.1 版中,Machine.config檔案包含名為 < browserCaps 的 > 區段。 本節包含一系列 XML 專案,這些專案會根據正則運算式定義各種瀏覽器的組態。 針對 ASP.NET 2.0 版,新的 。BROWSER 檔案會使用 XML 專案定義特定瀏覽器的參數。 您可以藉由新增 新的 ,在新的瀏覽器上新增資訊。位於系統上 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browser 的資料夾瀏覽器檔案。

因為應用程式在每次需要瀏覽器資訊時都不會讀取.config檔案,所以您可以建立新的 。BROWSER 檔案並執行Aspnet_regbrowsers.exe,以將必要的變更新增至元件。 這可讓伺服器立即存取新的瀏覽器資訊,因此您不需要關閉任何應用程式來挑選資訊。 應用程式可以透過目前 HttpRequest 的 Browser 屬性來存取瀏覽器功能。

執行 aspnet_regbrowser.exe 時,可以使用下列選項:

選項 說明
-? 在命令視窗中顯示Aspnet_regbbrowsers.exe解說文字。
-i 建立執行時間瀏覽器功能元件,並將其安裝在全域組件快取中。
-u 從全域組件快取卸載執行時間瀏覽器功能元件。

ASP.NET 編譯工具 - aspnet_compiler.exe

ASP.NET 編譯工具可以使用兩種一般方式:就地編譯和部署編譯,其中指定了目標輸出目錄。

就地編譯應用程式

ASP.NET 編譯工具可以就地編譯應用程式,也就是說,它會模擬對應用程式發出多個要求的行為,因而導致一般編譯。 預先編譯網站的使用者不會在第一次要求時編譯頁面所造成的延遲。

當您就地預先編譯網站時,會套用下列專案:

  • 月臺會保留其檔案和目錄結構。
  • 您必須擁有伺服器上月臺使用之所有程式設計語言的編譯器。
  • 如果有任何檔案編譯失敗,整個月臺就會失敗編譯。

您也可以在將新的原始程式檔新增至應用程式之後就地重新編譯應用程式。 除非您包含 -c 選項,否則此工具只會編譯新的或已變更的檔案。

注意

編譯包含巢狀應用程式的應用程式不會編譯巢狀應用程式。 巢狀應用程式必須個別編譯。

編譯應用程式以進行部署

您可以藉由指定 targetDir 參數,將應用程式編譯 (編譯至目標位置) 。 targetDir 可以是 Web 應用程式的最終位置,也可以進一步部署已編譯的應用程式。 使用 -u 選項會以這種方式編譯應用程式,讓您可以對已編譯應用程式中的特定檔案進行變更,而不需重新編譯它。 Aspnet_compiler.exe會區分靜態和動態檔案類型,並在建立產生的應用程式時以不同的方式處理它們。

  • 靜態檔案類型是沒有相關聯編譯器或組建提供者的檔案,例如具名的檔案具有 .css、.gif、.htm、.html、.jpg、.js等等。 這些檔案只會複製到目標位置,並保留其目錄結構中的相對位置。
  • 動態檔案類型是具有相關聯編譯器或組建提供者的檔案類型,包括副檔名為 ASP.NET 的檔案,例如 .asax、.ascx、.ashx、.aspx、.browser、.master 等等。 ASP.NET 編譯工具會從這些檔案產生元件。 如果省略 -u 選項,此工具也會建立副檔名為 的檔案。已編譯,會將原始原始程式檔對應至其元件。 為了確保保留應用程式來源的目錄結構,此工具會在目標應用程式中的對應位置產生預留位置檔案。

您必須使用 -u 選項來指出可以修改已編譯應用程式的內容。 否則會忽略後續的修改,或造成執行階段錯誤。

下表描述當 包含 -u 選項時,ASP.NET 編譯工具如何處理不同的檔案類型。

檔案類型 編譯器動作
.ascx、.aspx、.master 這些檔案會分割成標記和原始程式碼,其中包括程式碼後置檔案,以及腳本 runat=「server」 > 元素中 < 所含的任何程式碼。 原始程式碼會編譯成元件,其名稱衍生自雜湊演算法,而元件會放在 Bin 目錄中。 任何內嵌程式碼,也就是在 % 和% >方括弧之間括住的程式碼,都包含在標記中<,且未編譯。 系統會建立與來源檔案同名的新檔案,以包含標記並放在對應的輸出目錄中。
.ashx、.asmx 這些檔案不會編譯,而且會依原樣移至輸出目錄,且不會進行編譯。 如果您想要編譯處理常式程式碼,請將程式碼放在 App_Code 目錄中的原始程式碼檔案中。
.cs、.vb、.jsl、.cpp (不包含先前所列檔案類型的程式碼後置檔案) 這些檔案會編譯並包含在參考這些檔案的元件中作為資源。 來源檔案不會複製到輸出目錄。 如果未參考程式碼檔案,則不會編譯它。
自訂檔案類型 這些檔案不會編譯。 這些檔案會複製到對應的輸出目錄。
App_Code 子目錄中的原始程式碼檔案 這些檔案會編譯成元件,並放在 Bin 目錄中。
App_GlobalResources子目錄中的 .resx 和 .resource 檔案 這些檔案會編譯成元件,並放在 Bin 目錄中。 主要輸出目錄下不會建立任何App_GlobalResources子目錄,而且來原始目錄中沒有 .resx 或 .resources 檔案會複製到輸出目錄。
App_LocalResources 子目錄中的 .resx 和 .resource 檔案 這些檔案不會編譯,而且會複製到對應的輸出目錄。
App_Themes 子目錄中的 .skin 檔案 .skin 檔案和靜態主題檔案不會編譯,而且會複製到對應的輸出目錄。
.browser Web.config已存在於 Bin 目錄中的靜態檔案類型 這些檔案會依原樣複製到輸出目錄。

下表描述省略 -u 選項時,ASP.NET 編譯工具如何處理不同的檔案類型。

檔案類型 編譯器動作
.aspx、.asmx、.ashx、.master 這些檔案會分割成標記和原始程式碼,其中包括程式碼後置檔案,以及腳本 runat=「server」 > 元素中 < 所含的任何程式碼。 原始程式碼會編譯成元件,其名稱衍生自雜湊演算法。 產生的元件會放在 Bin 目錄中。 任何內嵌程式碼,也就是在 % 和% >方括弧之間括住的程式碼,都包含在標記中<,且未編譯。 編譯器會建立新的檔案,以包含與來源檔案同名的標記。 這些產生的檔案會放在 Bin 目錄中。 編譯器也會建立名稱與原始程式檔相同的檔案,但副檔名為 。包含對應資訊的 COMPILED。 。COMPILED 檔案會放在對應至原始程式檔原始位置的輸出目錄中。
.ascx 這些檔案會分割成標記和原始程式碼。 原始程式碼會編譯成元件,並放在 Bin 目錄中,其名稱衍生自雜湊演算法。 不會產生任何標記檔案。
.cs、.vb、.jsl、.cpp (不包含先前所列檔案類型的程式碼後置檔案) 從 .ascx、.ashx 或 .aspx 檔案產生的元件所參考的原始程式碼會編譯成元件,並放在 Bin 目錄中。 不會複製來源檔案。
自訂檔案類型 這些檔案會像動態檔案一樣編譯。 根據它們所依據的檔案類型,編譯器可以將對應檔案放在輸出目錄中。
App_Code子目錄中的檔案 這個子目錄中的原始程式碼檔案會編譯成元件,並放在 Bin 目錄中。
App_GlobalResources子目錄中的檔案 這些檔案會編譯成元件,並放在 Bin 目錄中。 主要輸出目錄底下不會建立任何App_GlobalResources子目錄。 如果組態檔指定 appliesTo=「All」,則會將 .resx 和 .resources 檔案複製到輸出目錄。 如果 BuildProvider參考它們,則不會複製它們。
App_LocalResources 子目錄中的 .resx 和 .resource 檔案 這些檔案會編譯成具有唯一名稱的元件,並放在 Bin 目錄中。 不會將 .resx 或 .resource 檔案複製到輸出目錄。
App_Themes 子目錄中的 .skin 檔案 主題會編譯成元件,並放在 Bin 目錄中。 Stub 檔案是針對 .skin 檔案建立,並放在對應的輸出目錄中。 靜態檔案 (,例如 .css) 會複製到輸出目錄。
.browser Web.config已存在於 Bin 目錄中的靜態檔案類型 這些檔案會依原樣複製到輸出目錄。

固定元件名稱

某些案例,例如使用 MSI Windows Installer 部署 Web 應用程式,需要使用一致的檔案名和內容,以及一致的目錄結構來識別更新的元件或組態設定。 在這些情況下,您可以使用 -fixednames 選項來指定 ASP.NET 編譯工具應該編譯每個來源檔案的元件,而不是使用編譯多個頁面編譯成元件的 。 這可能會導致大量的元件,因此如果您擔心延展性,您應該謹慎使用此選項。

強式名稱編譯

系統會提供 -aptca-delaysign-keycontainer-keyfile 選項,讓您可以使用Aspnet_compiler.exe來建立強式名稱元件,而不需另外使用 強式名稱工具 (Sn.exe) 。 這些選項分別對應至 AllowPartiallyTrustedCallersAttributeAssemblyDelaySignAttributeAssemblyKeyNameAttributeAssemblyKeyFileAttribute

這些屬性的討論超出本課程的範圍。

實驗室

下列每個實驗室都是以先前的實驗室為基礎。 您必須依序執行這些動作。

實驗室 1:使用設定 API

  1. 建立名為 mod9lab的新網站。
  2. 將新的 Web 組態檔新增至月臺。
  3. 將下列內容新增至 web.config 檔案:
<authorization>
    <deny users="?"/>
</authorization>

<identity impersonate="true"/>

這可確保您有權儲存web.config檔案的變更。

  1. 將新的 Label 控制項新增至 Default.aspx,並將識別碼變更為 lblDebugStatus
  2. 將新的 Button 控制項新增至 Default.aspx。
  3. 將按鈕控制項的識別碼變更為 btnToggleDebug ,並將 [文字] 變更為 [切換偵錯狀態]。
  4. 開啟 Default.aspx 程式碼後置檔案的程式碼檢視,並新增System.Web.Configurationusing語句,如下所示:
using System.Web.Configuration;
  1. 將兩個私用變數新增至 類別和一個Page_Init方法,如下所示:
public partial class _Default : System.Web.UI.Page {
    private bool _debugStatus;
    private CompilationSection compilation;
    private Configuration config;
    protected void Page_Init(object sender, EventArgs e) {
        config = WebConfigurationManager.OpenWebConfiguration("/mod9lab");
        compilation =
            (CompilationSection)config.GetSection("system.web/compilation");
        _debugStatus = compilation.Debug;
    }
}
  1. 將下列程式碼新增至 Page_Load:
lblDebugStatus.Text = "Debug set to: " + _debugStatus.ToString();
  1. 儲存並流覽 default.aspx。 請注意,標籤控制項會顯示目前的偵錯狀態。
  2. 按兩下設計工具中的 Button 控制項,並將下列程式碼新增至 Button 控制項的 Click 事件:
compilation.Debug = !_debugStatus;
config.Save();
lblDebugStatus.Text = "Debug set to: " + compilation.Debug.ToString();
  1. 儲存並流覽 default.aspx,然後按一下按鈕。
  2. 按一下每個按鈕之後,開啟web.config檔案,並觀察編譯 > 區段中的 <錯屬性。

實驗室 2:記錄應用程式重新開機

在此實驗室中,您將建立程式碼,讓您在事件檢視器中切換應用程式關機、啟動和重新編譯的記錄。

  1. 將 DropDownList 新增至 default.aspx,並將識別碼變更為 ddlLogAppEvents。
  2. DropDownList 的 AutoPostBack 屬性設定為 true
  3. 將三個專案新增至 DropDownList 的 Items 集合。 將第一個專案的 [文字 ] 設為 [選取值 ] 和值 -1。 將第二個專案的 TextValue 設為 True ,並將第三個專案的 TextValue 設為 False
  4. 將新的標籤新增至 default.aspx。 將識別碼變更為 lblLogAppEvents
  5. 開啟 default.aspx 的程式碼後置檢視,並為 HealthMonitoringSection 類型的變數新增宣告,如下所示:
public partial class _Default : System.Web.UI.Page {
    private bool _debugStatus;
    private CompilationSection compilation;
    private Configuration config;

    // new variable below
    private HealthMonitoringSection health;
}
  1. 將下列程式碼新增至 Page_Init 中的現有程式碼:
health = (HealthMonitoringSection)config.GetSection("system.web/healthMonitoring");
  1. 按兩下 DropDownList,並將下列程式碼新增至 SelectedIndexChanged 事件:
if (ddlLogAppEvents.SelectedValue != "-1") {
    if (Convert.ToBoolean(ddlLogAppEvents.SelectedValue)) {
        RuleSettings appRules = new
        RuleSettings("AppRestartEvents",
        "Application Lifetime Events",
        "EventLogProvider");
        health.Rules.Add(appRules);
        config.Save();
    } else {
        health.Rules.Remove("AppRestartEvents");
        config.Save();
    }
}
  1. 流覽 default.aspx。

  2. 將下拉式清單設定為 False

  3. 清除事件檢視器中的應用程式記錄檔。

  4. 按一下按鈕可變更應用程式的 [偵錯] 屬性。

  5. 重新整理事件檢視器中的應用程式記錄檔。

    1. 是否已記錄任何事件?
    2. 原因為何?
  6. 將下拉式清單設定為 True。

  7. 按一下按鈕可切換應用程式的 [偵錯] 屬性。

  8. 重新整理應用程式登入事件檢視器。

    1. 是否已記錄任何事件?
    2. 應用程式關機的原因為何?
  9. 實驗開啟和關閉記錄,並查看對web.config檔案所做的變更。

其他相關資訊:

ASP.NET 2.0 的提供者模型可讓您建立自己的提供者,不僅適用于應用程式檢測,也可供許多其他用途使用,例如成員資格、設定檔等。如需撰寫自訂提供者以將應用程式事件記錄至文字檔的詳細資訊,請流覽 此連結