第 2 课:使用 Windows PowerShell 部署订单服务应用程序

完成所需时间: 25 分钟

目标: 了解如何将包含 WCF 和/或 WF 服务的应用程序部署到 IIS。

用途: 本课程演示使用 Windows PowerShell 通过 Web 部署工具编写部署脚本的示例方法。 您会将订单服务应用程序重新部署到名为 OrderService_PS 的网站。

先决条件

请注意以下先决条件:

过程

订单服务应用程序的重新部署过程将经历以下步骤:

  1. 为部署准备配置文件

  2. 使用 MSBuild 通过 Windows PowerShell 生成部署程序包。

  3. 创建 OrderService_PS 网站和应用程序池。

  4. 使用 Web 部署工具和 Windows PowerShell 部署各 Web 服务。

  5. 使用 Windows PowerShell 测试各 Web 服务

为部署准备配置文件

您将使用 Windows PowerShell 将订单服务应用程序重新部署到使用端口 95 的新网站。在本节中,您将在部署之前使用新的端口信息来更新配置文件中的终结点地址。

  1. 在 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>
    

    关闭记事本,当系统提示保存更改时,单击“保存”。

  2. 从 Windows PowerShell 运行下面的命令,以打开 Order Processing Service 的 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>
    

    关闭记事本,当系统提示保存更改时,单击“保存”。

  3. 从 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>
    

    关闭记事本,当系统提示保存更改时,单击“保存”。

  4. 从 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)(可能为英文网页)。

  1. 在 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"
    
  2. 在 Windows PowerShell 中执行下面的命令,以生成 OrderProcessingService 项目的部署程序包:

    .$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\OrderProcessingService\OrderProcessingService.csproj' /T:Package /P:PackageLocation='C:\DublinTutorial\PS_DeploymentPackages\OrderProcessingService.zip'
    
  3. 在 Windows PowerShell 中执行下面的命令,以生成 OrderWorkflowService 项目的部署程序包:

    .$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\OrderWorkflowService\OrderWorkflowService.csproj' /T:Package /P:PackageLocation='C:\DublinTutorial\PS_DeploymentPackages\OrderWorkflowService.zip'
    
  4. 在 Windows PowerShell 中执行下面的命令,以生成 ShippingService 项目的部署程序包:

    .$MSBuildPath 'C:\DublinTutorial\OrderServiceSolution\Completed\ShippingService\ShippingService.csproj' /T:Package /P:PackageLocation='C:\DublinTutorial\PS_DeploymentPackages\ShippingService.zip'
    
  5. 确认所有三个 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
    
  6. 如果尚未生成 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 部署脚本中以自动执行操作。

  1. 在 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
    
  2. 在 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
    
  3. 在 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)(可能为英文网页)。

  1. 在 Windows PowerShell 中执行下面的命令,以将名为 MSDeployPath 的变量分配给 Web 部署工具的完整路径。

    $MSDeployPath = "$env:ProgramFiles\IIS\Microsoft Web Deploy\msdeploy.exe"
    
  2. 在 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)
    
  3. 在 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)
    
  4. 在 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 服务。

  1. 在 Windows PowerShell 中输入下面的命令,以使用记事本新建一个名为 Utility.ps1 的实用程序脚本。

    NotePad Utility.ps1
    

    当记事本启动后询问是否要创建文件时,单击“是”。

  2. 复制下面的脚本函数并将其粘贴到记事本中。

    #=======================================================#
    #===                                                 ===#
    #=== 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

  3. 关闭记事本,当系统提示保存 Utility.ps1 时,单击“保存”。

  4. 在 Windows PowerShell 中执行下面的命令,以导入实用程序脚本作为当前 Windows PowerShell 会话的模块。

    Import-Module .\Utility.ps1
    
  5. 在 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 的 Windows Server AppFabric Cmdlet 入门
第 3 课:为订单服务配置 Windows PowerShell
第 4 课:使用 Windows PowerShell 监控订购服务
第 5 课:使用 Windows PowerShell 跟踪工作流

  2011-12-05