Condividi tramite


Configurazione del rilevamento per un flusso di lavoro

Un flusso di lavoro può essere eseguito in tre modi:

A seconda dell'opzione di hosting del flusso di lavoro, un partecipante di rilevamento può essere aggiunto tramite codice o tramite un file di configurazione. In questo argomento viene descritto come configurare il monitoraggio aggiungendo un partecipante di monitoraggio a un WorkflowApplication e a un WorkflowServiceHost, e come attivare il monitoraggio quando si usa WorkflowInvoker.

Configurazione del rilevamento delle applicazioni di flusso di lavoro

Un flusso di lavoro può essere eseguito usando la WorkflowApplication classe . Questo argomento illustra come viene configurato il tracciamento per un'applicazione di flusso di lavoro .NET Framework 4.6.1 aggiungendo un componente di tracciamento all'host del flusso di lavoro WorkflowApplication. In questo caso, il flusso di lavoro viene eseguito come applicazione di workflow. È possibile configurare un'applicazione del flusso di lavoro tramite codice (anziché usando un file di configurazione), che è un file .exe self-hosted usando la WorkflowApplication classe . Il partecipante al rilevamento viene aggiunto come estensione all'istanza WorkflowApplication. A tale scopo, aggiungere l'oggetto TrackingParticipant alla collezione di estensioni per l'istanza di WorkflowApplication.

Per un'applicazione del flusso di lavoro, è possibile aggiungere l'estensione comportamento EtwTrackingParticipant, come illustrato nel codice seguente.

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 tracciamento del servizio di flusso di lavoro

Un flusso di lavoro può essere esposto come servizio WCF quando è ospitato nell'host del WorkflowServiceHost servizio. WorkflowServiceHost è un'implementazione specializzata di ServiceHost .NET per un servizio basato su flusso di lavoro. Questa sezione illustra come configurare il rilevamento per un servizio flusso di lavoro di .NET Framework 4.6.1 in esecuzione in WorkflowServiceHost. Viene configurato tramite un file Web.config (per un servizio ospitato sul Web) o un file di App.config (per un servizio ospitato in un'applicazione autonoma, ad esempio un'applicazione console) specificando un comportamento del servizio o tramite codice aggiungendo un comportamento specifico del rilevamento alla raccolta per l'host Behaviors del servizio.

Per il servizio di flusso di lavoro ospitato in WorkflowServiceHost, è possibile aggiungere EtwTrackingParticipant usando l'elemento <behavior> in un file di configurazione, come illustrato nell'esempio seguente.

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

In alternativa, per un servizio di flusso di lavoro ospitato in WorkflowServiceHost, è possibile aggiungere l'estensione comportamento tramite codice. Per aggiungere un partecipante del rilevamento personalizzato, creare una nuova estensione del comportamento e aggiungerla a ServiceHost come illustrato nel codice di esempio seguente.

Annotazioni

Per visualizzare il codice di esempio che mostra come creare un elemento di comportamento personalizzato che aggiunge un partecipante del rilevamento personalizzato, fare riferimento agli esempi di rilevamento .

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 di tracciamento viene aggiunto all'host del servizio di flusso di lavoro come estensione del comportamento.

Questo codice di esempio seguente mostra come leggere un profilo di rilevamento dal file di configurazione.

TrackingProfile GetProfile(string profileName, string displayName)
        {
            TrackingProfile trackingProfile = null;
            TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");
            if (trackingSection == null)
            {
                return 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;

Questo codice di esempio illustra come aggiungere un profilo di rilevamento a un host del flusso di lavoro.

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
    });
 }

Annotazioni

Per altre informazioni sui profili di rilevamento, vedere Profili di rilevamento.

Configurazione del rilevamento tramite WorkflowInvoker

Per configurare il monitoraggio di un flusso di lavoro eseguito utilizzando WorkflowInvoker, aggiungere il provider di monitoraggio come estensione a un'istanza di WorkflowInvoker. L'esempio di codice seguente proviene dall'esempio di rilevamento personalizzato .

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

Visualizzazione dei record di rilevamento nel Visualizzatore eventi

Esistono due log del Visualizzatore eventi di particolare interesse da visualizzare durante il rilevamento dell'esecuzione di WF, ovvero il log analitico e il log di debug. Entrambi risiedono nel nodo di sistema dell'applicazione Server-Applications sotto Microsoft/Windows. I log all'interno di questa sezione contengono eventi di una singola applicazione anziché eventi che hanno un impatto sull'intero sistema.

Gli eventi di traccia di debug vengono scritti nel log di debug. Per raccogliere gli eventi di traccia di debug di WF nel Visualizzatore eventi, abilitare il registro di debug.

  1. Per aprire visualizzatore eventi, fare clic su Start e quindi su Esegui. Nella finestra di dialogo Esegui digitare eventvwr.

  2. Nella finestra di dialogo Visualizzatore eventi espandere il nodo Registri applicazioni e servizi .

  3. Espandi i nodi Microsoft, Windows e Application Server-Applications.

  4. Fare clic con il pulsante destro del mouse sul nodo Debug nel nodo Application Server-Applications e selezionare Abilita log.

  5. Esegui l'applicazione con tracciamento abilitato per generare eventi di tracciamento.

  6. Fare clic con il pulsante destro del mouse sul nodo Debug e scegliere Aggiorna. Gli eventi di traccia devono essere visibili nel riquadro centrale.

WF 4 fornisce un partecipante di rilevamento che scrive i record di rilevamento in una sessione ETW (Event Tracing for Windows). Il partecipante al tracciamento ETW è configurato con un profilo di tracciamento per registrarsi ai record di tracciamento. Quando il rilevamento è abilitato, i record di rilevamento degli errori vengono generati in ETW. Gli eventi di rilevamento ETW (compresi nell'intervallo compreso tra 100 e 113) corrispondenti agli eventi di rilevamento generati dal partecipante del rilevamento ETW vengono scritti nel registro analitico.

Per visualizzare i record di rilevamento, seguire questa procedura.

  1. Per aprire visualizzatore eventi, fare clic su Start e quindi su Esegui. Nella finestra di dialogo Esegui digitare eventvwr.

  2. Nella finestra di dialogo Visualizzatore eventi espandere il nodo Registri applicazioni e servizi .

  3. Espandi i nodi Microsoft, Windows e Application Server-Applications.

  4. Fare clic con il pulsante destro del mouse sul nodo Analitico nel nodo Application Server-Applications e selezionare Abilita log.

  5. Esegui l'applicazione con funzionalità di tracciamento per generare record di rilevamento.

  6. Fare clic con il pulsante destro del mouse sul nodo Analitico e scegliere Aggiorna. I record di rilevamento devono essere visibili nel riquadro centrale.

L'immagine seguente mostra gli eventi di rilevamento nel visualizzatore eventi:

Screenshot del Visualizzatore eventi che mostra i record di rilevamento.

Registrazione di un ID provider specifico dell'applicazione

Se gli eventi devono essere scritti in un log applicazioni specifico, seguire questa procedura per registrare il nuovo manifesto del provider.

  1. Dichiarare l'ID provider nel file di configurazione dell'applicazione.

    <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>\Microsoft.Windows.ApplicationServer.Applications.man in un percorso temporaneo e rinominarlo in Microsoft.Windows.ApplicationServer.Applications_Provider1.man

  3. Modificare il GUID nel file manifesto con il nuovo GUID.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. Modificare il nome del provider se non si vuole disinstallare il provider predefinito.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Se il nome del provider è stato modificato nel passaggio precedente, modificare i nomi dei canali nel file manifesto impostando il nuovo nome del provider.

    <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 della risorsa seguendo questa procedura.

    1. Installa Windows SDK. Windows SDK include il compilatore di messaggi (mc.exe) e il compilatore di risorse (rc.exe).

    2. In un prompt dei comandi di Windows SDK eseguire mc.exe nel nuovo file manifesto.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Eseguire rc.exe nel file di risorse generato nel passaggio precedente.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Creare un file cs vuoto denominato NewProviderReg.cs.

    5. Creare una DLL di risorse usando il compilatore C#.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Modificare il nome della risorsa e della DLL del messaggio nel file di manifest da Microsoft.Windows.ApplicationServer.Applications.Provider1.man al nuovo nome DLL.

      <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. Usare wevtutil per registrare il manifesto.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Vedere anche