第 3 课:为订单服务配置 Windows PowerShell
完成所需时间:20 分钟
目的:演示如何使用 Windows Server AppFabric cmdlet 配置应用程序。
用途:用于 Windows PowerShell 的 AppFabric cmdlet 再次提供了一个有用的工具,开发人员和管理员可以使用该工具自动配置和管理其中包含 WCF 和/或 WF 服务的应用程序。在本课中,您将重新配置订单服务应用程序的监控和暂留功能。
先决条件
在开始本课程前,请注意以下先决条件:
您必须设置 Windows PowerShell 会话,如第 1 课:Windows PowerShell 的 Windows Server AppFabric Cmdlet 入门中所述。
您必须部署订单服务应用程序,如第 2 课:使用 Windows PowerShell 部署订单服务应用程序中所述。
过程
使用 Windows PowerShell 重新配置订单服务应用程序需完成以下过程:
创建并初始化应用程序的监控和暂留存储。
为该存储创建连接字符串。
将订单服务应用程序的 OrderWorkflow 服务配置为使用新的监控和暂留存储。
启用应用程序的 net.pipe 协议。
创建并初始化监控和暂留数据库
在本节中,您将新建并初始化用于订单服务应用程序的监控存储和暂留存储。
创建并初始化监控存储
从 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 主体的完整主体名称。
创建并初始化订单服务应用程序的暂留存储的步骤
在 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 配置订单服务应用程序,将 OrderService_PS 存储用于监控和暂留。
将应用程序配置为使用监控和暂留数据库
将订单 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 监控订购服务中,您将学习如何使用 AppFabric cmdlet 监控应用程序。
另请参阅
概念
第 1 课:Windows PowerShell 的 Windows Server AppFabric Cmdlet 入门
第 2 课:使用 Windows PowerShell 部署订单服务应用程序
第 4 课:使用 Windows PowerShell 监控订购服务
第 5 课:使用 Windows PowerShell 跟踪工作流
2011-12-05