Share via


Een bestaand uitvoerbaar bestand verpakken en implementeren in Service Fabric

Wanneer u een bestaand uitvoerbaar bestand inpakt als een uitvoerbaar gastbestand, kunt u ervoor kiezen om een Visual Studio-projectsjabloon te gebruiken of om het toepassingspakket handmatig te maken. Met Visual Studio worden de structuur en manifestbestanden van het toepassingspakket gemaakt door de nieuwe projectsjabloon voor u.

Tip

De eenvoudigste manier om een bestaand uitvoerbaar Windows-bestand in een service te verpakken, is door Visual Studio en Linux te gebruiken om Yeoman te gebruiken

Visual Studio gebruiken om een bestaand uitvoerbaar bestand te verpakken en te implementeren

Visual Studio biedt een Service Fabric-servicesjabloon om u te helpen bij het implementeren van een uitvoerbaar gastbestand in een Service Fabric-cluster.

  1. Kies Bestand>nieuw project en maak een Service Fabric-toepassing.
  2. Kies Uitvoerbaar gastbestand als servicesjabloon.
  3. Klik op Bladeren om de map met het uitvoerbare bestand te selecteren en vul de rest van de parameters in om de service te maken.
    • Gedrag van codepakket. Kan worden ingesteld om alle inhoud van uw map te kopiëren naar het Visual Studio-project, wat handig is als het uitvoerbare bestand niet verandert. Als u verwacht dat het uitvoerbare bestand verandert en de mogelijkheid wilt om nieuwe builds dynamisch op te halen, kunt u ervoor kiezen om in plaats daarvan een koppeling naar de map te maken. U kunt gekoppelde mappen gebruiken bij het maken van het toepassingsproject in Visual Studio. Deze koppeling naar de bronlocatie vanuit het project, zodat u het uitvoerbare gastbestand in de bronbestemming kunt bijwerken. Deze updates worden onderdeel van het toepassingspakket bij de build.
    • Programma geeft het uitvoerbare bestand op dat moet worden uitgevoerd om de service te starten.
    • Argumenten geeft de argumenten op die moeten worden doorgegeven aan het uitvoerbare bestand. Dit kan een lijst met parameters met argumenten zijn.
    • WorkingFolder geeft de werkmap op voor het proces dat wordt gestart. U kunt drie waarden opgeven:
      • CodeBase geeft aan dat de werkmap wordt ingesteld op de codemap in het toepassingspakket (Code map die wordt weergegeven in de voorgaande bestandsstructuur).
      • CodePackage geeft aan dat de werkmap wordt ingesteld op de hoofdmap van het toepassingspakket (GuestService1Pkg weergegeven in de voorgaande bestandsstructuur).
      • Work geeft aan dat de bestanden in een submap met de naam werk worden geplaatst.
  4. Geef de service een naam en klik op OK.
  5. Als uw service een eindpunt nodig heeft voor communicatie, kunt u nu het protocol, de poort en het type toevoegen aan het ServiceManifest.xml-bestand. Voorbeeld: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.
  6. U kunt nu het pakket gebruiken en actie publiceren op basis van uw lokale cluster door fouten in de oplossing in Visual Studio op te sporen. Wanneer u klaar bent, kunt u de toepassing publiceren naar een extern cluster of de oplossing inchecken voor broncodebeheer.
  7. Lees de controle van uw actieve toepassing om te zien hoe u de uitvoerbare gastservice kunt weergeven die wordt uitgevoerd in Service Fabric Explorer.

Zie Uw eerste uitvoerbare gasttoepassing maken met Visual Studio voor een voorbeeldscenario.

Meerdere uitvoerbare bestanden verpakken met Visual Studio

U kunt Visual Studio gebruiken om een toepassingspakket te maken dat meerdere uitvoerbare gastbestanden bevat. Nadat u het eerste uitvoerbare gastbestand hebt toegevoegd, klikt u met de rechtermuisknop op het toepassingsproject en selecteert u de service Add-New> Service Fabric om het tweede uitvoerbare gastproject aan de oplossing toe te voegen.

Notitie

Als u ervoor kiest om de bron in het Visual Studio-project te koppelen, zorgt u ervoor dat uw toepassingspakket up-to-date is met wijzigingen in de bron.

Yeoman gebruiken om een bestaand uitvoerbaar bestand in Linux te verpakken en te implementeren

De procedure voor het maken en implementeren van een uitvoerbaar gastbestand in Linux is hetzelfde als het implementeren van een C# of Java-toepassing.

  1. Typ in een terminal yo azuresfguest.
  2. Geef uw toepassing een naam.
  3. Geef uw service een naam en geef de details op, inclusief het pad van het uitvoerbare bestand en de parameters waarmee deze moet worden aangeroepen.

Yeoman maakt een toepassingspakket met de juiste toepassings- en manifestbestanden, samen met het installeren en verwijderen van scripts.

Meerdere uitvoerbare bestanden verpakken met Behulp van Yeoman in Linux

Voer de volgende stappen uit als u nog een service wilt toevoegen aan een toepassing die al is gemaakt met yo:

  1. Stel de directory in op de hoofdmap van de bestaande toepassing. Bijvoorbeeld cd ~/YeomanSamples/MyApplication als MyApplication de toepassing is die is gemaakt door Yeoman.
  2. Voer yo azuresfguest:AddService de benodigde gegevens uit en geef deze op.

Handmatig verpakken en een bestaand uitvoerbaar bestand implementeren

Het proces voor het handmatig verpakken van een uitvoerbaar gastbestand is gebaseerd op de volgende algemene stappen:

  1. Maak de pakketmapstructuur.
  2. Voeg de code en configuratiebestanden van de toepassing toe.
  3. Bewerk het manifestbestand van de service.
  4. Bewerk het manifestbestand van de toepassing.

De pakketmapstructuur maken

U kunt beginnen met het maken van de mapstructuur, zoals beschreven in Een Azure Service Fabric-app verpakken.

De code- en configuratiebestanden van de toepassing toevoegen

Nadat u de mapstructuur hebt gemaakt, kunt u de code- en configuratiebestanden van de toepassing toevoegen onder de code- en configuratiemappen. U kunt ook extra mappen of submappen maken onder de code- of configuratiemappen.

Service Fabric voert een xcopy van de inhoud van de hoofdmap van de toepassing uit, dus er is geen vooraf gedefinieerde structuur voor het maken van twee hoofdmappen, code en instellingen. (U kunt desgewenst verschillende namen kiezen. Meer informatie vindt u in de volgende sectie.)

Notitie

Zorg ervoor dat u alle bestanden en afhankelijkheden opneemt die de toepassing nodig heeft. Service Fabric kopieert de inhoud van het toepassingspakket op alle knooppunten in het cluster waar de services van de toepassing worden geïmplementeerd. Het pakket moet alle code bevatten die de toepassing moet uitvoeren. Neem niet aan dat de afhankelijkheden al zijn geïnstalleerd.

Het servicemanifestbestand bewerken

De volgende stap bestaat uit het bewerken van het manifestbestand van de service om de volgende informatie op te nemen:

  • De naam van het servicetype. Dit is een id die Service Fabric gebruikt om een service te identificeren.
  • De opdracht die moet worden gebruikt om de toepassing te starten (ExeHost).
  • Elk script dat moet worden uitgevoerd om de toepassing in te stellen (SetupEntrypoint).

Hier volgt een voorbeeld van een ServiceManifest.xml bestand:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="NodeApp" Version="1.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true"/>
   </ServiceTypes>
   <CodePackage Name="code" Version="1.0.0.0">
      <SetupEntryPoint>
         <ExeHost>
             <Program>scripts\launchConfig.cmd</Program>
         </ExeHost>
      </SetupEntryPoint>
      <EntryPoint>
         <ExeHost>
            <Program>node.exe</Program>
            <Arguments>bin/www</Arguments>
            <WorkingFolder>CodePackage</WorkingFolder>
         </ExeHost>
      </EntryPoint>
   </CodePackage>
   <Resources>
      <Endpoints>
         <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
      </Endpoints>
   </Resources>
</ServiceManifest>

In de volgende secties worden de verschillende onderdelen van het bestand beschreven die u moet bijwerken.

ServiceTypes bijwerken

<ServiceTypes>
  <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
  • U kunt elke gewenste naam ServiceTypeNamekiezen. De waarde wordt in het ApplicationManifest.xml bestand gebruikt om de service te identificeren.
  • Geef UseImplicitHost="true" op. Dit kenmerk vertelt Service Fabric dat de service is gebaseerd op een zelfstandige app, dus alle Service Fabric moet het starten als proces en de status ervan controleren.

CodePackage bijwerken

Het CodePackage-element geeft de locatie (en versie) van de code van de service op.

<CodePackage Name="Code" Version="1.0.0.0">

Het Name element wordt gebruikt om de naam van de map op te geven in het toepassingspakket dat de code van de service bevat. CodePackage heeft ook het version kenmerk. Dit kan worden gebruikt om de versie van de code op te geven en kan ook worden gebruikt om de code van de service te upgraden met behulp van de infrastructuur voor levenscyclusbeheer van toepassingen in Service Fabric.

Optioneel: SetupEntrypoint bijwerken

<SetupEntryPoint>
   <ExeHost>
       <Program>scripts\launchConfig.cmd</Program>
   </ExeHost>
</SetupEntryPoint>

Het element SetupEntryPoint wordt gebruikt om een uitvoerbaar of batchbestand op te geven dat moet worden uitgevoerd voordat de code van de service wordt gestart. Het is een optionele stap, dus deze hoeft niet te worden opgenomen als er geen initialisatie is vereist. SetupEntryPoint wordt uitgevoerd telkens wanneer de service opnieuw wordt gestart.

Er is slechts één SetupEntryPoint, dus installatiescripts moeten worden gegroepeerd in één batchbestand als de installatie van de toepassing meerdere scripts vereist. SetupEntryPoint kan elk type bestand uitvoeren: uitvoerbare bestanden, batchbestanden en PowerShell-cmdlets. Zie SetupEntryPoint configureren voor meer informatie.

In het voorgaande voorbeeld voert SetupEntryPoint een batchbestand LaunchConfig.cmd uit dat zich in de scripts submap van de codemap bevindt (ervan uitgaande dat het WorkingFolder-element is ingesteld op CodeBase).

EntryPoint bijwerken

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
  </ExeHost>
</EntryPoint>

Het EntryPoint element in het manifestbestand van de service wordt gebruikt om op te geven hoe de service moet worden gestart.

Het ExeHost element geeft het uitvoerbare bestand (en de argumenten) op die moeten worden gebruikt om de service te starten. U kunt desgewenst het IsExternalExecutable="true" kenmerk toevoegen om aan te ExeHost geven dat het programma een extern uitvoerbaar bestand buiten het codepakket is. Bijvoorbeeld: <ExeHost IsExternalExecutable="true">.

  • Program hiermee geeft u de naam op van het uitvoerbare bestand dat de service moet starten.
  • Arguments geeft de argumenten op die moeten worden doorgegeven aan het uitvoerbare bestand. Dit kan een lijst met parameters met argumenten zijn.
  • WorkingFolder geeft de werkmap op voor het proces dat wordt gestart. U kunt drie waarden opgeven:
    • CodeBase geeft aan dat de werkmap wordt ingesteld op de codemap in het toepassingspakket (Code map in de voorgaande bestandsstructuur).
    • CodePackage geeft aan dat de werkmap wordt ingesteld op de hoofdmap van het toepassingspakket (GuestService1Pkg in de voorgaande bestandsstructuur).
      • Work geeft aan dat de bestanden in een submap met de naam werk worden geplaatst.

De WorkingFolder is handig om de juiste werkmap in te stellen, zodat relatieve paden kunnen worden gebruikt door de toepassing of initialisatiescripts.

Eindpunten bijwerken en registreren bij Naming Service voor communicatie

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>

In het voorgaande voorbeeld geeft het Endpoint element de eindpunten op waarop de toepassing kan luisteren. In dit voorbeeld luistert de Node.js-toepassing op http op poort 3000.

Bovendien kunt u Service Fabric vragen om dit eindpunt te publiceren naar de Naamgevingsservice, zodat andere services het eindpuntadres voor deze service kunnen detecteren. Hierdoor kunt u communiceren tussen services die uitvoerbare gastbestanden zijn. Het gepubliceerde eindpuntadres is van het formulier UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme en PathSuffix zijn optionele kenmerken. IPAddressOrFQDN is het IP-adres of de volledig gekwalificeerde domeinnaam van het knooppunt waarop dit uitvoerbare bestand wordt geplaatst en wordt voor u berekend.

In het volgende voorbeeld ziet u, zodra de service is geïmplementeerd, in Service Fabric Explorer een eindpunt dat vergelijkbaar is met http://10.1.4.92:3000/myapp/ gepubliceerd voor het service-exemplaar. Of als dit een lokale computer is, ziet http://localhost:3000/myapp/u .

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000"  UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>

U kunt deze adressen gebruiken met omgekeerde proxy om te communiceren tussen services.

Het manifestbestand van de toepassing bewerken

Nadat u het Servicemanifest.xml bestand hebt geconfigureerd, moet u enkele wijzigingen aanbrengen in het ApplicationManifest.xml bestand om ervoor te zorgen dat het juiste servicetype en de juiste naam worden gebruikt.

<?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="NodeAppType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
   </ServiceManifestImport>
</ApplicationManifest>

ServiceManifestImport

In het ServiceManifestImport element kunt u een of meer services opgeven die u wilt opnemen in de app. Er wordt naar services verwezen, ServiceManifestNamewaarmee de naam wordt opgegeven van de map waar het ServiceManifest.xml bestand zich bevindt.

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>

Logboekregistratie instellen

Voor uitvoerbare gastbestanden is het handig om consolelogboeken te zien om erachter te komen of er fouten optreden in de toepassing en configuratiescripts. Consoleomleiding kan worden geconfigureerd in het ServiceManifest.xml bestand met behulp van het ConsoleRedirection element.

Waarschuwing

Gebruik nooit het consoleomleidingsbeleid in een toepassing die in productie is geïmplementeerd, omdat dit van invloed kan zijn op de failover van de toepassing. Gebruik dit alleen voor lokale ontwikkelings- en foutopsporingsdoeleinden.

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
    <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
  </ExeHost>
</EntryPoint>

ConsoleRedirection kan worden gebruikt om console-uitvoer (zowel stdout als stderr) om te leiden naar een werkmap. Dit biedt de mogelijkheid om te controleren of er geen fouten zijn tijdens het instellen of uitvoeren van de toepassing in het Service Fabric-cluster.

FileRetentionCount bepaalt hoeveel bestanden worden opgeslagen in de werkmap. Een waarde van 5 betekent bijvoorbeeld dat de logboekbestanden voor de vorige vijf uitvoeringen worden opgeslagen in de werkmap.

FileMaxSizeInKb geeft de maximale grootte van de logboekbestanden.

Logboekbestanden worden opgeslagen in een van de werkmappen van de service. Als u wilt bepalen waar de bestanden zich bevinden, gebruikt u Service Fabric Explorer om te bepalen op welk knooppunt de service wordt uitgevoerd en op welke werkmap wordt gebruikt. Dit proces wordt verderop in dit artikel behandeld.

Implementatie

De laatste stap is het implementeren van uw toepassing. Het volgende PowerShell-script laat zien hoe u uw toepassing implementeert in het lokale ontwikkelcluster en een nieuwe Service Fabric-service start.


Connect-ServiceFabricCluster localhost:19000

Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath 'C:\Dev\MultipleApplications' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'nodeapp'

Write-Host 'Registering application type...'
Register-ServiceFabricApplicationType -ApplicationPathInImageStore 'nodeapp'

New-ServiceFabricApplication -ApplicationName 'fabric:/nodeapp' -ApplicationTypeName 'NodeAppType' -ApplicationTypeVersion 1.0

New-ServiceFabricService -ApplicationName 'fabric:/nodeapp' -ServiceName 'fabric:/nodeapp/nodeappservice' -ServiceTypeName 'NodeApp' -Stateless -PartitionSchemeSingleton -InstanceCount 1

Tip

Comprimeer het pakket voordat u naar het installatiekopiearchief kopieert als het pakket groot is of veel bestanden heeft. Meer informatie is hier beschikbaar.

Een Service Fabric-service kan worden geïmplementeerd in verschillende configuraties. Het kan bijvoorbeeld worden geïmplementeerd als één of meerdere exemplaren, of het kan op een zodanige manier worden geïmplementeerd dat er één exemplaar van de service op elk knooppunt van het Service Fabric-cluster is.

De InstanceCount parameter van de New-ServiceFabricService cmdlet wordt gebruikt om op te geven hoeveel exemplaren van de service moeten worden gestart in het Service Fabric-cluster. U kunt de InstanceCount waarde instellen, afhankelijk van het type toepassing dat u implementeert. De twee meest voorkomende scenario's zijn:

  • InstanceCount = "1". In dit geval wordt slechts één exemplaar van de service geïmplementeerd in het cluster. De scheduler van Service Fabric bepaalt op welk knooppunt de service wordt geïmplementeerd.
  • InstanceCount ="-1". In dit geval wordt één exemplaar van de service geïmplementeerd op elk knooppunt in het Service Fabric-cluster. Het resultaat heeft één (en slechts één) exemplaar van de service voor elk knooppunt in het cluster.

Dit is een handige configuratie voor front-endtoepassingen (bijvoorbeeld een REST-eindpunt), omdat clienttoepassingen verbinding moeten maken met een van de knooppunten in het cluster om het eindpunt te kunnen gebruiken. Deze configuratie kan ook worden gebruikt wanneer bijvoorbeeld alle knooppunten van het Service Fabric-cluster zijn verbonden met een load balancer. Clientverkeer kan vervolgens worden gedistribueerd over de service die wordt uitgevoerd op alle knooppunten in het cluster.

Uw actieve toepassing controleren

Identificeer in Service Fabric Explorer het knooppunt waarop de service wordt uitgevoerd. In dit voorbeeld wordt het uitgevoerd op Node1:

Knooppunt waarop de service wordt uitgevoerd

Als u naar het knooppunt navigeert en naar de toepassing bladert, ziet u de essentiële knooppuntinformatie, inclusief de locatie op schijf.

Locatie op schijf

Als u met Server Explorer naar de map bladert, kunt u de werkmap en de logboekmap van de service vinden, zoals wordt weergegeven in de volgende schermopname:

Locatie van logboek

Volgende stappen

In dit artikel hebt u geleerd hoe u een uitvoerbaar gastbestand inpakt en implementeert in Service Fabric. Zie de volgende artikelen voor gerelateerde informatie en taken.