Знакомство с StartupServices.xml в приложении Service Fabric

Эта функция представляет файл StartupServices.xml в макете приложения Service Fabric. В этом файле размещается раздел DefaultServices ApplicationManifest.xml. В этой реализации DefaultServices и параметры, связанные с определением сервиса, перемещаются из существующего файла ApplicationManifest.xml в новый файл с именем StartupServices.xml. Этот файл используется в каждой функции (Собрать/Перестроить/F5/Ctrl+F5/Опубликовать) в Visual Studio.

StartupServices.xml предназначен только для развертываний Visual Studio. Это позволяет гарантировать, что пакеты, развернутые с помощью Visual Studio (с StartupServices.xml), не имеют конфликтов с развернутыми службами ARM.

StartupServices.xml не упаковано в пакет приложения. Он не поддерживается в конвейере DevOps, и клиенты должны развертывать отдельные службы в манифесте приложения либо с помощью ARM, либо с помощью командлетов с требуемой конфигурацией.

Существующий макет приложения Service Fabric

Для каждого приложения Service Fabric файл ApplicationManifest.xml является источником всех сведений для приложения, которые относятся к службе. ApplicationManifest.xml содержит все параметры, а также ServiceManifestImport и DefaultServices. Параметры конфигурации находятся в файлах Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters.

При добавлении новой службы в приложение новые параметры службы, разделы ServiceManifestImport и DefaultServices добавляются в ApplicationManifest.xml. Параметры конфигурации добавляются в файлах Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters.

Когда пользователь выбирает функцию сборки и перестроения в Visual Studio, изменения разделов ServiceManifestImport, Parameters и DefaultServices происходит в ApplicationManifest.xml. Параметры конфигурации также редактируются в файлах Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters.

Когда пользователь запускает функцию F5/CTRL+F5/Опубликовать, приложения и службы развертываются или публикуются на основе информации в файле ApplictionManifest.xml. Параметры конфигурации также редактируются в файлах Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters.

Существующий макет для приложения Service Fabric

Пример файла ApplicationManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="SampleAppType"
                     ApplicationTypeVersion="1.0.0"
                     xmlns="http://schemas.microsoft.com/2011/01/fabric"
                     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Parameters>
    <Parameter Name="Web1_ASPNETCORE_ENVIRONMENT" DefaultValue="" />
    <Parameter Name="Web1_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="Web1_PartitionCount" DefaultValue="1" />
    <Parameter Name="Web1_TargetReplicaSetSize" DefaultValue="3" />
  </Parameters>
  <!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion 
       should match the Name and Version attributes of the ServiceManifest element defined in the 
       ServiceManifest.xml file. -->
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <EnvironmentOverrides CodePackageRef="code">
      <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[Web1_ASPNETCORE_ENVIRONMENT]" />
    </EnvironmentOverrides>
  </ServiceManifestImport>
  <DefaultServices>
    <!-- The section below creates instances of service types, when an instance of this 
         application type is created. You can also create one or more instances of service type using the 
         ServiceFabric PowerShell module.
         
         The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatefulService ServiceTypeName="Web1Type" TargetReplicaSetSize="[Web1_TargetReplicaSetSize]" MinReplicaSetSize="[Web1_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[Web1_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
      </StatefulService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

Новый макет приложения Service Fabric с помощью StartupServices.xml

В этой структуре есть четкое различие между сведениями об уровне обслуживания (например, определение службы и параметры службы) и сведениями на уровне приложения (ServiceManifestImport и ApplicationParameters). StartupServices.xml содержит все сведения на уровне службы, в то время как ApplicationManifest.xml содержит все сведения на уровне приложения. Другим внесенным изменением является добавление файлов Cloud.xml/Local1Node.xml/Local5Node.xml в StartupServiceParameters, которые сконфигурированы только для параметров службы. Существующие файлы Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters содержат только конфигурацию параметров на уровне приложения.

Когда добавляется новая служба в приложение, в файл ApplicationManifest.xml добавляются параметры уровня приложения и ApplicationManifest.xml. Параметры конфигурации для приложения добавляются в файлах Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters. Сведения о службах и параметры служб добавляются в StartupServices.xml, а конфигурация для параметров службы добавляется в Cloud.xml/Local1Node.xml/Local5Node.xml в StartupServiceParameters.

При сборке/перестроении проекта изменения ServiceManifestImport и параметров приложения выполняются в ApplicationManifest.xml. Параметры конфигурации приложения также редактируются в файлах Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters. Сведения, относящиеся к службе, редактируются в StartupServices.xml, а параметры службы редактируются в Cloud.xml/Local1Node.xml/Local5Node.xml в StartupServiceParameters.

Когда в Visual Studio запускается функция F5/CTRL+F5/Опубликовать, приложение развертывается и публикуется на основе сведений из файла ApplictionManifest.xml и параметров приложения из файлов Cloud.xml/Local1Node.xml/Local5Node.xml в ApplicationParameters. Каждая служба запускается отдельно со сведениями о службах из файла StartupServices.xml и конфигурацией параметров службы из любого из файлов Cloud.xml/Local1Node.xml/Local5Node.xml в StartupServiceParameters.

Новый макет приложения Service Fabric с StartupServices.xml

Эти параметры службы и параметры приложения можно изменить перед публикацией приложения (Щелкнуть правой кнопкой мыши->Опубликовать), как показано на рисунке.

Вариант публикации в новом макете

Пример файла ApplicationManifest.xml в новом макете

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="SampleAppType"
                     ApplicationTypeVersion="1.0.0"
                     xmlns="http://schemas.microsoft.com/2011/01/fabric"
                     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Parameters>
    <Parameter Name="Web1_ASPNETCORE_ENVIRONMENT" DefaultValue="" />
  </Parameters>
  <!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion 
       should match the Name and Version attributes of the ServiceManifest element defined in the 
       ServiceManifest.xml file. -->
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <EnvironmentOverrides CodePackageRef="code">
      <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[Web1_ASPNETCORE_ENVIRONMENT]" />
    </EnvironmentOverrides>
  </ServiceManifestImport>
</ApplicationManifest>

Пример файла StartupServices.xml

<?xml version="1.0" encoding="utf-8"?>
<StartupServicesManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <Services>
    <!-- The section below creates instances of service types, when an instance of this 
         application type is created. You can also create one or more instances of service type using the 
         ServiceFabric PowerShell module.

         The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </Services>
</StartupServicesManifest>

Функция startupServices.xml включена для всех новых проектов в пакете SDK для SF версии 5.0.516.9590 и выше. Проекты, созданные с более старой версией пакета SDK, полностью совместимы с последним пакетом SDK. Миграция старых проектов в новый дизайн не поддерживается. Если пользователь хочет создать приложение Service Fabric без StartupServices.xml в новой версии ПАКЕТА SDK, пользователь должен выбрать ссылку "Справка по выбору шаблона проекта", как показано на рисунке ниже.

Создание нового варианта приложения в новом макете

Следующие шаги