第 3 課:使用 Windows PowerShell 來設定 Order Service
完成時間: 20 分鐘
目標: 示範使用 Windows Server AppFabricCmdlet來設定應用程式。
用途: Windows PowerShell 的 AppFabric Cmdlet 是可供開發人員與系統管理員用來自動化包含 WCF 和/或 WF 服務之應用程式的設定與管理作業的實用工具。在此課程中,您將會重新設定 Order Service 應用程式的監控與持續性功能。
必要條件
開始此課程之前,請先檢查下列必要條件:
您必須根據第 1 課:開始使用 Windows PowerShell 的 Windows Server AppFabric Cmdlet 的說明設定 Windows PowerShell 工作階段。
您必須根據第 2 課:使用 Windows PowerShell 來部署訂單服務應用程式的說明部署 Order Service 應用程式。
程序
您將會完成下列程序,以使用 Windows PowerShell 重新設定 Order Service 應用程式:
建立並初始化應用程式的監控與持續性儲存區。
建立儲存區的連接字串。
設定 Order Service 應用程式的 OrderWorkflow 服務,以使用新的監控與持續性儲存區。
為應用程式啟用 net.pipe 通訊協定
建立並初始化監控與持續性資料庫
在本節中,您將建立並初始化新的監控儲存區與新的持續性儲存區,以搭配 Order Service 應用程式使用。
建立並初始化監控儲存區
從 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 別名。使用清單格式 (而非預設的表格格式) 比較容易檢視操作結果,因為預設的格式會將結果截斷。
執行此命令之後,請確認 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 應用程式建立並初始化持續性儲存區
在 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 參數。這可讓您略過確認儲存區變更的提示。
確認結果看起來像下面這樣,而且沒有任何錯誤。
Server : SERVER1 Database : OrderService_PS ConnectionString : Data Source=SERVER1;Initial Catalog=OrderService_PS
OrderService_PS 儲存區現在已初始化,可搭配持續性功能使用。
建立連接字串
若要設定應用程式以使用您剛建立的新監控與持續性儲存區,您必須建立新儲存區的連接字串。目前適用於 Windows PowerShell 的 ApplicationServer 模組未包含可執行此動作的 Cmdlet。因此我們使用根據以指令碼方式設定 AppFabric 範例中之範例程式碼建立的指令碼函式範例,來示範如何執行此動作。如需有關此範例的詳細資訊,請參閱範例。
建立新儲存區的連接字串
在 Windows PowerShell 中輸入下列命令以開啟 Utility.ps1。
Notepad Utility.ps1
複製下列程式碼並貼在 [記事本] 中的檔案底部。
#=========================================================================================================# #=== ===# #=== 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) }
關閉 [記事本],然後按一下 [儲存] 以儲存 Utility.ps1
在 Windows PowerShell 中輸入下列命令,以將 Utility.ps1 指令碼新增為目前 Windows PowerShell 工作階段的模組。
import-module .\Utility.ps1
在 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"
執行「Internet Information Services (IIS) 管理員」並按兩下 [監控資料庫組態] 小程式,以確認新的連接字串。這樣應該會顯示名為 OrderService_PS 的新連接字串與預設的連接字串。新連接字串的狀態應該是「已初始化」。
現在可以使用 AppFabric 來設定 Order Service 應用程式,以使用 OrderService_PS 儲存區來支援監控與持續性功能。
設定應用程式以使用監控與持續性資料庫
設定 Order Service_PS 網站以使用新的儲存區來支援監控功能
在 Windows PowerShell 中輸入下列命令,以設定 OrderService_PS 網站的監控功能使用新的儲存區。
Set-ASAppMonitoring -SiteName OrderService_PS -MonitoringLevel HealthMonitoring -ConnectionStringName OrderService_PS
確認執行命令之後的輸出看起來像下面這樣,其中顯示已套用至網站的監控設定。
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 網站以使用新的儲存區來支援持續性功能
在 Windows PowerShell 中執行下列命令。
Set-ASAppSqlServicePersistence -SiteName OrderService_PS -ConnectionStringName OrderService_PS
確認執行命令之後的輸出看起來像下面這樣,其中顯示已套用至網站的持續性設定。
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