共用方式為


如何建立簡單的 IIS 管理員模組

作者: Carlos Aguilar Mares

新的 IIS 7.0 和更新版本 Web 管理工具是可延伸的開發人員平臺。 協力廠商可以開發並安裝自己的管理功能,而這些功能會顯示為工具中的第一級功能。 本文說明的工作包括:

  • 在 Microsoft Visual Studio 或 Microsoft Visual C# Express 中建立專案,以便在 InetMgr 內使用程式庫
  • 建立簡單的模組提供者
  • 建立顯示訊息方塊的簡單模組。

工作 1:建立專案

若要建立 InetMgr 的擴充性模組,您必須建立也稱為類別庫專案的 DLL 專案。 此 DLL 必須強式名稱,才能在 GAC (全域組件快取) 註冊,這是 InetMgr 所使用的模組需求。

  1. 按一下 [開始],按一下 [ 程式 ],然後執行 Microsoft Visual Studio 2005 或 Microsoft Visual C# 2005 Express Edition

  2. 在 [ 檔案] 功能表中 ,選取 [ 新增專案] 選項。

  3. 在 [ 新增專案] 對話方塊中,選取 [類別庫 ] 作為專案類型,然後輸入 ExtensibilityDemo 作為專案的名稱。 按一下 [確定]。

    [新增專案] 視窗的螢幕擷取畫面。已選取 [類別庫] 圖示。

  4. 移除預設新增的 Class1.cs 檔案 (,因為我們不會使用該檔案) 使用方案總管的操作功能表 [刪除] 選項。

  5. 使用 [專案功能表] 中的 [新增參考...]選項,使用 [流覽] 索引標籤新增參考以Microsoft.Web.Management.dll,並在\Windows\system32\inetsrv目錄中搜尋。 這是 DLL,其中包含建立 InetMgr 模組所需的所有擴充性類別。

    由於我們使用程式碼建立以 WinForms 為基礎的 UI,因此我們必須將參考新增至 System.Windows.Forms.dll;針對該選項,請使用 [專案功能表] 中的 [ 新增參考...] 選項,然後選取元件清單中 the.NET System.Windows.Forms.dll

    InetMgr 內所用程式庫的其中一個需求是必須在 GAC 內註冊。 請確定 DLL 已強式名稱 (有時稱為「已簽署) 」。 Visual Studio 提供簡單的方式來建立和新增名稱。 使用 [專案] 功能表 ,選取 [ ExtensibilityDemo 屬性] 選項。

  6. 在 [ 簽署] 索引標籤中,核取 [ 簽署元件 ] 核取方塊。

  7. 在下拉式方塊中,選取 [新增...] >選項 < 以建立新的金鑰。 在 [ 建立強式名稱金鑰 ] 對話方塊中,輸入 DemoKey.snk 作為金鑰的名稱,然後取消核取 [使用密碼保護我的金鑰檔案 ] 核取方塊。 按一下 [確定]。

    [建立強式名稱金鑰] 對話方塊的螢幕擷取畫面。

    簽署索引標籤應如下所示:

    簽署索引標籤的螢幕擷取畫面。

    由於我們想要元件位於 GAC 中,因此我們會新增一些建置後事件,以便每次編譯時,元件會自動新增至 GAC。 這可讓偵錯變得簡單,以及在新增新功能時進行變更。

  8. 選取 [ 建置事件] 索引 標籤,然後新增下列 建置後事件 命令列:

    CALL "%VS80COMNTOOLS%\vsvars32.bat" > NULL
    gacutil.exe /if "$(TargetPath)"
    

    [建置事件] 索引標籤的螢幕擷取畫面。

    (選擇性) 如果您使用 Microsoft Visual Studio 2005,請正確設定偵錯,以便使用 F5 來執行程式碼。 在專案屬性中,選取 [ 錯] 索引標籤,並將其設定為開始選擇 \windows\system32\inetsrv\inetmgr.exe的外部程式。

    偵錯索引標籤的螢幕擷取畫面。

  9. 關閉專案屬性,然後選取 [檔案] 功能表中的 [ 全部儲存 ] 選項,然後將位置設定為 d:\Demos。 按一下 [檔案]

    [儲存專案] 對話方塊的螢幕擷取畫面。

    您現在可以使用 [建置] 功能表下的 [建置方案] 來編譯專案。 這會自動建置 DLL,並將其新增至 GAC。

    注意

    如果設定vsvars32.bat的命令無法與錯誤碼 9009 搭配使用,請藉由將完整路徑新增至 gacutil.exe,取代步驟 8 中 Post Build 事件中新增的命令,例如:

    "D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if "$(TargetPath)"
    

工作 2:建立模組提供者

在這項工作中,您會建立模組提供者;這是 InetMgr 中模組註冊的主要進入點。 這些模組提供者會列在Administration.config中。

  1. 從 [專案] 功能表中選取 [ 新增專案 ] 選項。 在 [新增專案] 對話方塊中,選取 [類別] 範本,然後輸入 DemoModuleProvider.cs 作為檔案的名稱。

    [新增專案] 視窗的螢幕擷取畫面。類別圖示會反白顯示。

  2. 變更程式碼,使其看起來如下:

    using System;
    using System.Security;
    using Microsoft.Web.Management.Server;
    namespace ExtensibilityDemo {
        class DemoModuleProvider : ModuleProvider {
            public override Type ServiceType {
                get { return null; }
            }
            public override ModuleDefinition GetModuleDefinition(IManagementContext context) {
                return new ModuleDefinition(Name, typeof(DemoModule).AssemblyQualifiedName);
            }
            public override bool SupportsScope(ManagementScope scope) {
                return true;
            }
        }
    }
    

此程式碼會建立 ModuleProvider,其支援所有類型的連線 (伺服器、月臺和應用程式) ,並註冊名為 DemoModule的用戶端模組。

工作 3:建立模組

在此工作中,您將瞭解如何建立模組。 模組是用戶端中所有擴充性物件的主要進入點。 它有一個稱為 Initialize 的主要方法。 這是發生所有動作的方法。

  1. 選取 [專案] 功能表中的 [新增專案] 選項。 選取 [類別] 範本,然後輸入 DemoModule.cs 作為檔案名。

  2. 變更程式碼,使其看起來如下:

    using System;
    using System.Windows.Forms;
    using Microsoft.Web.Management.Client;
    using Microsoft.Web.Management.Server;
    
    namespace ExtensibilityDemo {
        internal class DemoModule : Module {
            protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo) {
                base.Initialize(serviceProvider, moduleInfo);
                 MessageBox.Show("Hello World Inside InetMgr");
            }
        }
    }
    

工作 4:測試模組

在這項工作中,您會新增您所建置的新模組。 因此,我們必須將它新增至 moduleProviders 清單中的檔案administration.config。

首先,我們必須找出剛才建立之元件的完整名稱。 其格式為 「ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken={YourKey}」。 使用 Windows 檔案總管來尋找它。

  1. 開啟 Windows 檔案總管 並流覽至 *Windows\Assembly* 資料夾。

  2. 在元件清單中尋找 ExtensibilityDemo,然後以滑鼠右鍵按一下它並選取 屬性。 在對話方塊中,您會看到名為公開金鑰權杖的欄位;我們需要此值以將它註冊到 InetMgr,因此請將它複製到剪貼簿。

    [擴充性示範屬性] 對話方塊的螢幕擷取畫面。

  3. 回到 Microsoft Visual C# 2005 Express,選取 [開啟檔案... 在 [檔案] 功能表下。 流覽檔案\Windows\System32\InetSrv\Administration.config。

  4. 搜尋 < moduleProviders 區 > 段並新增下列內容,但請確定您將公開金鑰權杖取代為我們在步驟 2 中複製的權杖:

    <moduleProviders>
      <add name="ExtensibilityDemo" type="ExtensibilityDemo.DemoModuleProvider, ExtensibilityDemo, 
                              Version=1.0.0.0, Culture=neutral, PublicKeyToken=bed679b1975c7f97" />
    <moduleProviders>
    

    注意

    只要將它新增至您註冊模組的 moduleProviders 清單,就只會針對伺服器連線註冊模組。 如果您想要針對月臺連線和應用程式連線啟用此模組,請將它新增至下列清單:

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. 儲存檔案並執行 InetMgr,連線到 localhost,您會看到下列訊息:

    I S 起始頁面的螢幕擷取畫面,其中顯示範例訊息對話方塊。

總結

本文說明如何建立 Visual Studio 專案,以開發新 IIS 管理工具的擴充性模組。 我們已建立簡單的 ModuleProvider 及其模組對應專案,以顯示訊息。

既然您已瞭解建立 IIS 管理工具模組的基本概念,您可以探索可供擴充性使用的更多有趣功能。