Service Fabric program- och tjänstmanifest

Den här artikeln beskriver Service Fabric program och tjänster definieras och versionsdelade med hjälp av ApplicationManifest.xml och ServiceManifest.xml filer. Mer detaljerade exempel finns i exempel på program- och tjänstmanifest. XML-schemat för dessa manifestfiler dokumenteras i schemadokumentationen för ServiceFabricServiceModel.xsd.

Varning

MANIFEST-XML-filschemat tillämpar korrekt ordning på underordnade element. Som en partiell lösning öppnar du "C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd" i Visual Studio när du redigerar eller ändrar något av Service Fabric-manifesten. På så sätt kan du kontrollera ordningen på underordnade element och ger intelli-sense.

Beskriv en tjänst i ServiceManifest.xml

Tjänstmanifestet definierar deklarativt tjänsttypen och -versionen. Den anger tjänstmetadata som tjänsttyp, hälsoegenskaper, mått för belastningsutjämning, binärfiler för tjänsten och konfigurationsfiler. Med andra ord beskrivs den kod, konfiguration och datapaket som utgör ett tjänstpaket för att stödja en eller flera tjänsttyper. Ett tjänstmanifest kan innehålla flera kod-, konfigurations- och datapaket, som kan versionsdelade oberoende av varandra. Här är ett tjänstmanifest för ASP.NET Core-frontwebbtjänsten för röstningsexempelprogrammet (och här följer några mer detaljerade exempel):

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="VotingWebPkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="https://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <!-- This is the name of your ServiceType. 
         This name must match the string used in RegisterServiceType call in Program.cs. -->
    <StatelessServiceType ServiceTypeName="VotingWebType" />
  </ServiceTypes>

  <!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>VotingWeb.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

  <!-- Config package is the contents of the Config directory under PackageRoot that contains an 
       independently-updateable and versioned set of custom configuration settings for your service. -->
  <ConfigPackage Name="Config" Version="1.0.0" />

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" />
    </Endpoints>
  </Resources>
</ServiceManifest>

Versionsattribut är ostrukturerade strängar och parsas inte av systemet. Versionsattribut används för att versionsuppgradera varje komponent.

ServiceTypes deklarerar vilka tjänsttyper som stöds av CodePackages i det här manifestet. När en tjänst instansieras mot en av dessa tjänsttyper aktiveras alla kodpaket som deklareras i det här manifestet genom att deras startpunkter körs. De resulterande processerna förväntas registrera de tjänsttyper som stöds vid körning. Tjänsttyper deklareras på manifestnivå och inte på kodpaketnivå. Så när det finns flera kodpaket aktiveras de när systemet söker efter någon av de deklarerade tjänsttyperna.

Den körbara fil som anges av EntryPoint är vanligtvis den långvariga tjänstvärden. SetupEntryPoint är en privilegierad startpunkt som körs med samma autentiseringsuppgifter som Service Fabric (vanligtvis LocalSystem-kontot) före någon annan startpunkt. Förekomsten av en separat startpunkt för installationen undviker att behöva köra tjänstvärden med hög behörighet under längre tidsperioder. Den körbara fil som anges av EntryPoint körs när SetupEntryPoint avslutas. Om processen avslutas eller kraschar övervakas och startas den resulterande processen om (med början igen med SetupEntryPoint).

Vanliga scenarier för att använda SetupEntryPoint är när du kör en körbar fil innan tjänsten startar eller när du utför en åtgärd med utökade privilegier. Exempel:

  • Konfigurera och initiera miljövariabler som den körbara tjänsten behöver. Detta är inte begränsat till endast körbara filer som skrivits via Service Fabric programmeringsmodeller. Till exempel npm.exe vissa miljövariabler som konfigurerats för att distribuera ett node.js program.
  • Konfigurera åtkomstkontroll genom att installera säkerhetscertifikat.

Mer information om hur du konfigurerar SetupEntryPoint finns i Konfigurera principen för en startpunkt för tjänstinstallation

EnvironmentVariables (anges inte i föregående exempel) innehåller en lista över miljövariabler som har angetts för det här kodpaketet. Miljövariabler kan åsidosättas i för ApplicationManifest.xml att ange olika värden för olika tjänstinstanser.

DataPackage (anges inte i föregående exempel) deklarerar en mapp med namnet med attributet Name som innehåller godtyckliga statiska data som ska användas av processen vid körning.

ConfigPackage deklarerar en mapp med namnet med attributet Name som innehåller Settings.xml fil. Inställningsfilen innehåller avsnitt med användardefinierade nyckel/värde-parinställningar som processen läser tillbaka vid körning. Om bara ConfigPackage-versionen har ändrats under en uppgradering startas inte den process som körs om. I stället meddelar ett återanrop processen att konfigurationsinställningarna har ändrats så att de kan läsas in på nytt dynamiskt. Här är ett exempel Settings.xml fil:

<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MyConfigurationSection">
    <Parameter Name="MySettingA" Value="Example1" />
    <Parameter Name="MySettingB" Value="Example2" />
  </Section>
</Settings>

En Service Fabric tjänstslutpunkt är ett exempel på en Service Fabric resurs. En Service Fabric resurs kan deklareras/ändras utan att ändra den kompilerade koden. Åtkomst till Service Fabric resurser som anges i tjänstmanifestet kan styras via SecurityGroup i programmanifestet. När en slutpunktsresurs definieras i tjänstmanifestet Service Fabric till portar från det reserverade programmets portintervall när en port inte anges uttryckligen. Läs mer om att ange eller åsidosätta slutpunktsresurser.

Varning

Statiska portar får inte överlappa programportintervallet som anges i ClusterManifest. Om du anger en statisk port tilldelar du den utanför programportintervallet, annars resulterar det i portkonflikter. Med version 6.5CU2 utfärdar vi en hälsovarning när vi identifierar en sådan konflikt, men låter distributionen fortsätta synkronisera med det levererade 6.5-beteendet. Vi kan dock förhindra programdistributionen från nästa större versioner.

Beskriva ett program i ApplicationManifest.xml

Programmanifestet beskriver deklarativt programtypen och -versionen. Den anger metadata för tjänstsammansättning, till exempel stabila namn, partitioneringsschema, instansantal/replikeringsfaktor, säkerhets-/isoleringsprincip, placeringsbegränsningar, konfigurationsåsidosättningar och ingående tjänsttyper. De belastningsutjämningsdomäner som programmet placeras i beskrivs också.

Därför beskriver ett programmanifest element på programnivå och refererar till ett eller flera tjänstmanifest för att skapa en programtyp. Här är programmanifestet för exempelprogrammet Voting (och här följer några mer detaljerade exempel):

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="VotingData_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingData_PartitionCount" DefaultValue="1" />
    <Parameter Name="VotingData_TargetReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingWeb_InstanceCount" DefaultValue="-1" />
  </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="VotingDataPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </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="VotingData">
      <StatefulService ServiceTypeName="VotingDataType" TargetReplicaSetSize="[VotingData_TargetReplicaSetSize]" MinReplicaSetSize="[VotingData_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[VotingData_PartitionCount]" LowKey="0" HighKey="25" />
      </StatefulService>
    </Service>
    <Service Name="VotingWeb" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="VotingWebType" InstanceCount="[VotingWeb_InstanceCount]">
        <SingletonPartition />
         <PlacementConstraints>(NodeType==NodeType0)</PlacementConstraints
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

Precis som tjänstmanifest är versionsattribut ostrukturerade strängar och parsas inte av systemet. Versionsattribut används också för att versionsuppgradera varje komponent.

Parametrar definierar de parametrar som används i hela programmanifestet. Värdena för dessa parametrar kan anges när programmet instansieras och kan åsidosätta konfigurationsinställningar för program eller tjänster. Standardparametervärdet används om värdet inte ändras under program instantiering. Information om hur du underhåller olika program- och tjänstparametrar för enskilda miljöer finns i Hantera programparametrar för flera miljöer.

ServiceManifestImport innehåller referenser till tjänstmanifest som utgör den här programtypen. Ett programmanifest kan innehålla flera tjänstmanifestimporter, var och en kan versionsdelade oberoende av varandra. Importerade tjänstmanifest avgör vilka tjänsttyper som är giltiga i den här programtypen. I ServiceManifestImport åsidosätter du konfigurationsvärden i Settings.xml och miljövariabler i ServiceManifest.xml filer. Principer (anges inte i föregående exempel) för slutpunktsbindning, säkerhet och åtkomst samt paketdelning kan anges för importerade tjänstmanifest. Mer information finns i Konfigurera säkerhetsprinciper för ditt program.

DefaultServices deklarerar tjänstinstanser som skapas automatiskt när ett program instantieras mot den här programtypen. Standardtjänster är bara en bekvämlighet och fungerar som normala tjänster i alla avseende efter att de har skapats. De uppgraderas tillsammans med andra tjänster i programinstansen och kan också tas bort. Ett programmanifest kan innehålla flera standardtjänster.

Certifikat (anges inte i föregående exempel) deklarerar de certifikat som används för att konfigurera HTTPS-slutpunkter eller kryptera hemligheter i programmanifestet.

Placeringsbegränsningar är de instruktioner som definierar var tjänsterna ska köras. Dessa instruktioner är kopplade till enskilda tjänster som du väljer för en eller flera nodegenskaper. Mer information finns i Placeringsbegränsningar och syntax för nodegenskap

Principer (som inte anges i föregående exempel) beskriver logginsamlingen, standardprinciperna för körsom ,hälsa och säkerhetsåtkomst som ska anges på programnivå, inklusive om tjänsterna har åtkomst till Service Fabric-körningen.

Anteckning

Som standard har Service Fabric-program åtkomst till Service Fabric-körningen i form av en slutpunkt som accepterar programspecifika begäranden och miljövariabler som pekar på filsökvägar på värden som innehåller infrastruktur och programspecifika filer. Överväg att inaktivera den här åtkomsten när programmet är värd för ej betrodd kod (dvs. kod vars ursprung är okänt eller som programägaren vet att det inte är säkert att köra). Mer information finns i metodtipsen för säkerhet i Service Fabric.

Huvudnamn (anges inte i föregående exempel) beskriver de säkerhetsobjekt (användare eller grupper) som krävs för att köra tjänster och skydda tjänstresurser. Huvudnamn refereras till i avsnitten Principer.

Nästa steg