第 3 課:使用 Windows PowerShell 來設定 Order Service

完成時間: 20 分鐘

目標: 示範使用 Windows Server AppFabricCmdlet來設定應用程式。

用途: Windows PowerShell 的 AppFabric Cmdlet 是可供開發人員與系統管理員用來自動化包含 WCF 和/或 WF 服務之應用程式的設定與管理作業的實用工具。在此課程中,您將會重新設定 Order Service 應用程式的監控與持續性功能。

必要條件

開始此課程之前,請先檢查下列必要條件:

程序

您將會完成下列程序,以使用 Windows PowerShell 重新設定 Order Service 應用程式:

  1. 建立並初始化應用程式的監控與持續性儲存區。

  2. 建立儲存區的連接字串。

  3. 設定 Order Service 應用程式的 OrderWorkflow 服務,以使用新的監控與持續性儲存區。

  4. 為應用程式啟用 net.pipe 通訊協定

建立並初始化監控與持續性資料庫

在本節中,您將建立並初始化新的監控儲存區與新的持續性儲存區,以搭配 Order Service 應用程式使用。

建立並初始化監控儲存區

  1. 從 Windows PowerShell 執行下列命令。

    Initialize-ASMonitoringSqlDatabase -Database "OrderService_PS" -Admins "AS_Administrators","NT AUTHORITY\LOCAL SERVICE" -Readers "AS_Observers" -Writers "BUILTIN\IIS_IUSRS" | fl *
    

    請注意,您指定的儲存區名稱具有 “_PS” 尾碼,代表您是在 Windows PowerShell 中建立。這樣可避免與使用者介面教學課程發生任何命名方式衝突。

    您為儲存區設定的權限是基於預設的 AppFabric 權限與主體名稱。

    在上述命令中,您將結果儲存區物件以管道處理方式傳送給 Windows PowerShell Format-List Cmdlet 的 fl 別名。使用清單格式 (而非預設的表格格式) 比較容易檢視操作結果,因為預設的格式會將結果截斷。

  2. 執行此命令之後,請確認 Windows PowerShell 中的輸入看起來像下面這樣,而且沒有發生錯誤。

    Server           : SERVER1
    Database         : OrderService_PS
    ConnectionString : Data Source=SERVER1;Initial Catalog=OrderService_PS;Integrated Security=True
    

現在已建立並初始化新的監控儲存區 OrderService_PS,該儲存區可用於監控功能。

建立並初始化持續性儲存區

若要使用持續性相關資料表與成品來初始化 OrderService_PS 儲存區,請使用 Initialize-ASPersistenceDatabase Cmdlet。此 Cmdlet 接受三個安全性相關參數:

  • -Admins

  • -Readers

  • -Users

對於此教學課程,您再次使用預設的 AppFabric 主體名稱。使用這些參數來搭配此 Cmdlet 時,您必須使用完整主體名稱。為完成此程序,您會為 Windows PowerShell 使用環境提供者來解析本機電腦名稱。若要檢視此運作方式,請在 Windows PowerShell 中輸入下列命令:

$env:COMPUTERNAME

命令的結果會根據 COMPUTERNAME 環境變數顯示您的本機電腦名稱。您將會使用此方式來提供預設 AppFabric 主體的完整主體名稱。

為 Order Service 應用程式建立並初始化持續性儲存區

  1. 在 Windows PowerShell 中輸入下列命令,以使用預設的 AppFabric 主體名稱初始化 OrderService_PS 持續性儲存區。

    Initialize-ASPersistenceSqlDatabase -Database "OrderService_PS" -Admins "$($env:COMPUTERNAME)\AS_Administrators" -Readers "$($env:COMPUTERNAME)\AS_Observers" -Users "BUILTIN\IIS_IUSRS" –Confirm:$false | fl *
    

    請注意您傳遞的 –Confirm:$false 參數。這可讓您略過確認儲存區變更的提示。

  2. 確認結果看起來像下面這樣,而且沒有任何錯誤。

    Server           : SERVER1
    Database         : OrderService_PS
    ConnectionString : Data Source=SERVER1;Initial Catalog=OrderService_PS
    

OrderService_PS 儲存區現在已初始化,可搭配持續性功能使用。

建立連接字串

若要設定應用程式以使用您剛建立的新監控與持續性儲存區,您必須建立新儲存區的連接字串。目前適用於 Windows PowerShell 的 ApplicationServer 模組未包含可執行此動作的 Cmdlet。因此我們使用根據以指令碼方式設定 AppFabric 範例中之範例程式碼建立的指令碼函式範例,來示範如何執行此動作。如需有關此範例的詳細資訊,請參閱範例

建立新儲存區的連接字串

  1. 在 Windows PowerShell 中輸入下列命令以開啟 Utility.ps1。

    Notepad Utility.ps1
    
  2. 複製下列程式碼並貼在 [記事本] 中的檔案底部。

    #=========================================================================================================#
    #===                                                                                                   ===#
    #=== Adds or updates the specified connection string setting in the specified .NET configuration file. ===#
    #===                                                                                                   ===#
    #=========================================================================================================#
    
    function UpdateConnectionString([string]$name, [string]$connectionString)
    {
        $providerName = "System.Data.SqlClient"
    
        $NETFramework4Path = gp -Path HKLM:\Software\Microsoft\'NET Framework Setup'\NDP\v4\Full
        $ConfigPath = "$($NETFramework4Path.InstallPath)Config\Web.config"
    
        Write-Output ("ConfigPath : " + $ConfigPath)
    
        $xml = [xml](Get-Content $ConfigPath)
        $root = $xml.get_DocumentElement()
    
    
        $connectionStrings = $root.SelectSingleNode("connectionStrings")
        if ($connectionStrings -eq $null)
        {
            $locations = $root.SelectNodes("location")
    
            foreach ($locationNode in $locations)
            {
                $locStrings = $locationNode.SelectSingleNode("connectionStrings")
    
                if ($locStrings -ne $null)
                {
                    $connectionStrings = $locStrings
                }
            }
    
            if ($connectionStrings -eq $null)
            {
                $connectionStrings = $xml.CreateElement("connectionStrings")
                $root.AppendChild($connectionStrings) | Out-Null
            }
        }
    
        $xpath = "add[@name='" + $name + "']"
        $add = $connectionStrings.SelectSingleNode($xpath)
        if ($add -eq $null)
        {
            Write-Output "Adding new connection string setting..."
            $add = $xml.CreateElement("add")
            $connectionStrings.AppendChild($add) | Out-Null
        }
        else
        {
            Write-Output "Updating existing connection string setting..."
        }
    
        $add.SetAttribute("name", $name)
        $add.SetAttribute("connectionString", $connectionString)
        $add.SetAttribute("providerName", $providerName)
        Write-Output $add | Format-List
    
        $xml.Save($ConfigPath)
    }
    
  3. 關閉 [記事本],然後按一下 [儲存] 以儲存 Utility.ps1

  4. 在 Windows PowerShell 中輸入下列命令,以將 Utility.ps1 指令碼新增為目前 Windows PowerShell 工作階段的模組。

    import-module .\Utility.ps1
    
  5. 在 Windows PowerShell 中,您可以使用 UpdateConnectionString 函式來新增連接字串。您必須根據用於此教學課程之電腦上安裝的是 Microsoft SQL Server 或 SQL Server Express 而定,選擇正確的資料來源。

    • 若只安裝 SQL Server Express,請使用下列命令,這樣會使用本機電腦上的 SQL Server Express 做為資料來源:

      UpdateConnectionString "OrderService_PS" "Data Source=.\SQLEXPRESS;Initial Catalog=OrderService_PS;Integrated Security=True"
      
    • 若已安裝 SQL Server,請使用下列命令,這樣會使用 SQL Server 做為資料來源:

      UpdateConnectionString "OrderService_PS" "Data Source=localhost;Initial Catalog=OrderService_PS;Integrated Security=True"
      
  6. 執行「Internet Information Services (IIS) 管理員」並按兩下 [監控資料庫組態] 小程式,以確認新的連接字串。這樣應該會顯示名為 OrderService_PS 的新連接字串與預設的連接字串。新連接字串的狀態應該是「已初始化」。

現在可以使用 AppFabric 來設定 Order Service 應用程式,以使用 OrderService_PS 儲存區來支援監控與持續性功能。

設定應用程式以使用監控與持續性資料庫

設定 Order Service_PS 網站以使用新的儲存區來支援監控功能

  1. 在 Windows PowerShell 中輸入下列命令,以設定 OrderService_PS 網站的監控功能使用新的儲存區。

    Set-ASAppMonitoring -SiteName OrderService_PS -MonitoringLevel HealthMonitoring -ConnectionStringName OrderService_PS
    
  2. 確認執行命令之後的輸出看起來像下面這樣,其中顯示已套用至網站的監控設定。

    ConnectionStringName : OrderService_PS
    ConnectionString     : Data Source=localhost;Initial Catalog=OrderService_PS;Integrated Security=True
    IsEnabled            : True
    MonitoringLevel      : HealthMonitoring
    ProviderId           : c37234f8-4eae-41c8-9bd4-cd42706d4219
    ProviderName         : System.Data.SqlClient
    TrackingProfile      : HealthMonitoring Tracking Profile
    SiteName             : OrderService_PS
    VirtualPath          : /
    

設定 OrderService_PS 網站以使用新的儲存區來支援持續性功能

  1. 在 Windows PowerShell 中執行下列命令。

    Set-ASAppSqlServicePersistence -SiteName OrderService_PS -ConnectionStringName OrderService_PS
    
  2. 確認執行命令之後的輸出看起來像下面這樣,其中顯示已套用至網站的持續性設定。

    ConnectionString              :
    ConnectionStringName          : OrderService_PS
    HostLockRenewalPeriod         : 00:00:20
    InstanceCompletionAction      : DeleteNothing
    InstanceEncodingOption        : GZip
    InstanceLockedExceptionAction : BasicRetry
    AuthorizedWindowsGroup        : AS_Administrators
    IsLocal                       : True
    BehaviorName                  :
    

啟用 net.pipe 通訊協定

若已依照 Windows Server AppFabric 介面使用教學課程第 3 課:設定 HRApplicationServices 應用程式 中的步驟執行,應該已經為 OrderWorkflowService Web 應用程式啟用 net.pipe 通訊協定。但是,本節顯示如何使用 Windows PowerShell 來啟用通訊協定。適用於 Windows PowerShell 的 ApplicationServer 模組並未公開此操作的 Cmdlet。因此,此操作是使用 Appcmd.exe 執行。如需有關 Appcmd.exe 的詳細資訊,請參閱下列連結:Appcmd.exe (https://go.microsoft.com/fwlink/?LinkId=169337) (可能為英文網頁)。

若要為 OrderWorkflowService Web 應用程式啟用 net.pipe 通訊協定,請在 Windows PowerShell 中執行下列命令。

.$env:SystemRoot\System32\inetsrv\appcmd.exe set app "OrderService_PS/OrderWorkflowService" /enabledProtocols:"http,net.pipe"

Appcmd.exe 會報告 Windows PowerShell 中的操作執行成功,如下所示。

APP object "OrderService_PS/OrderWorkflowService" changed

我剛剛做了什麼?

在此課程中,您使用 AppFabric Cmdlet 建立新的監控與持續性儲存區。您也在 Web.config 檔案中建立新的連接字串,並將 OrderService_PS 網站設定為使用新的儲存區來支援監控與持續性功能。您可以將這些命令新增至 Windows PowerShell 指令碼,以自動化應用程式設定作業。

後續步驟

第 4 課:使用 Windows PowerShell 來監控 Order Service中,您將學習如何使用AppFabric Cmdlet 來監控應用程式。

另請參閱

概念

第 1 課:開始使用 Windows PowerShell 的 Windows Server AppFabric Cmdlet
第 2 課:使用 Windows PowerShell 來部署訂單服務應用程式
第 4 課:使用 Windows PowerShell 來監控 Order Service
第 5 課:使用 Windows PowerShell 來追蹤工作流程

  2011-12-05