Поделиться через


Настройка параметров для развертывания веб-пакета

Джейсон Ли

В этом разделе описывается установка значений параметров, таких как имена веб-приложений служб IIS, строки подключения и конечные точки службы, при развертывании веб-пакета на удаленном веб-сервере IIS.

При сборке проекта веб-приложения процесс сборки и упаковки создает три ключевых файла:

  • Файл [имя проекта].zip . Это пакет веб-развертывания для проекта веб-приложения. Этот пакет содержит все сборки, файлы, скрипты баз данных и ресурсы, необходимые для повторного создания веб-приложения на удаленном веб-сервере IIS.
  • Файл [имя проекта].deploy.cmd . Содержит набор параметризованных команд веб-развертывания (MSDeploy.exe), которые публикуют пакет веб-развертывания на удаленном веб-сервере IIS.
  • Файл [имя проекта].SetParameters.xml . Это предоставляет набор значений параметров для команды MSDeploy.exe. Вы можете обновить значения в этом файле и передать их в веб-развертывание в качестве параметра командной строки при развертывании веб-пакета.

Примечание

Дополнительные сведения о процессе сборки и упаковки см. в статье Создание и упаковка проектов веб-приложений.

Файл SetParameters.xml динамически создается из файла проекта веб-приложения и всех файлов конфигурации в проекте. При сборке и упаковке проекта конвейер веб-публикации (WPP) автоматически обнаружит множество переменных, которые могут измениться в разных средах развертывания, таких как целевое веб-приложение IIS и любые строки подключения к базе данных. Эти значения автоматически параметризуются в пакете веб-развертывания и добавляются в файлSetParameters.xml . Например, если добавить строку подключения в файл web.config в проекте веб-приложения, процесс сборки обнаружит это изменение и соответствующим образом добавит запись в файлSetParameters.xml .

Во многих случаях такой автоматической параметризации будет достаточно. Однако если пользователям необходимо изменить другие параметры в разных средах развертывания, например параметры приложения или URL-адреса конечных точек службы, необходимо указать WPP параметризировать эти значения в пакете развертывания и добавить соответствующие записи в файл SetParameters.xml . В следующих разделах объясняется, как это сделать.

Автоматическая параметризация

При сборке и упаковке веб-приложения WPP автоматически параметризует следующие параметры:

  • Путь и имя целевого веб-приложения IIS.
  • Все строки подключения в файлеweb.config .
  • Строки подключения для всех баз данных, добавленных на вкладку Пакет или публикация SQL на страницах свойств проекта.

Например, если создать и упаковать пример решения диспетчера контактов без какого-либо обращения к процессу параметризации, WPP создаст этот ContactManager.Mvc.SetParameters.xml файл:

<parameters>
  <setParameter 
    name="IIS Web Application Name" 
    value="Default Web Site/ContactManager.Mvc_deploy" />  
  <setParameter 
    name="ApplicationServices-Web.config Connection String" 
    value="Data Source=DEVWORKSTATION\SQLEXPRESS;Initial Catalog=CMAppServices;
           Integrated Security=true;" />
</parameters>

В данном случае:

  • Параметр Имя веб-приложения IIS — это путь IIS, по которому необходимо развернуть веб-приложение. Значение по умолчанию берется с веб-страницы "Пакет/публикация" на страницах свойств проекта.
  • Параметр строки подключенияApplicationServices-Web.config был создан из элемента connectionStrings/add в файлеweb.config . Он представляет строку подключения, которую приложение должно использовать для связи с базой данных членства. Указанное здесь значение будет заменено на развернутый файлweb.config . Значение по умолчанию берется из файла web.config перед развертыванием.

WPP также параметризует эти свойства в пакете развертывания, который он создает. Значения этих свойств можно указать при установке пакета развертывания. Если пакет устанавливается вручную с помощью диспетчера IIS, как описано в разделе Ручная установка веб-пакетов, мастер установки предложит указать значения для всех параметров. При удаленной установке пакета с помощью файла .deploy.cmd , как описано в разделе Развертывание веб-пакетов, веб-развертывание будет искать этот файлSetParameters.xml для предоставления значений параметров. Вы можете изменить значения в файлеSetParameters.xml вручную или настроить файл в рамках автоматического процесса сборки и развертывания. Этот процесс более подробно описан далее в этом разделе.

Настраиваемая параметризация

В более сложных сценариях развертывания часто требуется параметризовать дополнительные свойства перед развертыванием проекта. Как правило, следует параметризовать все свойства и параметры, которые будут различаться в разных целевых средах. К ним может относиться следующее.

  • Конечные точки службы в файле web.config .
  • Параметры приложения в файле web.config .
  • Любые другие декларативные свойства, которые требуется указать пользователям.

Самый простой способ параметризации этих свойств — добавить файлparameters.xml в корневую папку проекта веб-приложения. Например, в решении Диспетчера контактов проект ContactManager.Mvc содержит файлparameters.xml в корневой папке.

В решении Диспетчер контактов проект ContactManager.Mvc содержит файл parameters.xml в корневой папке.

Если открыть этот файл, вы увидите, что он содержит одну запись параметра . Запись использует запрос XPath для поиска и параметризации URL-адреса конечной точки службы ContactService Windows Communication Foundation (WCF) в файлеweb.config .

<parameters>
  <parameter name="ContactService Service Endpoint Address"
             description="Specify the endpoint URL for the ContactService WCF 
                          service in the destination environment"
             defaultValue="http://localhost/ContactManagerService">
    <parameterEntry kind="XmlFile" scope="Web.config"
                    match="/configuration/system.serviceModel/client
                           /endpoint[@name='BasicHttpBinding_IContactService']
                           /@address" />
  </parameter>
</parameters>

Помимо параметризации URL-адреса конечной точки в пакете развертывания, WPP также добавляет соответствующую запись в файлSetParameters.xml , который создается вместе с пакетом развертывания.

<parameters>
  ...  
  <setParameter 
    name="ContactService Service Endpoint Address" 
    value="http://localhost/ContactManagerService" />
  ...
</parameters>

При установке пакета развертывания вручную диспетчер IIS предложит ввести адрес конечной точки службы вместе со свойствами, которые были параметризованы автоматически. При установке пакета развертывания с помощью файла .deploy.cmd можно изменить файлSetParameters.xml , указав значение для адреса конечной точки службы вместе со значениями свойств, которые были параметризованы автоматически.

Полные сведения о создании файлаparameters.xml см. в разделе Практическое руководство. Использование параметров для настройки параметров развертывания при установке пакета. Процедура с именем Использование параметров развертывания для параметров Web.config файлов содержит пошаговые инструкции.

Изменение файла SetParameters.xml

Если вы планируете развернуть пакет веб-приложения вручную ( запустив файл .deploy.cmd или запустив MSDeploy.exe из командной строки), вам ничего не мешает вручную редактировать файлSetParameters.xml перед развертыванием. Однако если вы работаете над решением корпоративного уровня, может потребоваться развернуть пакет веб-приложения в рамках более крупного автоматизированного процесса сборки и развертывания. В этом сценарии вам потребуется Microsoft Build Engine (MSBuild), чтобы изменить файлSetParameters.xml. Это можно сделать с помощью задачи MSBuild XmlPoke .

Пример решения Диспетчера контактов иллюстрирует этот процесс. Приведенные ниже примеры кода были изменены для отображения только сведений, относящихся к этому примеру.

Примечание

Более широкий обзор модели файлов проекта в примере решения и общие сведения о файлах пользовательских проектов см. в разделах Общие сведения о файле проекта и Общие сведения о процессе сборки.

Во-первых, значения параметров определяются как свойства в файле проекта для конкретной среды (например, Env-Dev.proj).

<PropertyGroup> 
  <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
    DemoSite/ContactManager
  </ContactManagerIisPath>
  <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
    http://localhost:85/ContactManagerService/ContactService.svc
  </ContactManagerTargetUrl>
  <MembershipConnectionString Condition=" '$(MembershipConnectionString)'=='' ">
    Data Source=TESTDB1;Integrated Security=true;Initial Catalog=CMAppServices
  </MembershipConnectionString>  
</PropertyGroup>

Примечание

Инструкции по настройке файлов проекта для конкретной среды для собственных серверных сред см. в разделе Настройка свойств развертывания для целевой среды.

Затем файл Publish.proj импортирует эти свойства. Так как каждый SetParameters.xml файл связан с файлом .deploy.cmd и в конечном итоге требуется, чтобы файл проекта вызвал каждый файл .deploy.cmd , файл проекта создает элемент MSBuild для каждого файла .deploy.cmd и определяет свойства, представляющие интерес, как метаданные элемента.

<ItemGroup>
  <PublishPackages Include="$(_ContactManagerDest)ContactManager.Mvc.deploy.cmd"> 
    <ParametersXml>
      $(_ContactManagerDest)ContactManager.Mvc.SetParameters.xml
    </ParametersXml>
    <IisWebAppName>
      $(ContactManagerIisPath)
    </IisWebAppName> 
    <MembershipDBConnectionName>
      ApplicationServices-Web.config Connection String
    </MembershipDBConnectionName>
    <MembershipDBConnectionString>
      $(MembershipConnectionString.Replace(";","%3b"))
    </MembershipDBConnectionString>
    <ServiceEndpointParamName>
      ContactService Service Endpoint Address
    </ServiceEndpointParamName>
    <ServiceEndpointValue>
      $(ContactManagerTargetUrl)
    </ServiceEndpointValue>
  </PublishPackages>
  ...
</ItemGroup>

В данном случае:

  • Значение метаданных ParametersXml указывает расположение файла SetParameters.xml .
  • Значение IisWebAppName — это путь IIS, по которому необходимо развернуть веб-приложение.
  • Значение MembershipDBConnectionString — это строка подключения для базы данных членства, а значение MembershipDBConnectionName — атрибут имени соответствующего параметра в файлеSetParameters.xml .
  • Значение ServiceEndpointValue — это адрес конечной точки службы WCF на целевом сервере, а значение ServiceEndpointParamName — атрибут имени соответствующего параметра в файлеSetParameters.xml .

Наконец, в файле Publish.proj целевой объект PublishWebPackages использует задачу XmlPoke для изменения этих значений в файлеSetParameters.xml .

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter[@name='%(PublishPackages.ConnectionName)']
           /@value"
    Value="%(PublishPackages.ConnectionString)"
    Condition =" '%(PublishPackages.ConnectionName)'!=''" 
  />
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter
           [@name='%(PublishPackages.MembershipDBConnectionName)']/@value"
    Value='%(PublishPackages.MembershipDBConnectionString)'
    Condition =" '%(PublishPackages.MembershipDBConnectionName)'!=''" 
  />
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter[@name='IIS Web Application Name']/@value"
    Value="%(PublishPackages.IisWebAppName)"
    Condition =" '%(PublishPackages.IisWebAppName)'!=''" 
  />
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter
           [@name='%(PublishPackages.ServiceEndpointParamName)']/@value"
    Value="%(PublishPackages.ServiceEndpointValue)"
    Condition =" '%(PublishPackages.ServiceEndpointParamName)'!=''" 
  /> 
  <!--Execute the .deploy.cmd file--> 
  ...
</Target>

Вы заметите, что каждая задача XmlPoke задает четыре значения атрибута:

  • Атрибут XmlInputPath сообщает задаче, где найти файл, который требуется изменить.
  • Атрибут Query — это запрос XPath, который идентифицирует XML-узел, который требуется изменить.
  • Атрибут Value — это новое значение, которое необходимо вставить в выбранный узел XML.
  • Атрибут Condition — это условие, по которому задача должна выполняться или не должна выполняться. В таких случаях условие гарантирует, что вы не пытаетесь вставить пустое или пустое значение в файлSetParameters.xml .

Заключение

В этом разделе описывается роль файла SetParameters.xml и объясняется, как он создается при сборке проекта веб-приложения. В нем объясняется, как параметризовать дополнительные параметры, добавив файлparameters.xml в проект. В нем также описано, как можно изменить файлSetParameters.xml в рамках более крупного автоматизированного процесса сборки с помощью задачи XmlPoke в файлах проекта.

В следующем разделе Развертывание веб-пакетов описывается, как можно развернуть веб-пакет с помощью файла .deploy.cmd или с помощью команд MSDeploy.exe напрямую. В обоих случаях файл SetParameters.xml можно указать в качестве параметра развертывания.

Дополнительные материалы

Сведения о создании веб-пакетов см. в статье Создание и упаковка проектов веб-приложений. Инструкции по фактическому развертыванию веб-пакета см. в разделе Развертывание веб-пакетов. Пошаговое руководство по созданию файла parameters.xml см. в разделе Практическое руководство. Использование параметров для настройки параметров развертывания при установке пакета.

Дополнительные общие сведения о параметризации в веб-развертывании см. в статье Параметризация веб-развертывания в действии (запись блога).