第 2 课:使用 Windows PowerShell 部署订单服务应用程序
完成所需时间25 分钟
目标 了解如何将包含 WCF 和/或 WF 服务的应用程序部署到 IIS。
目的 本课程演示使用 Windows PowerShell 通过 Web 部署工具编写部署脚本的示例方法。您会将订单服务应用程序重新部署到名为 OrderService_PS 的网站。
先决条件
请注意以下先决条件:
必须已从 https://go.microsoft.com/fwlink/?LinkId=160309 下载了教程文件。
必须已将教程文件解压缩到 C:\ directory,如AppFabric 界面的使用教程中的第 1 课:入门所述。
过程
订单服务应用程序的重新部署过程将经历以下步骤:
为部署准备配置文件
使用 MSBuild 通过 Windows PowerShell 生成部署程序包。
创建 OrderService_PS 网站和应用程序池。
使用 Web 部署工具和 Windows PowerShell 部署各 Web 服务。
使用 Windows PowerShell 测试各 Web 服务
为部署准备配置文件
您将使用 Windows PowerShell 将订单服务应用程序重新部署到使用端口 95 的新网站。在本节中,您将在部署之前使用新的端口信息来更新配置文件中的终结点地址。
在 Windows PowerShell 中运行下面的命令,以打开订单客户端的 app.config 文件。
notepad C:\DublinTutorial\OrderServiceSolution\Completed\OrderClient\app.config
将 client 部分替换为下面的 client 部分。
<client> <endpoint address="https://localhost:95/OrderWorkflowService/OrderWorkflow.xamlx" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.IOrderWorkflowService" contract="OrderWorkflowService.MicrosoftSamplesDublinTutorialsOrderServiceOrderWorkflowServiceIOrderWorkflowService" name="BasicHttpBinding_Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.IOrderWorkflowService" /> </client>
关闭记事本,当系统提示保存更改时,单击“保存”。
从 Windows PowerShell 运行下面的命令,以打开订单处理服务的 Web.config 文件。
notepad C:\DublinTutorial\OrderServiceSolution\Completed\OrderProcessingService\Web.config
将 client 部分替换为下面的 client 部分。
<client> <endpoint address="https://localhost:95/OrderWorkflowService/OrderWorkflow.xamlx" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.IOrderWorkflowService" contract="OrderWorkflowService.MicrosoftSamplesDublinTutorialsOrderServiceOrderWorkflowServiceIOrderWorkflowService" name="BasicHttpBinding_Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.IOrderWorkflowService" /> </client>
关闭记事本,当系统提示保存更改时,单击“保存”。
从 Windows PowerShell 运行下面的命令,以打开 OrderWorkflowService 的 Web.config 文件。
notepad C:\DublinTutorial\OrderServiceSolution\Completed\OrderWorkflowService\Web.config
将 client 部分替换为下面的 client 部分。
<client> <endpoint address="https://localhost:95/OrderProcessingService/OrderProcessing.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IOrderProcessing" contract="IOrderProcessing" name="BasicHttpBinding_IOrderProcessing" /> <endpoint address="https://localhost:95/ShippingService/Shipping.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IShipping" contract="IShipping" name="BasicHttpBinding_IShipping" /> </client>
关闭记事本,当系统提示保存更改时,单击“保存”。
从 Windows PowerShell 运行下面的命令,以打开运输服务的 Web.config 文件。
notepad C:\DublinTutorial\OrderServiceSolution\Completed\ShippingService\Web.config
将 client 部分替换为下面的 client 部分。
<client> <endpoint address="https://localhost:95/OrderWorkflowService/OrderWorkflow.xamlx" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.IOrderWorkflowService" contract="OrderWorkflowService.MicrosoftSamplesDublinTutorialsOrderServiceOrderWorkflowServiceIOrderWorkflowService" name="BasicHttpBinding_Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.IOrderWorkflowService" /> </client>
关闭记事本,当系统提示保存更改时,单击“保存”。
使用 MSBuild 通过 Windows PowerShell 生成部署程序包
Microsoft Build Engine (MSBuild) 是用于 Microsoft 和 Visual Studio 的版本平台。MSBuild 在如何处理和生成软件方面完全透明化,开发人员可以在未安装 Visual Studio 的测试版环境中有序组合和生成产品。MSBuild 作为一个组成部分包含在 .NET Framework 中。您将按照本节中的步骤使用 MSBuild 为订单服务应用程序生成新的部署程序包。可以将下面这些命令添加到 Windows PowerShell 脚本中以自动执行生成操作。有关 MSBuild 的详细信息,请参阅 MSBuild 概述 (https://go.microsoft.com/fwlink/?LinkId=123876)(可能为英文网页)。
在 Windows PowerShell 中执行下面的命令,以将名为 MSBuildPath 的变量分配给 .NET Framework 目录中 MSBuild 可执行文件的完整路径。此命令基于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 注册表项下的 InstallPath 字符串值的值来确定路径。
$MSBuildPath = "$($(gp -Path HKLM:\Software\Microsoft\'NET Framework Setup'\NDP\v4\Full).InstallPath)MSBuild.exe"
在 Windows PowerShell 中执行下面的命令,以生成 OrderProcessingService 项目的部署程序包:
.$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\OrderProcessingService\OrderProcessingService.csproj' /T:Package /P:PackageLocation='C:\DublinTutorial\PS_DeploymentPackages\OrderProcessingService.zip'
在 Windows PowerShell 中执行下面的命令,以生成 OrderWorkflowService 项目的部署程序包:
.$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\OrderWorkflowService\OrderWorkflowService.csproj' /T:Package /P:PackageLocation='C:\DublinTutorial\PS_DeploymentPackages\OrderWorkflowService.zip'
在 Windows PowerShell 中执行下面的命令,以生成 ShippingService 项目的部署程序包:
.$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\ShippingService\ShippingService.csproj' /T:Package /P:PackageLocation='C:\DublinTutorial\PS_DeploymentPackages\ShippingService.zip'
确认所有三个 zip 文件已创建到 C:\DublinTutorial\PS_DeploymentPackages 目录中,如下所示:
PS C:\> dir C:\DublinTutorial\PS_DeploymentPackages\*.zip Directory: C:\DublinTutorial\PS_DeploymentPackages Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 11/11/2009 5:40 PM 13836 OrderProcessingService.zip -a--- 11/11/2009 5:41 PM 22717 OrderWorkflowService.zip -a--- 11/11/2009 5:41 PM 25177 ShippingService.zip
如果尚未生成 OrderClient 应用程序(用作服务的客户端),请在 Windows PowerShell 中执行下面的命令以生成 OrderClient 应用程序:
.$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\OrderClient\OrderClient.csproj'
创建 OrderService_PS 网站和应用程序池
在本节中,您将使用 IIS 的 Appcmd.exe 管理工具创建网站和应用程序池。您将使用 SystemRoot 环境变量通过 Windows PowerShell 的环境提供程序来引用到 Appcmd.exe 的路径。若要查看此操作的工作方式,请在 Windows PowerShell 中输入下面的命令:
$env:SYSTEMROOT
结果输出应显示系统根目录。
按照下面的步骤创建 OrderService_PS 网站和 OrderServiceAppPool_PS 应用程序池。也可以将这些命令添加到 Windows PowerShell 部署脚本中以自动执行操作。
在 Windows PowerShell 中输入下面的命令,以创建配置为使用 .NET Framework 版本 4 的 OrderServiceAppPool_PS 应用程序池。
.$env:SystemRoot\System32\inetsrv\appcmd.exe add apppool /Name:OrderServiceAppPool_PS -managedRuntimeVersion:v4.0
确认下面输出中的命令结果正确无误。
APPPOOL object "OrderServiceAppPool_PS" added
在 Windows PowerShell 中输入下面的命令,以新建一个名为 OrderService_PS 的网站,该网站将配置为使用端口 95 并将其内容存储在 C:\DublinTutorial\OrderService_PS 目录中。
.$env:SystemRoot\System32\inetsrv\appcmd.exe add site /name:OrderService_PS /bindings:http/*:95: /physicalPath:C:\DublinTutorial\OrderService_PS
确认下面输出中的命令结果正确无误。
SITE object "OrderService_PS" added APP object "OrderService_PS/" added VDIR object "OrderService_PS/" added
在 Windows PowerShell 中输入下面的命令,以将 OrderService_PS 网站配置为将 OrderServiceAppPool_PS 用作默认的应用程序池。
.$env:SystemRoot\System32\inetsrv\appcmd.exe set site OrderService_PS /applicationDefaults.applicationPool:OrderServiceAppPool_PS
确认下面输出中的命令结果正确无误。
SITE object "OrderService_PS" changed
使用 Web 部署工具和 Windows PowerShell 部署 Web 服务
在本节中,您将使用 Web 部署工具将 Web 服务部署到名为 OrderService_PS 的新网站。本教程使用“_PS”后缀来表示网站是使用 Windows PowerShell 创建的。本节中演示的命令可添加到 Windows PowerShell 部署脚本中用于部署订单服务应用程序。有关 Web 部署工具的详细信息,请参阅 Web 部署工具 (https://go.microsoft.com/fwlink/?LinkId=154601)(可能为英文网页)。
在 Windows PowerShell 中执行下面的命令,以将名为 MSDeployPath 的变量分配给 Web 部署工具的完整路径。
$MSDeployPath = "$env:ProgramFiles\IIS\Microsoft Web Deploy\msdeploy.exe"
在 Windows PowerShell 中执行下面的命令,以将 OrderProcessingService 程序包部署到 OrderService_PS 网站:
.$MSDeployPath -verb:sync -source:package=C:\DublinTutorial\PS_DeploymentPackages\OrderProcessingService.zip -dest:auto -setParam:Name=`"IIS Web Application Name`"`,value=OrderService_PS/OrderProcessingService
确认结果输出正确无误,类似于如下输出。
Info: Updating createApp (OrderService_PS/OrderProcessingService). Info: Adding contentPath (OrderService_PS/OrderProcessingService). Info: Adding dirPath (OrderService_PS/OrderProcessingService). Info: Adding child dirPath (OrderService_PS/OrderProcessingService\bin). Info: Adding child filePath (OrderService_PS/OrderProcessingService\bin\OrderProcessingService.dll). Info: Adding child filePath (OrderService_PS/OrderProcessingService\OrderProcessing.svc). Info: Adding child filePath (OrderService_PS/OrderProcessingService\Web.config). Total changes: 7 (6 added, 0 deleted, 1 updated, 0 parameters changed, 22099 bytes copied)
在 Windows PowerShell 中执行下面的命令,以将 OrderWorkflowService 程序包部署到 OrderService_PS 网站:
.$MSDeployPath -verb:sync -source:package=C:\DublinTutorial\PS_DeploymentPackages\OrderWorkflowService.zip -dest:auto -setParam:Name=`"IIS Web Application Name`"`,value=OrderService_PS/OrderWorkflowService
确认结果输出正确无误,类似于如下输出。
Info: Updating createApp (OrderService_PS/OrderWorkflowService). Info: Adding contentPath (OrderService_PS/OrderWorkflowService). Info: Adding dirPath (OrderService_PS/OrderWorkflowService). Info: Adding child dirPath (OrderService_PS/OrderWorkflowService\bin). Info: Adding child filePath (OrderService_PS/OrderWorkflowService\bin\OrderWorkflowService.dll). Info: Adding child filePath (OrderService_PS/OrderWorkflowService\OrderWorkflow.xamlx). Info: Adding child filePath (OrderService_PS/OrderWorkflowService\Web.config). Total changes: 7 (6 added, 0 deleted, 1 updated, 0 parameters changed, 84412 bytes copied)
在 Windows PowerShell 中执行下面的命令,以将 ShippingService 程序包部署到 OrderService_PS 网站:
.$MSDeployPath -verb:sync -source:package=C:\DublinTutorial\PS_DeploymentPackages\ShippingService.zip -dest:auto -setParam:Name=`"IIS Web Application Name`"`,value=OrderService_PS/ShippingService
确认结果输出正确无误,类似于如下输出。
Info: Updating createApp (OrderService_PS/ShippingService). Info: Adding contentPath (OrderService_PS/ShippingService). Info: Adding dirPath (OrderService_PS/ShippingService). Info: Adding child dirPath (OrderService_PS/ShippingService\bin). Info: Adding child filePath (OrderService_PS/ShippingService\bin\ShippingService.dll). Info: Adding child filePath (OrderService_PS/ShippingService\bin\ShippingService.pdb). Info: Adding child filePath (OrderService_PS/ShippingService\Shipping.svc). Info: Adding child filePath (OrderService_PS/ShippingService\Web.config). Total changes: 8 (7 added, 0 deleted, 1 updated, 0 parameters changed, 68029 bytes copied)
使用 Windows PowerShell 测试 Web 服务
在本节中,您将使用简单的脚本函数来查看是否可以浏览 Web 服务。
在 Windows PowerShell 中输入下面的命令,以使用记事本新建一个名为 Utility.ps1 的实用程序脚本。
NotePad Utility.ps1
当记事本启动后询问是否要创建文件时,单击“是”。
复制下面的脚本函数并将其粘贴到记事本中。
#=======================================================# #=== ===# #=== Performs a simple browse test to a web service. ===# #=== ===# #=======================================================# function BrowseWebService($address) { trap {return $false;} $WebClient = New-Object System.Net.WebClient $content = $WebClient.DownloadString($address) $content.Contains("You have created a service.") }
该函数使用 System.Net.WebClient 类来分析来自请求指定服务地址的文本响应。如果响应包含字符串“You have created a service.”,则浏览测试将返回 $true。否则,该测试将返回 $false。
关闭记事本,当系统提示保存 Utility.ps1 时,单击“保存”。
在 Windows PowerShell 中执行下面的命令,以导入实用程序脚本作为当前 Windows PowerShell 会话的模块。
Import-Module .\Utility.ps1
在 Windows PowerShell 中输入下面三条命令,测试所有三个订单服务 Web 服务。
BrowseWebService "https://localhost:95/OrderProcessingService/OrderProcessing.svc"
BrowseWebService "https://localhost:95/OrderWorkflowService/OrderWorkflow.xamlx"
BrowseWebService "https://localhost:95/ShippingService/Shipping.svc"
确认每个 BrowseWebService 命令都报告 True,如下所示。
PS C:\> BrowseWebService "https://localhost:95/OrderWorkflowService/OrderWorkflow.xamlx" True PS C:\> BrowseWebService "https://localhost:95/OrderProcessingService/OrderProcessing.svc" True PS C:\> BrowseWebService "https://localhost:95/ShippingService/Shipping.svc" True
我进行了哪些操作?
在本课程中,您将各个项目的配置文件更新为使用新的终结点地址。然后,在 Windows PowerShell 中创建了新的网站和应用程序池。最后,您使用 Windows PowerShell 生成各服务项目并将其部署到新网站。
后续步骤
在第 3 课:为订单服务配置 Windows PowerShell中,您将使用 Windows PowerShell 的 AppFabric cmdlet 配置在本课程中部署的订单服务应用程序的监控和暂留数据库。
另请参阅
概念
第 1 课:Windows PowerShell 的 AppFabric Cmdlet 入门
第 3 课:为订单服务配置 Windows PowerShell
第 4 课:使用 Windows PowerShell 监控订单服务
第 5 课:使用 Windows PowerShell 跟踪工作流
2012-03-05