Dela via


Konfigurera spårning för ett arbetsflöde

Ett arbetsflöde kan köras på tre sätt:

Beroende på värdalternativet för arbetsflödet kan en spårningsdeltagare läggas till antingen via kod eller via en konfigurationsfil. Det här avsnittet beskriver hur spårning konfigureras genom att lägga till en spårningsdeltagare i en WorkflowApplication och till en WorkflowServiceHost, och hur du aktiverar spårning när du använder WorkflowInvoker.

Konfigurera spårning av arbetsflödesprogram

Ett arbetsflöde kan köras med hjälp av WorkflowApplication klassen . Det här avsnittet visar hur spårning konfigureras för ett .NET Framework 4.6.1-arbetsflödesprogram genom att lägga till en spårningsdeltagare i WorkflowApplication arbetsflödesvärden. I det här fallet körs arbetsflödet som ett arbetsflödesprogram. Du konfigurerar ett arbetsflödesprogram via kod (i stället för med hjälp av en konfigurationsfil), som är en lokalt installerad .exe fil med hjälp av WorkflowApplication klassen . Spårningsdeltagaren läggs till som ett tillägg till instansen WorkflowApplication . Detta görs genom att lägga till TrackingParticipant i tilläggssamlingen för WorkflowApplication-instansen.

För ett arbetsflödesprogram kan du lägga till beteendetillägget EtwTrackingParticipant enligt följande kod.

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

Konfigurera spårning av arbetsflödestjänst

Ett arbetsflöde kan exponeras som en WCF-tjänst när det WorkflowServiceHost finns i tjänstvärden. WorkflowServiceHost är en specialiserad .NET ServiceHost-implementering för en arbetsflödesbaserad tjänst. I det här avsnittet beskrivs hur du konfigurerar spårning för en .NET Framework 4.6.1-arbetsflödestjänst som körs i WorkflowServiceHost. Den konfigureras via en Web.config-fil (för en webbaserad tjänst) eller en App.config-fil (för en tjänst som finns i ett fristående program, till exempel ett konsolprogram) genom att ange ett tjänstbeteende eller genom kod genom att lägga till ett spårningsspecifikt beteende i Behaviors samlingen för tjänstvärden.

För en arbetsflödestjänst som finns i WorkflowServiceHostkan du lägga till EtwTrackingParticipant med elementet <behavior> i en konfigurationsfil, som du ser i följande exempel.

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

Du kan också lägga till beteendetillägget EtwTrackingParticipant via kod för en arbetsflödestjänst som finns i .WorkflowServiceHost Om du vill lägga till en anpassad spårningsdeltagare skapar du ett nytt beteendetillägg och lägger till ServiceHost det i som visas i följande exempelkod.

Kommentar

Om du vill visa exempelkod som visar hur du skapar ett anpassat beteendeelement som lägger till en anpassad spårningsdeltagare läser du spårningsexemplen.

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

Spårningsdeltagaren läggs till i arbetsflödestjänstvärden som ett tillägg till beteendet.

Den här exempelkoden nedan visar hur du läser en spårningsprofil från konfigurationsfilen.

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;

Den här exempelkoden visar hur du lägger till en spårningsprofil till en arbetsflödesvärd.

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

Kommentar

Mer information om spårningsprofiler finns i Spårningsprofiler.

Konfigurera spårning med Hjälp av WorkflowInvoker

Om du vill konfigurera spårning för ett arbetsflöde som körs med hjälp av WorkflowInvokerlägger du till spårningsprovidern som ett tillägg till en WorkflowInvoker instans. Följande kodexempel kommer från exemplet för anpassad spårning .

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

Visa spårningsposter i Loggboken

Det finns två Loggboken loggar av särskilt intresse att visa när du spårar WF-körning – analysloggen och felsökningsloggen. Båda finns under Microsoft|Windows|Noden Programserver-Program. Loggar i det här avsnittet innehåller händelser från ett enda program i stället för händelser som påverkar hela systemet.

Spårningshändelser för felsökning skrivs till felsökningsloggen. Om du vill samla in spårningshändelser för WF-felsökning i Loggboken aktiverar du felsökningsloggen.

  1. Öppna Loggboken genom att klicka på Start och sedan på Kör. I dialogrutan Kör skriver du eventvwr.

  2. I dialogrutan Loggboken expanderar du noden Program- och tjänstloggar.

  3. Expandera noderna Microsoft, Windows och Application Server-Applications .

  4. Högerklicka på noden Felsök under noden Programserver-Program och välj Aktivera logg.

  5. Kör ditt spårningsaktiverade program för att generera spårningshändelser.

  6. Högerklicka på noden Felsök och välj Uppdatera. Spårningshändelser ska vara synliga i mittenfönstret.

WF 4 tillhandahåller en spårningsdeltagare som skriver spårningsposter till en ETW-session (händelsespårning för Windows). ETW-spårningsdeltagaren är konfigurerad med en spårningsprofil för att prenumerera på spårningsposter. När spårning är aktiverat genereras felspårningsposter till ETW. ETW-spårningshändelser (mellan intervallet 100–113) som motsvarar spårningshändelserna som genereras av ETW-spårningsdeltagaren skrivs till analysloggen.

Följ dessa steg om du vill visa spårningsposter.

  1. Öppna Loggboken genom att klicka på Start och sedan på Kör. I dialogrutan Kör skriver du eventvwr.

  2. I dialogrutan Loggboken expanderar du noden Program- och tjänstloggar.

  3. Expandera noderna Microsoft, Windows och Application Server-Applications .

  4. Högerklicka på analysnoden under noden Programserverprogram och välj Aktivera logg.

  5. Kör ditt spårningsaktiverade program för att generera spårningsposter.

  6. Högerklicka på analysnoden och välj Uppdatera. Spårningsposter ska vara synliga i mittenfönstret.

Följande bild visar spårningshändelser i loggboken:

Screenshot of the Event Viewer showing tracking records.

Registrera ett programspecifikt provider-ID

Om händelser behöver skrivas till en specifik programlogg följer du de här stegen för att registrera det nya providermanifestet.

  1. Deklarera provider-ID:t i programkonfigurationsfilen.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. Kopiera manifestfilen från %windir%\Microsoft.NET\Framework\<senaste versionen av .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man till en tillfällig plats och byt namn på den till Microsoft.Windows.ApplicationServer.Applications_Provider1.man

  3. Ändra GUID i manifestfilen till det nya GUID:et.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. Ändra providernamnet om du inte vill avinstallera standardprovidern.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Om du ändrade providernamnet i föregående steg ändrar du kanalnamnen i manifestfilen till det nya providernamnet.

    <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. Generera resurs-DLL genom att följa dessa steg.

    1. Installera Windows SDK. Windows SDK innehåller meddelandekompilatorn (mc.exe) och resurskompilatorn (rc.exe).

    2. I en Windows SDK-kommandotolk kör du mc.exe på den nya manifestfilen.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Kör rc.exe på resursfilen som genererades i föregående steg.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Skapa en tom cs-fil med namnet NewProviderReg.cs.

    5. Skapa en resurs-DLL med C#-kompilatorn.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Ändra namnet på resursen och meddelandedllen i manifestfilen från Microsoft.Windows.ApplicationServer.Applications.Provider1.man till det nya dll-namnet.

      <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. Använd wevtutil för att registrera manifestet.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Se även