Compartilhar via


Introduzindo o StartupServices.xml no Aplicativo do Service Fabric

Esse recurso introduz um arquivo StartupServices.xml em um design de Aplicativo do Service Fabric. Esse arquivo hospeda a seção DefaultServices do ApplicationManifest.xml. Com essa implementação, os parâmetros de relacionados à definição do Serviço e do DefaultServices são movidos do ApplicationManifest.xml existente para esse novo arquivo chamado StartupServices.xml. Esse arquivo é usado em cada funcionalidade (Compilar/Recompilar/F5/Ctrl+F5/Publicar) no Visual Studio.

StartupServices.xml destina-se apenas a implantações do Visual Studio. Essa organização serve para garantir que os pacotes implantados com Visual Studio (com StartupServices.xml) não tenham conflitos com os serviços implantados no ARM.

StartupServices.xml não faz parte do pacote de aplicativos. Ele não é compatível com o pipeline DevOps e os clientes devem implantar serviços individuais em um manifesto do aplicativo por meio do ARM ou de cmdlets com a configuração desejada.

Design de Aplicativo do Service Fabric existente

Para cada aplicativo do Service Fabric, o ApplicationManifest.xml é a origem de todas as informações relacionadas ao serviço para o aplicativo. O ApplicationManifest.xml consiste em todos os Parâmetros, ServiceManifestImport e DefaultServices. Os parâmetros de configuração são mencionados nos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters.

Quando um novo serviço é adicionado a um aplicativo, as novas seções de serviço Parameters, ServiceManifestImport e DefaultServices são adicionadas dentro do ApplicationManifest.xml. Os parâmetros de configuração são adicionados nos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters.

Quando o usuário seleciona a função Compilar/Recompilar no Visual Studio, a modificação das seções ServiceManifestImport, Parameters e DefaultServices acontece no ApplicationManifest.xml. Os parâmetros de configuração também são editados nos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters.

Quando o usuário dispara um comando F5/Ctrl+F5/Publicar, os aplicativos e serviços são implantados ou publicados com base nas informações contidas no ApplictionManifest.xml. Os parâmetros de configuração são usados de qualquer um dos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters.

Design existente para um Aplicativo do Service Fabric

ApplicationManifest.xml de exemplo

<?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>

Novo Design de Aplicativo do Service Fabric com StartupServices.xml

Nesse design, há uma distinção clara entre informações de nível de serviço (por exemplo, definição de serviço e parâmetros de serviço) e informações de nível de aplicativo (ServiceManifestImport e ApplicationParameters). O StartupServices.xml contém todas as informações de nível de serviço, enquanto o ApplicationManifest.xml contém todas as informações em nível de aplicativo. Outra alteração introduzida é a adição do Cloud.xml/Local1Node.xml/Local5Node.xml, em StartupServiceParameters, que tem a configuração apenas para parâmetros de serviço. O Cloud.xml/Local1Node.xml/Local5Node.xml existente em ApplicationParameters contém apenas a configuração de parâmetros no nível do aplicativo.

Quando um novo serviço é adicionado no aplicativo, os Parâmetros de nível de aplicativo e o ServiceManifestImport são adicionados no ApplicationManifest.xml. As configurações para parâmetros de aplicativo são adicionadas nos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters. As informações de serviço e os Parâmetros de Serviço são adicionados no StartupServices.xml e a configuração de parâmetros de serviço é adicionada em Cloud.xml/Local1Node.xml/Local5Node.xml em StartupServiceParameters.

Durante a Compilação/Recompilação do projeto, ocorre a modificação do ServiceManifestImport e dos Parâmetros do Aplicativo no ApplicationManifest.xml. As configurações dos Parâmetros de Aplicativo também são editados nos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters. As informações relacionadas ao serviço são editadas em StartupServices.xml e os Parâmetros de Serviço são editados em Cloud.xml/Local1Node.xml/Local5Node.xml em StartupServiceParameters.

Quando o F5/CTRL+F5/Publicar é disparado no Visual Studio, o aplicativo é implantado/publicado com base nas informações do ApplictionManifest.xml e dos parâmetros de aplicativo de qualquer um dos arquivos do Cloud.xml/Local1Node.xml/Local5Node.xml em ApplicationParameters. Cada serviço é iniciado individualmente com informações de serviço do StartupServices.xml e com configuração de parâmetros de serviço de qualquer um dos arquivos Cloud.xml/Local1Node.xml/Local5Node.xml em StartupServiceParameters.

Novo Design para um Aplicativo do Service Fabric com StartupServices.xml

Esses parâmetros de serviço e parâmetros de aplicativo podem ser editados antes da publicação de um aplicativo (Clique com o botão direito do mouse > Publicar), conforme mostrado na imagem.

Opção de publicação no Novo Design

ApplicationManifest.xml de exemplo no novo design

<?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>

Arquivo StartupServices.xml de exemplo

<?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>

O recurso do startupServices.xml está habilitado para todo novo projeto no SDK do SF versão 5.0.516.9590 e superior. Os projetos criados com a versão mais antiga do SDK são totalmente compatíveis com o SDK mais recente. Não há suporte para a migração de projetos antigos para um novo design. Se um usuário quiser criar um aplicativo do Service Fabric sem StartupServices.xml na versão mais recente do SDK, o usuário deverá selecionar o link “Ajude-me a escolher um modelo de projeto”, conforme mostrado na imagem a seguir.

Opção Criar Novo Aplicativo em Novo Design

Próximas etapas