Distribuire un eseguibile guest in Service FabricDeploy a guest executable to Service Fabric

In Azure Service Fabric distribuito come servizio è possibile eseguire qualsiasi tipo di codice, ad esempio Node.js, Java, e C++.You can run any type of code, such as Node.js, Java, or C++ in Azure Service Fabric as a service. Service Fabric fa riferimento a questi tipi di servizi come eseguibili guest.Service Fabric refers to these types of services as guest executables.

Gli eseguibili guest vengono considerati da Service Fabric come servizi senza stato.Guest executables are treated by Service Fabric like stateless services. Di conseguenza, vengono inseriti nei nodi di un cluster in base alla disponibilità e ad altre metriche.As a result, they are placed on nodes in a cluster, based on availability and other metrics. Questo articolo descrive come creare un pacchetto e distribuire un eseguibile guest in un cluster di Service Fabric, usando Visual Studio o un'utilità della riga di comando.This article describes how to package and deploy a guest executable to a Service Fabric cluster, by using Visual Studio or a command-line utility.

Questo articolo illustra i passaggi per creare il pacchetto di un eseguibile guest e distribuirlo in Service Fabric.In this article, we cover the steps to package a guest executable and deploy it to Service Fabric.

Vantaggi dell'esecuzione di un'eseguibile guest in Service FabricBenefits of running a guest executable in Service Fabric

L'esecuzione di un eseguibile guest in un cluster di Service Fabric presenta numerosi vantaggi:There are several advantages to running a guest executable in a Service Fabric cluster:

  • Disponibilità elevata.High availability. Le applicazioni eseguite in Service Fabric sono rese altamente disponibili.Applications that run in Service Fabric are made highly available. Service Fabric garantisce che siano in esecuzione istanze dell'applicazione.Service Fabric ensures that instances of an application are running.
  • Monitoraggio dell’integrità.Health monitoring. Il monitoraggio dell'integrità di Service Fabric rileva se un'applicazione è in esecuzione e fornisce informazioni di diagnostica in caso di errore.Service Fabric health monitoring detects if an application is running, and provides diagnostic information if there is a failure.
  • Gestione del ciclo di vita delle applicazioni.Application lifecycle management. Oltre a garantire aggiornamenti senza tempi di inattività, Service Fabric consente il ripristino automatico della versione precedente se durante un aggiornamento viene segnalato un evento di integrità negativo.Besides providing upgrades with no downtime, Service Fabric provides automatic rollback to the previous version if there is a bad health event reported during an upgrade.
  • Densità.Density. È possibile eseguire più applicazioni in un cluster, eliminando la necessità che ogni applicazione venga eseguita nel proprio hardware.You can run multiple applications in a cluster, which eliminates the need for each application to run on its own hardware.
  • Individuabilità. Usando REST è possibile chiamare il servizio Service Fabric Naming per trovare altri servizi nel cluster.Discoverability: Using REST you can call the Service Fabric Naming service to find other services in the cluster.

EsempiSamples

Panoramica dei file manifesto dell'applicazione e del servizioOverview of application and service manifest files

Nell'ambito della distribuzione di un eseguibile guest è utile comprendere il modello di creazione di pacchetti e di distribuzione di Service Fabric, descritto nel modello applicativo.As part of deploying a guest executable, it is useful to understand the Service Fabric packaging and deployment model as described in application model. Il modello di creazione di pacchetti di Service Fabric si basa su due file XML: il manifesto dell'applicazione e il manifesto del servizio.The Service Fabric packaging model relies on two XML files: the application and service manifests. La definizione dello schema per i file ApplicationManifest.xml e ServiceManifest.xml viene installata con Service Fabric SDK in C:\Programmi\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd.The schema definition for the ApplicationManifest.xml and ServiceManifest.xml files is installed with the Service Fabric SDK into C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd.

  • Manifesto dell'applicazione. Il manifesto dell'applicazione viene usato per descrivere l'applicazione.Application manifest The application manifest is used to describe the application. Elenca i servizi da cui è costituita e altri parametri usati per definire come dovranno essere distribuiti tali servizi, ad esempio il numero di istanze.It lists the services that compose it, and other parameters that are used to define how one or more services should be deployed, such as the number of instances.

    In Service Fabric un'applicazione è un'unità di distribuzione e aggiornamento.In Service Fabric, an application is a unit of deployment and upgrade. Un'applicazione può essere aggiornata come una singola unità in cui vengono gestiti i potenziali errori e i potenziali ripristini dello stato precedente.An application can be upgraded as a single unit where potential failures and potential rollbacks are managed. Service Fabric garantisce che il processo di aggiornamento venga completato o, in caso di errore, che non lasci l'applicazione in uno stato sconosciuto o instabile.Service Fabric guarantees that the upgrade process is either successful, or, if the upgrade fails, does not leave the application in an unknown or unstable state.

  • Manifesto del servizio .Service manifest The service manifest describes the components of a service. Include dati come il nome e il tipo di servizio, nonché il codice e la configurazione.It includes data, such as the name and type of service, and its code and configuration. Include dati come il nome e il tipo di servizio nonché il codice, la configurazione e i dati del servizio, più alcuni parametri aggiuntivi usati per configurare il servizio una volta distribuito.The service manifest also includes some additional parameters that can be used to configure the service once it is deployed.

Struttura del file del pacchetto dell'applicazioneApplication package file structure

Per distribuire un'applicazione in Service Fabric, l'applicazione deve seguire una struttura di directory predefinita.To deploy an application to Service Fabric, the application should follow a predefined directory structure. Di seguito è riportato un esempio di tale struttura.The following is an example of that structure.

|-- ApplicationPackageRoot
    |-- GuestService1Pkg
        |-- Code
            |-- existingapp.exe
        |-- Config
            |-- Settings.xml
        |-- Data
        |-- ServiceManifest.xml
    |-- ApplicationManifest.xml

ApplicationPackageRoot contiene il file ApplicationManifest.xml che definisce l'applicazione.The ApplicationPackageRoot contains the ApplicationManifest.xml file that defines the application. Per contenere tutti gli elementi necessari per il servizio viene usata una sottodirectory per ogni servizio incluso nell'applicazione.A subdirectory for each service included in the application is used to contain all the artifacts that the service requires. Tali sottodirectory sono ServiceManifest.xml e, in genere, la seguente:These subdirectories are the ServiceManifest.xml and, typically, the following:

  • Code.Code. Contiene il codice del servizio.This directory contains the service code.
  • Config. Questa directory contiene un file Settings.xml (e altri file, se necessario) a cui il servizio può accedere in fase di esecuzione per recuperare specifiche impostazioni di configurazione.Config. This directory contains a Settings.xml file (and other files if necessary) that the service can access at runtime to retrieve specific configuration settings.
  • Dati.Data. Un'altra directory in cui archiviare dati locali aggiuntivi che potrebbero essere necessari al servizio.This is an additional directory to store additional local data that the service may need. I dati devono essere usati per archiviare solo dati temporanei.Data should be used to store only ephemeral data. Service Fabric non copia o replica le modifiche alla directory dei dati se il servizio deve essere trasferito, ad esempio durante il failover.Service Fabric does not copy or replicate changes to the data directory if the service needs to be relocated (for example, during failover).

Nota

Non è necessario creare le directory config e data se non sono necessarie.You don't have to create the config and data directories if you don't need them.

Creare il pacchetto di un eseguibile esistentePackage an existing executable

Quando si crea il pacchetto di un eseguibile guest, è possibile scegliere di usare un modello di progetto di Visual Studio oppure di creare manualmente il pacchetto dell'applicazione.When packaging a guest executable, you can choose either to use a Visual Studio project template or to create the application package manually. Se si usa Visual Studio, la struttura del pacchetto dell'applicazione e i file manifesto vengono creati automaticamente dal nuovo modello di progetto.Using Visual Studio, the application package structure and manifest files are created by the new project template for you.

Suggerimento

Il modo più semplice per creare il pacchetto di un eseguibile Windows esistente in un servizio consiste nell'usare Visual Studio (oppure Yeoman in Linux)The easiest way to package an existing Windows executable into a service is to use Visual Studio and on Linux to use Yeoman

Usare Visual Studio per creare il pacchetto e distribuire un eseguibile esistenteUse Visual Studio to package and deploy an existing executable

Visual Studio include un modello di servizio di Service Fabric che consente di distribuire un eseguibile guest in un cluster di Service Fabric.Visual Studio provides a Service Fabric service template to help you deploy a guest executable to a Service Fabric cluster.

  1. Scegliere File > Nuovo progetto e creare un'applicazione di Service Fabric.Choose File > New Project, and create a Service Fabric application.
  2. Scegliere Eseguibile guest come modello di servizio.Choose Guest Executable as the service template.
  3. Fare clic su Sfoglia per selezionare la cartella contenente l'eseguibile e immettere i restanti parametri per creare il servizio.Click Browse to select the folder with your executable and fill in the rest of the parameters to create the service.
    • Comportamento del pacchetto di codice.Code Package Behavior. È possibile impostare questa opzione per copiare tutto il contenuto della cartella nel progetto di Visual Studio. Questa scelta si rivela utile se il file eseguibile non viene modificato.Can be set to copy all the content of your folder to the Visual Studio Project, which is useful if the executable does not change. Se si prevede che il file eseguibile venga modificato e si vuole avere la possibilità di selezionare nuove build in modo dinamico, si può scegliere invece di collegarsi alla cartella.If you expect the executable to change and want the ability to pick up new builds dynamically, you can choose to link to the folder instead. Se si crea il progetto di applicazione in Visual Studio è possibile usare cartelle collegate.You can use linked folders when creating the application project in Visual Studio. In questo modo si stabilisce il collegamento al percorso di origine dall'interno del progetto, rendendo possibile l'aggiornamento dell'eseguibile guest nella destinazione di origine.This links to the source location from within the project, making it possible for you to update the guest executable in its source destination. Gli aggiornamenti diventano parte del pacchetto dell'applicazione in fase di compilazione.Those updates become part of the application package on build.
    • Programma: specifica l'eseguibile da eseguire per avviare il servizio.Program specifies the executable that should be run to start the service.
    • Argomenti: specifica gli argomenti da passare all'eseguibile.Arguments specifies the arguments that should be passed to the executable. Può essere un elenco di parametri con argomenti.It can be a list of parameters with arguments.
    • WorkingFolder: specifica la directory di lavoro per il processo che verrà avviato.WorkingFolder specifies the working directory for the process that is going to be started. È possibile specificare tre valori:You can specify three values:
      • CodeBase specifica che la directory di lavoro verrà impostata sulla directory del codice nel pacchetto dell'applicazione (directory Code nella struttura di file precedente).CodeBase specifies that the working directory is going to be set to the code directory in the application package (Code directory shown in the preceding file structure).
      • CodePackage specifica che la directory di lavoro verrà impostata sulla radice del pacchetto dell'applicazione (GuestService1Pkg nella struttura di file precedente).CodePackage specifies that the working directory is going to be set to the root of the application package (GuestService1Pkg shown in the preceding file structure).
      • Work specifica che i file vengono inseriti in una sottodirectory denominata work.Work specifies that the files are placed in a subdirectory called work.
  4. Assegnare un nome al servizio e fare clic su OK.Give your service a name, and click OK.
  5. Se il servizio richiede un endpoint per la comunicazione, è ora possibile aggiungere il protocollo, la porta e il tipo al file ServiceManifest.xml.If your service needs an endpoint for communication, you can now add the protocol, port, and type to the ServiceManifest.xml file. Ad esempio: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.For example: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.
  6. È ora possibile usare l'azione di creazione del pacchetto e di pubblicazione sul cluster locale eseguendo il debug della soluzione in Visual Studio.You can now use the package and publish action against your local cluster by debugging the solution in Visual Studio. Quando si è pronti, pubblicare l'applicazione in un cluster remoto o archiviare la soluzione nel controllo del codice sorgente.When ready, you can publish the application to a remote cluster or check in the solution to source control.
  7. Per informazioni su come visualizzare il servizio dell'eseguibile guest in esecuzione in Service Fabric Explorer, andare alla fine di questo articolo.Go to the end of this article to see how to view your guest executable service running in Service Fabric Explorer.

Usare Yeoman per creare il pacchetto e distribuire un eseguibile esistente in LinuxUse Yeoman to package and deploy an existing executable on Linux

La procedura per la creazione e distribuzione di un eseguibile guest in Linux è analoga alla distribuzione di un'applicazione java o csharp.The procedure for creating and deploying a guest executable on Linux is the same as deploying a csharp or java application.

  1. In un terminale digitare yo azuresfguest.In a terminal, type yo azuresfguest.
  2. Assegnare un nome all'applicazione.Name your application.
  3. Assegnare un nome al servizio e specificarne i dettagli, ad esempio il percorso del file eseguibile e i parametri con cui deve essere richiamato.Name your service, and provide the details including path of the executable and the parameters it must be invoked with.

Yeoman crea un pacchetto dell'applicazione con i file manifesto e dell'applicazione appropriati e con gli script di installazione e di disinstallazione.Yeoman creates an application package with the appropriate application and manifest files along with install and uninstall scripts.

Creare manualmente il pacchetto e distribuire un eseguibile esistenteManually package and deploy an existing executable

Il processo per la creazione manuale del pacchetto di un eseguibile guest si basa sulla procedura generale seguente:The process of manually packaging a guest executable is based on the following general steps:

  1. Creare la struttura di directory del pacchetto.Create the package directory structure.
  2. Aggiungere i file di codice e di configurazione dell'applicazione.Add the application's code and configuration files.
  3. Modificare il file manifesto del servizio.Edit the service manifest file.
  4. Modificare il file manifesto dell’applicazione.Edit the application manifest file.

Creare la struttura di directory del pacchettoCreate the package directory structure

È possibile iniziare creando la struttura di directory come descritto nella sezione precedente "Struttura del file del pacchetto dell'applicazione".You can start by creating the directory structure, as described in the preceding section, "Application package file structure."

Aggiungere i file di codice e di configurazione dell'applicazioneAdd the application's code and configuration files

Dopo aver creato la struttura di directory, è possibile aggiungere i file di configurazione e di codice dell'applicazione nelle directory del codice e di configurazione.After you have created the directory structure, you can add the application's code and configuration files under the code and config directories. È inoltre possibile creare directory aggiuntive o sottodirectory nelle directory del codice e di configurazione.You can also create additional directories or subdirectories under the code or config directories.

Service Fabric esegue un'operazione xcopy del contenuto della radice della directory dell'applicazione in modo che non esista alcuna struttura predefinita da usare oltre alla creazione delle due directory principali relative a codice e impostazioni.Service Fabric does an xcopy of the content of the application root directory, so there is no predefined structure to use other than creating two top directories, code and settings. (ma se si desidera, è possibile scegliere nomi diversi,(You can pick different names if you want. come illustrato in dettaglio nella sezione successiva).More details are in the next section.)

Nota

Assicurarsi di includere tutti i file e le dipendenze necessari all'applicazione.Make sure that you include all the files and dependencies that the application needs. Service Fabric copia il contenuto del pacchetto dell'applicazione in tutti i nodi del cluster in cui vengono distribuiti i servizi dell'applicazione.Service Fabric copies the content of the application package on all nodes in the cluster where the application's services are going to be deployed. Il pacchetto deve contenere tutto il codice necessario per eseguire l'applicazione.The package should contain all the code that the application needs to run. Non presupporre che le dipendenze siano già installate.Do not assume that the dependencies are already installed.

Modificare il file manifesto del servizioEdit the service manifest file

Il passaggio successivo consiste nel modificare il file manifesto del servizio per includere le informazioni seguenti:The next step is to edit the service manifest file to include the following information:

  • Il nome del tipo di servizio.The name of the service type. Si tratta di un ID usato da Service Fabric per identificare un servizio.This is an ID that Service Fabric uses to identify a service.
  • Il comando da usare per avviare l'applicazione (ExeHost).The command to use to launch the application (ExeHost).
  • Qualsiasi script da eseguire per installare l'applicazione (SetupEntrypoint).Any script that needs to be run to set up the application (SetupEntrypoint).

Di seguito è riportato un esempio di file ServiceManifest.xml :The following is an example of a ServiceManifest.xml file:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://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>

Nelle sezioni seguenti vengono esaminate le diverse parti del file che è necessario aggiornare.The following sections go over the different parts of the file that you need to update.

Aggiornare ServiceTypesUpdate ServiceTypes

<ServiceTypes>
  <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
  • È possibile scegliere qualsiasi nome per ServiceTypeName.You can pick any name that you want for ServiceTypeName. Il valore viene usato nel file ApplicationManifest.xml per identificare il servizio.The value is used in the ApplicationManifest.xml file to identify the service.
  • Specificare UseImplicitHost="true".Specify UseImplicitHost="true". Questo attributo indica a Service Fabric che il servizio si basa su un'applicazione autonoma, in modo che debba soltanto avviarla come processo e monitorarne l'integrità.This attribute tells Service Fabric that the service is based on a self-contained app, so all Service Fabric needs to do is to launch it as a process and monitor its health.

Aggiornare CodePackageUpdate CodePackage

L’elemento CodePackage specifica il percorso (e la versione) del codice del servizio.The CodePackage element specifies the location (and version) of the service's code.

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

L'elemento Name consente di specificare il nome della directory nel pacchetto dell'applicazione che contiene il codice del servizio.The Name element is used to specify the name of the directory in the application package that contains the service's code. CodePackage include anche l'attributo version,CodePackage also has the version attribute. Questo consente di specificare la versione del codice e potenzialmente di aggiornare il codice del servizio mediante l'infrastruttura Application Lifecycle Management di Service Fabric.This can be used to specify the version of the code, and can also potentially be used to upgrade the service's code by using the application lifecycle management infrastructure in Service Fabric.

Facoltativo: aggiornare SetupEntrypointOptional: Update SetupEntrypoint

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

L'elemento SetupEntryPoint consente di specificare un file eseguibile o un file batch da eseguire prima dell'avvio del codice del servizio.The SetupEntryPoint element is used to specify any executable or batch file that should be executed before the service's code is launched. È un passaggio facoltativo e non deve pertanto essere necessariamente incluso se non è richiesta alcuna inizializzazione.It is an optional step, so it does not need to be included if there is no initialization required. L'elemento SetupEntryPoint viene eseguito ogni volta che il servizio viene riavviato.The SetupEntryPoint is executed every time the service is restarted.

Esiste un solo SetupEntryPoint, di conseguenza gli script di installazione devono essere raggruppati in un singolo file batch se l'installazione dell'applicazione richiede più script.There is only one SetupEntryPoint, so setup scripts need to be grouped in a single batch file if the application's setup requires multiple scripts. SetupEntryPoint può eseguire qualsiasi tipo di file: file eseguibili, file batch e cmdlet di PowerShell.The SetupEntryPoint can execute any type of file: executable files, batch files, and PowerShell cmdlets. Per altri dettagli, vedere l'articolo su come configurare SetupEntryPoint.For more details, see Configure SetupEntryPoint.

Nell'esempio precedente SetupEntryPoint esegue un file batch denominato LaunchConfig.cmd che si trova nella sottodirectory scripts della directory del codice, presupponendo che l'elemento WorkingFolder sia impostato su CodeBase.In the preceding example, the SetupEntryPoint runs a batch file called LaunchConfig.cmd that is located in the scripts subdirectory of the code directory (assuming the WorkingFolder element is set to CodeBase).

Aggiornare EntryPointUpdate EntryPoint

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

L'elemento EntryPoint nel manifesto del servizio consente di specificare la modalità di avvio del servizio.The EntryPoint element in the service manifest file is used to specify how to launch the service. L'elemento ExeHost specifica il file eseguibile e i relativi argomenti da usare per avviare il servizio.The ExeHost element specifies the executable (and arguments) that should be used to launch the service.

  • Program specifica il nome dell'eseguibile che deve avviare il servizio.Program specifies the name of the executable that should start the service.
  • Arguments specifica gli argomenti da passare al file eseguibile.Arguments specifies the arguments that should be passed to the executable. Può essere un elenco di parametri con argomenti.It can be a list of parameters with arguments.
  • WorkingFolder specifica la directory di lavoro per il processo che sta per essere avviato.WorkingFolder specifies the working directory for the process that is going to be started. È possibile specificare tre valori:You can specify three values:
    • CodeBase specifica che la directory di lavoro verrà impostata sulla directory code nel pacchetto dell'applicazione (directory Code nella struttura di file precedente).CodeBase specifies that the working directory is going to be set to the code directory in the application package (Code directory in the preceding file structure).
    • CodePackage specifica che la directory di lavoro verrà impostata sulla radice del pacchetto dell'applicazione (GuestService1Pkg nella struttura di file precedente).CodePackage specifies that the working directory is going to be set to the root of the application package (GuestService1Pkg in the preceding file structure).
      • Work specifica che i file vengono inseriti in una sottodirectory denominata work.Work specifies that the files are placed in a subdirectory called work.

WorkingFolder è utile per impostare la directory di lavoro corretta, in modo che i percorsi relativi possano essere usati dagli script di applicazione o da quelli di inizializzazione.The WorkingFolder is useful to set the correct working directory so that relative paths can be used by either the application or initialization scripts.

Aggiornare gli endpoint e registrarli nel servizio di denominazione per la comunicazioneUpdate Endpoints and register with Naming Service for communication

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

Nell'esempio precedente l'elemento Endpoint specifica gli endpoint sui quali l'applicazione può restare in ascolto.In the preceding example, the Endpoint element specifies the endpoints that the application can listen on. In questo esempio, l'applicazione Node.js è in ascolto di HTTP sulla porta 3000.In this example, the Node.js application listens on http on port 3000.

È anche possibile richiedere a Service Fabric di pubblicare l'endpoint nel servizio Naming in modo che altri servizi possano individuare l'indirizzo dell'endpoint per questo servizio.Furthermore you can ask Service Fabric to publish this endpoint to the Naming Service so other services can discover the endpoint address to this service. Ciò consente la comunicazione tra servizi costituiti da eseguibili guest.This enables you to be able to communicate between services that are guest executables. L'indirizzo dell'endpoint pubblicato presenta il formato UriScheme://IPAddressOrFQDN:Port/PathSuffix.The published endpoint address is of the form UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme e PathSuffix sono attributi facoltativi.UriScheme and PathSuffix are optional attributes. IPAddressOrFQDN è l'indirizzo IP o il nome di dominio completo del nodo in cui viene inserito l'eseguibile e viene calcolato automaticamente.IPAddressOrFQDN is the IP address or fully qualified domain name of the node this executable gets placed on, and it is calculated for you.

Nell'esempio seguente, dopo la distribuzione del servizio, in Service Fabric Explorer viene visualizzato un endpoint simile a http://10.1.4.92:3000/myapp/ pubblicato per l'istanza del servizio.In the following example, once the service is deployed, in Service Fabric Explorer you see an endpoint similar to http://10.1.4.92:3000/myapp/ published for the service instance. Oppure, se si tratta di un computer locale, viene visualizzato http://localhost:3000/myapp/.Or if this is a local machine, you see http://localhost:3000/myapp/.

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

È possibile usare questi indirizzi con il proxy inverso per la comunicazione tra servizi.You can use these addresses with reverse proxy to communicate between services.

Modificare il file manifesto dell’applicazioneEdit the application manifest file

Dopo aver configurato il file Servicemanifest.xml, sarà necessario apportare alcune modifiche al file ApplicationManifest.xml per assicurarsi che vengano usati il tipo e il nome corretti per il servizio.Once you have configured the Servicemanifest.xml file, you need to make some changes to the ApplicationManifest.xml file to ensure that the correct service type and name are used.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://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>

ServiceManifestImportServiceManifestImport

Nell'elemento ServiceManifestImport è possibile specificare uno o più servizi da includere nell'app.In the ServiceManifestImport element, you can specify one or more services that you want to include in the app. Per fare riferimento ai servizi viene usato l'elemento ServiceManifestName, che specifica il nome della directory in cui è presente il file ServiceManifest.xml.Services are referenced with ServiceManifestName, which specifies the name of the directory where the ServiceManifest.xml file is located.

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

Configurare la registrazioneSet up logging

Per gli eseguibili guest è utile poter visualizzare i log di console per determinare la presenza di eventuali errori negli script di configurazione e di applicazione.For guest executables, it is useful to be able to see console logs to find out if the application and configuration scripts show any errors. Il reindirizzamento della console può essere configurato nel file ServiceManifest.xml tramite l'elemento ConsoleRedirection.Console redirection can be configured in the ServiceManifest.xml file using the ConsoleRedirection element.

Avviso

Non usare mai i criteri di reindirizzamento della console in un'applicazione distribuita nell'ambiente di produzione, perché ciò può incidere sul failover dell'applicazione.Never use the console redirection policy in an application that is deployed in production because this can affect the application failover. Usare questa opzione solo a scopo di sviluppo e debug locale.Only use this for local development and debugging purposes.

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

L'elemento ConsoleRedirection consente di reindirizzare l'output della console, di tipo stdout o stderr, a una directory di lavoro.ConsoleRedirection can be used to redirect console output (both stdout and stderr) to a working directory. In questo modo è possibile verificare che non siano presenti errori durante l'installazione o l'esecuzione dell'applicazione nel cluster di Service Fabric.This provides the ability to verify that there are no errors during the setup or execution of the application in the Service Fabric cluster.

FileRetentionCount determina il numero di file salvati nella directory di lavoro.FileRetentionCount determines how many files are saved in the working directory. Un valore pari a 5, ad esempio, indica che i file di log per le cinque esecuzioni precedenti vengono archiviati nella directory di lavoro.A value of 5, for example, means that the log files for the previous five executions are stored in the working directory.

FileMaxSizeInKb specifica le dimensioni massime dei file di log.FileMaxSizeInKb specifies the maximum size of the log files.

I file di log vengono salvati in una directory di lavoro del servizio.Log files are saved in one of the service's working directories. Per determinare dove si trovano i file, è necessario usare Service Fabric Explorer per stabilire il nodo in cui è in esecuzione il servizio e la directory di lavoro in uso.To determine where the files are located, use Service Fabric Explorer to determine which node the service is running on, and which working directory is being used. Più avanti in questo articolo verrà illustrato questo processo.This process is covered later in this article.

DistribuzioneDeployment

L'ultimo passaggio consiste nel distribuire l'applicazione.The last step is to deploy your application. Lo script di PowerShell seguente illustra come distribuire l'applicazione nel cluster di sviluppo locale e avviare un nuovo servizio di Service Fabric.The following PowerShell script shows how to deploy your application to the local development cluster, and start a new Service Fabric service.


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

Suggerimento

Comprimere il pacchetto prima di copiarlo nell'archivio immagini se il pacchetto è grande o contiene molti file.Compress the package before copying to the image store if the package is large or has many files. Per altre informazioni, leggere qui.Read more here.

Un servizio Service Fabric può essere distribuito in varie "configurazioni",A Service Fabric service can be deployed in various "configurations." ad esempio può essere distribuito come istanza singola o come istanze multiple o può essere distribuito in modo tale che sia presente un'istanza del servizio in ogni nodo del cluster di Service Fabric.For example, it can be deployed as single or multiple instances, or it can be deployed in such a way that there is one instance of the service on each node of the Service Fabric cluster.

Il parametro InstanceCount del cmdlet New-ServiceFabricService consente di specificare il numero di istanze del servizio da avviare nel cluster Service Fabric.The InstanceCount parameter of the New-ServiceFabricService cmdlet is used to specify how many instances of the service should be launched in the Service Fabric cluster. È possibile impostare il valore InstanceCount in base al tipo di applicazione da distribuire.You can set the InstanceCount value, depending on the type of application that you are deploying. I due scenari più comuni sono:The two most common scenarios are:

  • InstanceCount = "1".InstanceCount = "1". In questo caso viene distribuita nel cluster una sola istanza del servizio.In this case, only one instance of the service is deployed in the cluster. L'utilità di pianificazione di Service Fabric determina il nodo in cui il servizio dovrà essere distribuito.Service Fabric's scheduler determines which node the service is going to be deployed on.
  • InstanceCount ="-1".InstanceCount ="-1". In questo caso viene distribuita un'istanza del servizio in ogni nodo del cluster di Service Fabric.In this case, one instance of the service is deployed on every node in the Service Fabric cluster. Di conseguenza sarà presente un'unica istanza del servizio per ogni nodo del cluster.The result is having one (and only one) instance of the service for each node in the cluster.

Questa configurazione è utile per applicazioni front-end (ad esempio, un endpoint REST) perché le applicazioni client devono "connettersi" a qualsiasi nodo del cluster per usare l'endpoint.This is a useful configuration for front-end applications (for example, a REST endpoint), because client applications need to "connect" to any of the nodes in the cluster to use the endpoint. Questa configurazione può essere inoltre usata quando, ad esempio, tutti i nodi del cluster di Service Fabric sono connessi a un servizio di bilanciamento del carico.This configuration can also be used when, for example, all nodes of the Service Fabric cluster are connected to a load balancer. Il traffico del client può quindi essere distribuito nel servizio in esecuzione su tutti i nodi del cluster.Client traffic can then be distributed across the service that is running on all nodes in the cluster.

Verificare l'applicazione in esecuzioneCheck your running application

In Esplora infrastruttura di servizi identificare il nodo in cui è in esecuzione il servizio.In Service Fabric Explorer, identify the node where the service is running. In questo esempio è in esecuzione in Node1:In this example, it runs on Node1:

Nodo in cui è in esecuzione il servizio

Se si passa al nodo e si accede all'applicazione, è possibile visualizzare le informazioni essenziali sul nodo, incluso il percorso sul disco.If you navigate to the node and browse to the application, you see the essential node information, including its location on disk.

Percorso sul disco

Se si passa alla directory usando Esplora server è possibile trovare la directory di lavoro e la cartella dei log del servizio, come illustrato nella schermata seguente:If you browse to the directory by using Server Explorer, you can find the working directory and the service's log folder, as shown in the following screenshot:

Percorso del log

Passaggi successiviNext steps

In questo articolo si è appreso come creare il pacchetto di un eseguibile guest e come distribuirlo in Service Fabric.In this article, you have learned how to package a guest executable and deploy it to Service Fabric. Per informazioni e attività correlate, vedere gli articoli seguenti.See the following articles for related information and tasks.