Configurazione del rilevamento per un flusso di lavoroConfiguring Tracking for a Workflow

Un flusso di lavoro può essere eseguito in tre modi:A workflow can execute in three ways:

A seconda dell'opzione di hosting del flusso di lavoro, un partecipante del rilevamento può essere aggiunto tramite codice o un file di configurazione.Depending on the workflow hosting option, a tracking participant can be added either through code or through a configuration file. In questo argomento viene descritta la configurazione del rilevamento tramite l'aggiunta di un partecipante del rilevamento agli oggetti WorkflowApplication e WorkflowServiceHost e viene illustrato come abilitare il rilevamento quando si usa l'oggetto WorkflowInvoker.This topic describes how tracking is configured by adding a tracking participant to a WorkflowApplication and to a WorkflowServiceHost, and how to enable tracking when using WorkflowInvoker.

Configurazione del rilevamento dell'applicazione flusso di lavoroConfiguring Workflow Application Tracking

Un flusso di lavoro può essere eseguito usando la classe WorkflowApplication.A workflow can run using the WorkflowApplication class. In questo argomento viene illustrata la configurazione del rilevamento per un'applicazione flusso di lavoro di .NET Framework 4.6.1.NET Framework 4.6.1 tramite l'aggiunta di un partecipante del rilevamento all'host del flusso di lavoro WorkflowApplication.This topic demonstrates how tracking is configured for a .NET Framework 4.6.1.NET Framework 4.6.1 workflow application by adding a tracking participant to the WorkflowApplication workflow host. In questo caso, il flusso di lavoro viene eseguito come un'applicazione flusso di lavoro.In this case, the workflow runs as a workflow application. Quest'ultima viene configurata tramite codice (anziché tramite un file di configurazione), ovvero un file con estensione exe indipendente che usa la classe WorkflowApplication.You configure a workflow application through code (rather than by using a configuration file), which is a self-hosted .exe file using the WorkflowApplication class. Il partecipante del rilevamento viene aggiunto come estensione all'istanza WorkflowApplication.The tracking participant is added as an extension to the WorkflowApplication instance. Tale operazione viene eseguita aggiungendo l'oggetto TrackingParticipant alla raccolta di estensioni per l'istanza WorkflowApplication.This is done by adding the TrackingParticipant to the extensions collection for the WorkflowApplication instance.

Per un'applicazione flusso di lavoro, è possibile aggiungere l'estensione di comportamento EtwTrackingParticipant come mostrato nel codice seguente.For a workflow application, you can add the EtwTrackingParticipant behavior extension as shown in the following code.

LogActivity activity = new LogActivity();  

WorkflowApplication instance = new WorkflowApplication(activity);  
EtwTrackingParticipant trackingParticipant =  
    new EtwTrackingParticipant  
{  

        TrackingProfile = new TrackingProfile  
           {  
               Name = "SampleTrackingProfile",  
               ActivityDefinitionId = "ProcessOrder",  
               Queries = new WorkflowInstanceQuery  
               {  
                  States = { "*" }  
              }  
          }  
       };  
instance.Extensions.Add(trackingParticipant);  

Configurazione del rilevamento del servizio del flusso di lavoroConfiguring Workflow Service Tracking

Un flusso di lavoro può essere esposto come un servizio WCF ospitato nel WorkflowServiceHost host del servizio.A workflow can be exposed as a WCF service when hosted in the WorkflowServiceHost service host. WorkflowServiceHost è un'implementazione specifica di .NET ServiceHost per un servizio basato sul flusso di lavoro.WorkflowServiceHost is a specialized .NET ServiceHost implementation for a workflow-based service. Contenuto della sezione viene illustrato come configurare il rilevamento per un servizio flusso di lavoro di .NET Framework 4.6.1.NET Framework 4.6.1 in esecuzione nell'oggetto WorkflowServiceHost.This section explains how to configure tracking for a .NET Framework 4.6.1.NET Framework 4.6.1 workflow service running in WorkflowServiceHost. Viene configurato tramite un file Web.config (per un servizio ospitato sul Web) o un file App.config (per un servizio ospitato in un'applicazione autonoma, ad esempio un'applicazione console) specificando un comportamento del servizio oppure, tramite codice, aggiungendo un comportamento specifico del rilevamento alla raccolta Behaviors per l'host del servizio.It is configured through a Web.config file (for a Web-hosted service) or an App.config file (for a service hosted in a stand-alone application, such as a console application) by specifying a service behavior or through code by adding a tracking-specific behavior to the Behaviors collection for the service host.

Per un servizio del flusso di lavoro ospitato nell'oggetto WorkflowServiceHost, è possibile aggiungere l'oggetto EtwTrackingParticipant usando l'elemento <behavior> in un file di configurazione, come mostrato nell'esempio seguente.For a workflow service hosted in WorkflowServiceHost, you can add the EtwTrackingParticipant using the <behavior> element in a configuration file, as shown in the following example.

<behaviors>  
   <serviceBehaviors>  
        <behavior>  
          <etwTracking profileName="Sample Tracking Profile" />  
        </behavior>              
   </serviceBehaviors>  
<behaviors>  

In alternativa, per un servizio del flusso di lavoro ospitato nell'oggetto WorkflowServiceHost, è possibile aggiungere l'estensione di comportamento EtwTrackingParticipant tramite il codice.Alternatively, for a workflow service hosted in WorkflowServiceHost, you can add the EtwTrackingParticipant behavior extension through code. Per aggiungere un partecipante del rilevamento personalizzato, creare una nuova estensione di comportamento e aggiungerla all'oggetto ServiceHost come mostrato nel codice di esempio seguente.To add a custom tracking participant, create a new behavior extension and add it to the ServiceHost as shown in the following example code.

Nota

Se si desidera visualizzare codice di esempio che illustra come creare un elemento di comportamento personalizzato che aggiunge un partecipante del rilevamento personalizzato, vedere il rilevamento esempi.If you want to view sample code that shows how to create a custom behavior element that adds a custom tracking participant, refer to the Tracking samples.

ServiceHost svcHost = new ServiceHost(typeof(WorkflowService), new   
                                 Uri("http://localhost:8001/Sample"));  
EtwTrackingBehavior trackingBehavior =   
    new EtwTrackingBehavior  
    {  
        ProfileName = "Sample Tracking Profile"  
    };  
svcHost.Description.Behaviors.Add(trackingBehavior);  
svcHost.Open();  

Il partecipante del rilevamento viene aggiunto all'host del servizio del flusso di lavoro come estensione al comportamento.The tracking participant is added to the workflow service host as an extension to the behavior.

Nel codice di esempio seguente viene mostrato come leggere un profilo di rilevamento dal file di configurazione.This sample code below shows how to read a tracking profile from configuration file.

TrackingProfile GetProfile(string profileName, string displayName)  
        {  
            TrackingProfile trackingProfile = null;  
            TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");  
            if (trackingSection == null)   
            {  
                return null;  
            }  

            if (profileName == null)   
            {  
                profileName = "";  
            }  

            //Find the profile with the specified profile name in the list of profile found in config  
            var match = from p in new List<TrackingProfile>(trackingSection.TrackingProfiles)  
                        where (p.Name == profileName) && ((p.ActivityDefinitionId == displayName) || (p.ActivityDefinitionId == "*"))  
                        select p;  

            if (match.Count() == 0)  
            {  
                //return an empty profile  
                trackingProfile = new TrackingProfile()  
                {  
                    ActivityDefinitionId = displayName  
                };  

            }  
            else  
            {  
                trackingProfile = match.First();  
            }  

            return trackingProfile;  

In questo codice di esempio viene illustrato come aggiungere un profilo di rilevamento a un host del flusso di lavoro.This sample code shows how to add a tracking profile to a workflow host.

WorkflowServiceHost workflowServiceHost = serviceHostBase as WorkflowServiceHost;  
if (null != workflowServiceHost)  
{  
              string workflowDisplayName = workflowServiceHost.Activity.DisplayName;  
               TrackingProfile trackingProfile = GetProfile(this.profileName, workflowDisplayName);  
                workflowServiceHost.WorkflowExtensions.Add(()  => new EtwTrackingParticipant  {  
               TrackingProfile = trackingProfile  
                        });  
 }  

Nota

Per ulteriori informazioni sui profili di rilevamento, fare riferimento a profili di rilevamento.For more information on tracking profiles, refer to Tracking Profiles.

Configurazione del rilevamento tramite WorkflowInvokerConfiguring tracking using WorkflowInvoker

Per configurare il rilevamento per un flusso di lavoro eseguito usando l'oggetto WorkflowInvoker, aggiungere il provider del rilevamento come estensione a un'istanza WorkflowInvoker.To configure tracking for a workflow executed using WorkflowInvoker, add the tracking provider as an extension to a WorkflowInvoker instance. Esempio di codice seguente è dal rilevamento personalizzato esempio.The following code example is from the Custom Tracking sample.

WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());  
invoker.Extensions.Add(customTrackingParticipant);  
invoker.Invoke();  

Visualizzazione dei record di rilevamento in Visualizzatore eventiViewing tracking records in Event Viewer

Esistono due log del Visualizzatore eventi di particolare interesse per il rilevamento dell'esecuzione di WF: il log analitico e il log debug.There are two Event Viewer logs of particular interest to view when tracking WF execution - the Analytic log and the Debug log. Entrambi si trovano in Microsoft|Windows|nodo Server applicazioni-applicazioni.Both reside under the Microsoft|Windows|Application Server-Applications node. I log presenti in questa sezione contengono gli eventi relativi una singola applicazione piuttosto che gli eventi che interessano l'intero sistema.Logs within this section contain events from a single application rather than events that have an impact on the entire system.

Gli eventi di traccia di debug vengono scritti nel log di debug.Debug trace events are written to the Debug Log. Per raccogliere gli eventi di traccia di debug di WF nel Visualizzatore eventi, abilitare il log di debug.To collect WF debug trace events in the Event Viewer, enable the Debug Log.

  1. Per aprire il Visualizzatore eventi, fare clic su avviare, quindi fare clic su eseguire.To open Event Viewer, click Start, and then click Run. Nella finestra di dialogo Esegui digitare eventvwr.In the Run dialog, type eventvwr.

  2. Nella finestra di dialogo Visualizzatore eventi, espandere il registri applicazioni e servizi nodo.In the Event Viewer dialog, expand the Applications and Services Logs node.

  3. Espandere il Microsoft, Windows, e Server applicazioni-applicazioni nodi.Expand the Microsoft, Windows, and Application Server-Applications nodes.

  4. Fare doppio clic su di Debug nodo sotto il Server applicazioni-applicazioni nodo e selezionare Attiva registro.Right-click the Debug node under the Application Server-Applications node, and select Enable Log.

  5. Eseguire l'applicazione abilitata per il rilevamento per generare gli eventi di rilevamento.Execute your tracing-enabled application to generate tracing events.

  6. Fare doppio clic sui Debug nodo e selezionare aggiornare.Right-click the Debug node and select Refresh. Gli eventi di traccia verranno visualizzati nel riquadro centrale.Tracing events should be visible in the center pane.

In WF 4 è presente un partecipante del rilevamento mediante il quale vengono scritti i record di rilevamento in una sessione ETW (Event Tracing for Windows).WF 4 provides a tracking participant that writes tracking records to an ETW (Event Tracing for Windows) session. Il partecipante del rilevamento ETW viene configurato con un profilo di rilevamento per sottoscrivere i record di rilevamento.The ETW tracking participant is configured with a tracking profile to subscribe to tracking records. Quando il rilevamento è abilitato, vengono generati record di rilevamento di errori su ETW.When tracking is enabled, errors tracking records are emitted to ETW. Gli eventi di rilevamento ETW (in un intervallo da 100 a 113) corrispondenti agli eventi di rilevamento generati dal partecipante del rilevamento ETW vengono scritti nel log analitico.ETW tracking events (between the range of 100-113) corresponding to the tracking events emitted by the ETW tracking participant are written to the Analytic Log.

Per visualizzare i record di rilevamento, attenersi alla seguente procedura.To view tracking records, follow these steps.

  1. Per aprire il Visualizzatore eventi, fare clic su avviare, quindi fare clic su eseguire.To open Event Viewer, click Start, and then click Run. Nella finestra di dialogo Esegui digitare eventvwr.In the Run dialog, type eventvwr.

  2. Nella finestra di dialogo Visualizzatore eventi, espandere il registri applicazioni e servizi nodo.In the Event Viewer dialog, expand the Applications and Services Logs node.

  3. Espandere il Microsoft, Windows, e Server applicazioni-applicazioni nodi.Expand the Microsoft, Windows, and Application Server-Applications nodes.

  4. Fare doppio clic su di analitico nodo sotto il Server applicazioni-applicazioni nodo e selezionare Attiva registro.Right-click the Analytic node under the Application Server-Applications node, and select Enable Log.

  5. Eseguire l'applicazione abilitata per il rilevamento per generare record di rilevamento.Execute your tracking-enabled application to generate tracking records.

  6. Fare doppio clic sui analitico nodo e selezionare aggiornare.Right-click the Analytic node and select Refresh. I record di rilevamento dovrebbero essere visibili nel riquadro centrale.Tracking records should be visible in the center pane.

Nell'immagine seguente vengono mostrati gli eventi di rilevamento nel visualizzatore eventi.The following image shows tracking events in the event viewer.

Visualizzazione di Visualizzatore eventi i record di rilevamentoEvent Viewer showing tracking records

Registrazione di un ID provider specifico dell'applicazioneRegistering an application-specific provider ID

Se gli eventi devono essere scritti in un registro applicazioni specifico, attenersi alla seguente procedura per registrare il nuovo manifesto del provider.If events need to be written to a specific application log, follow these steps to register the new provider manifest.

  1. Dichiarare l'ID provider nel file di configurazione dell'applicazione.Declare the provider ID in the application configuration file.

    <system.serviceModel>  
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>  
    </system.serviceModel>  
    
  2. Copiare il file manifesto da %windir%\Microsoft.NET\Framework\< versione più recente di .NET Framework 4.6.1.NET Framework 4.6.1> \Microsoft.Windows.ApplicationServer.Applications.man in un percorso temporaneo e rinominarlo Microsoft.Windows.ApplicationServer.Applications_Provider1.manCopy the manifest file from %windir%\Microsoft.NET\Framework\<latest version of .NET Framework 4.6.1.NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man to a temporary location, and rename it to Microsoft.Windows.ApplicationServer.Applications_Provider1.man

  3. Modificare il GUID del file manifesto con il nuovo GUID.Change the GUID in the manifest file to the new GUID.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}"  
    
  4. Modificare il nome del provider se non si desidera disinstallare il provider predefinito.Change the provider name if you do not want to uninstall the default provider.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}"  
    
  5. Se è stato modificato il nome del provider nel passaggio precedente, modificare i nomi dei canali nel file manifesto in base al nuovo nome del provider.If you changed the provider name in the previous step, change the channel names in the manifest file to the new provider name.

    <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Admin" chid="ADMIN_CHANNEL" symbol="ADMIN_CHANNEL" type="Admin" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ADMIN_CHANNEL.message)" />  
    <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Operational" chid="OPERATIONAL_CHANNEL" symbol="OPERATIONAL_CHANNEL" type="Operational" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.OPERATIONAL_CHANNEL.message)" />  
    <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Analytic" chid="ANALYTIC_CHANNEL" symbol="ANALYTIC_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ANALYTIC_CHANNEL.message)" />  
    <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Debug" chid="DEBUG_CHANNEL" symbol="DEBUG_CHANNEL" type="Debug" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.DEBUG_CHANNEL.message)" />  
    <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Perf" chid="PERF_CHANNEL" symbol="PERF_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.PERF_CHANNEL.message)" />  
    
  6. Generare la DLL di risorse attenendosi ai passaggi seguenti.Generate the resource DLL by following these steps.

    1. Installare Windows SDK.Install the Windows SDK. Windows SDK include il compilatore di messaggi (mc.exe) e del compilatore di risorse (rc.exe).The Windows SDK includes the message compiler (mc.exe) and resource compiler (rc.exe).

    2. In un prompt dei comandi di Windows SDK, eseguire mc.exe nel nuovo file manifesto.In a Windows SDK command prompt, run mc.exe on the new manifest file.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man  
      
    3. Eseguire rc.exe nel file di risorse generato nel passaggio precedente.Run rc.exe on the resource file generated in the previous step.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc  
      
    4. Creare un file cs vuoto denominato NewProviderReg.cs.Create an empty cs file called NewProviderReg.cs.

    5. Creare una DLL di risorse usando il compilatore C#.Create a resource DLL using the C# compiler.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll  
      
    6. Impostare il nome della DLL di risorse e messaggi nel file manifesto da Microsoft.Windows.ApplicationServer.Applications.Provider1.man al nuovo nome della DLL.Change the resource and message dl namel in the manifest file from Microsoft.Windows.ApplicationServer.Applications.Provider1.man to the new dll name.

      <provider name="Microsoft-Windows-Application Server-Applications_Provider1" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" symbol="Microsoft_Windows_ApplicationServer_ApplicationEvents" resourceFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" messageFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll">  
      
    7. Utilizzare wevtutil per registrare il manifesto.Use wevtutil to register the manifest.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man  
      

Vedere ancheSee Also

Monitoraggio dell'infrastruttura di App di Windows ServerWindows Server App Fabric Monitoring
Monitoraggio delle applicazioni con App FabricMonitoring Applications with App Fabric