Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Konfigurowanie śledzenia przepływu pracy

Przepływ pracy może być wykonywany na trzy sposoby:

W zależności od opcji hostingu przepływu pracy można dodać uczestnika śledzącego za pośrednictwem kodu lub pliku konfiguracji. W tym temacie opisano sposób konfigurowania śledzenia przez dodanie uczestnika śledzenia do elementu WorkflowApplication i WorkflowServiceHost, oraz sposób włączania śledzenia podczas korzystania z WorkflowInvoker.

Konfigurowanie śledzenia aplikacji przepływu pracy

Przepływ pracy może być uruchamiany przy użyciu WorkflowApplication klasy . W tym temacie przedstawiono, jak skonfigurować śledzenie dla aplikacji przepływu pracy programu .NET Framework 4.6.1 przez dodanie uczestnika śledzenia do hosta przepływu pracy WorkflowApplication. W takim przypadku przepływ pracy jest uruchamiany jako aplikacja przepływu pracy. Aplikację przepływu pracy można skonfigurować za pomocą kodu (zamiast przy użyciu pliku konfiguracyjnego), który jest samohostowanym plikiem .exe przy użyciu klasy WorkflowApplication. Uczestnik śledzenia zostaje dodany jako rozszerzenie do wystąpienia WorkflowApplication. W tym celu należy dodać element TrackingParticipant do kolekcji rozszerzeń dla wystąpienia WorkflowApplication.

W przypadku aplikacji przepływu pracy można dodać rozszerzenie zachowania EtwTrackingParticipant, jak pokazano w poniższym kodzie.

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

Konfigurowanie śledzenia usługi przepływu pracy

Przepływ pracy można uwidocznić jako usługę WCF, gdy jest hostowany na WorkflowServiceHost hoście usługi. WorkflowServiceHost to wyspecjalizowana implementacja .NET ServiceHost dla usługi opartej na przepływie pracy. W tej sekcji wyjaśniono, jak skonfigurować śledzenie dla usługi przepływu pracy programu .NET Framework 4.6.1 uruchomionej w programie WorkflowServiceHost. Jest on konfigurowany za pomocą pliku Web.config (dla usługi hostowanej w sieci Web) lub pliku App.config (dla usługi hostowanej w aplikacji autonomicznej, takiej jak aplikacja konsolowa), określając zachowanie usługi lub za pomocą kodu przez dodanie zachowania specyficznego dla śledzenia do Behaviors kolekcji hosta usługi.

W przypadku usługi przepływu pracy hostowanej w WorkflowServiceHost, można dodać EtwTrackingParticipant za pomocą elementu <behavior> w pliku konfiguracji, co ilustruje poniższy przykład.

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

Alternatywnie, w przypadku usługi przepływu pracy hostowanej w WorkflowServiceHost, można dodać rozszerzenie EtwTrackingParticipant dotyczące zachowania za pomocą kodu. Aby dodać niestandardowego uczestnika śledzenia, utwórz nowe rozszerzenie zachowania i dodaj je do ServiceHost, jak pokazano w poniższym przykładowym kodzie.

Uwaga

Jeśli chcesz wyświetlić przykładowy kod pokazujący sposób tworzenia niestandardowego elementu zachowania, który dodaje niestandardowego uczestnika śledzenia, zapoznaj się z przykładami śledzenia .

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

Uczestnik śledzenia jest dodawany do hosta usługi przepływu pracy jako rozszerzenie zachowania.

Poniższy przykładowy kod pokazuje, jak odczytać profil śledzenia z pliku konfiguracji.

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;

Ten przykładowy kod pokazuje, jak dodać profil śledzenia do hosta przepływu pracy.

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

Uwaga

Aby uzyskać więcej informacji na temat profilów śledzenia, zobacz Profile śledzenia.

Konfigurowanie śledzenia za pomocą WorkflowInvoker

Aby skonfigurować śledzenie dla przepływu pracy wykonywanego przy użyciu WorkflowInvoker, dodaj dostawcę śledzenia jako rozszerzenie do instancji WorkflowInvoker. Poniższy przykład kodu pochodzi z przykładu Custom Tracking .

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

Wyświetlanie rekordów śledzenia w Podglądzie zdarzeń

Istnieją dwa dzienniki podglądu zdarzeń o szczególnym znaczeniu do wyświetlenia podczas śledzenia wykonywania programu WF — dziennik analityczny i dziennik debugowania. Obie znajdują się pod węzłem aplikacji Microsoft|Windows|Server-Applications. Dzienniki w tej sekcji zawierają zdarzenia z jednej aplikacji, a nie zdarzenia, które mają wpływ na cały system.

Zdarzenia śledzenia debugowania są zapisywane w dzienniku debugowania. Aby zebrać zdarzenia śledzenia debugowania WF w Podglądzie zdarzeń, włącz dziennik debugowania.

  1. Aby otworzyć Podgląd zdarzeń, kliknij przycisk Start, a następnie kliknij przycisk Uruchom. W oknie dialogowym Uruchamianie wpisz eventvwr.

  2. W oknie dialogowym Podgląd zdarzeń rozwiń węzeł Dzienniki aplikacji i usług .

  3. Rozwiń węzły Microsoft, Windows i Application Server-Applications .

  4. Kliknij prawym przyciskiem myszy węzeł Debuguj w węźle Application Server-Applications i wybierz pozycję Włącz dziennik.

  5. Wykonaj aplikację z obsługą śledzenia, aby wygenerować zdarzenia śledzenia.

  6. Kliknij prawym przyciskiem myszy węzeł Debuguj i wybierz polecenie Odśwież. Zdarzenia śledzenia powinny być widoczne w środkowym okienku.

Program WF 4 udostępnia uczestnika śledzenia, który zapisuje rekordy śledzenia w sesji ETW (śledzenie zdarzeń dla systemu Windows). Uczestnik śledzenia ETW jest skonfigurowany z profilem śledzenia w celu subskrybowania rekordów śledzenia. Po włączeniu śledzenia rekordy śledzenia błędów są emitowane do funkcji ETW. Zdarzenia śledzenia ETW (z zakresu od 100 do 113), odpowiadające zdarzeniom śledzenia emitowanym przez uczestnika śledzenia ETW, są zapisywane w dzienniku analitycznym.

Aby wyświetlić rekordy śledzenia, wykonaj następujące kroki.

  1. Aby otworzyć Podgląd zdarzeń, kliknij przycisk Start, a następnie kliknij przycisk Uruchom. W oknie dialogowym Uruchamianie wpisz eventvwr.

  2. W oknie dialogowym Podgląd zdarzeń rozwiń węzeł Dzienniki aplikacji i usług .

  3. Rozwiń węzły Microsoft, Windows i Application Server-Applications .

  4. Kliknij prawym przyciskiem myszy węzeł analityczny w węźle Application Server-Applications i wybierz pozycję Włącz dziennik.

  5. Wykonaj aplikację z obsługą śledzenia, aby wygenerować rekordy śledzenia.

  6. Kliknij prawym przyciskiem myszy węzeł analityczny i wybierz polecenie Odśwież. Rekordy śledzenia powinny być widoczne w środkowym okienku.

Na poniższej ilustracji przedstawiono śledzenie zdarzeń w podglądzie zdarzeń:

Zrzut ekranu Podglądu zdarzeń pokazujący rekordy śledzenia.

Rejestrowanie identyfikatora dostawcy specyficznego dla aplikacji

Jeśli zdarzenia muszą być zapisywane w określonym dzienniku aplikacji, wykonaj następujące kroki, aby zarejestrować nowy manifest dostawcy.

  1. Zadeklaruj identyfikator dostawcy w pliku konfiguracji aplikacji.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. Skopiuj plik manifestu z %windir%\Microsoft.NET\Framework\<najnowszej wersji .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man do lokacji tymczasowej i zmień jego nazwę na Microsoft.Windows.ApplicationServer.Applications_Provider1.man

  3. Zmień identyfikator GUID w pliku manifestu na nowy identyfikator GUID.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. Zmień nazwę dostawcy, jeśli nie chcesz odinstalować domyślnego dostawcy.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Jeśli nazwa dostawcy została zmieniona w poprzednim kroku, zmień nazwy kanałów w pliku manifestu na nową nazwę dostawcy.

    <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. Wygeneruj zasobową bibliotekę DLL, wykonując następujące kroki.

    1. Zainstaluj zestaw Windows SDK. Zestaw Windows SDK zawiera kompilator komunikatów (mc.exe) i kompilator zasobów (rc.exe).

    2. W wierszu polecenia zestawu Windows SDK uruchom mc.exe w nowym pliku manifestu.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Uruchom rc.exe w pliku zasobu wygenerowanym w poprzednim kroku.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Utwórz pusty plik cs o nazwie NewProviderReg.cs.

    5. Utwórz bibliotekę DLL zasobu przy użyciu kompilatora języka C#.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Zmień nazwę zasobu i biblioteki dll komunikatów w pliku manifestu z Microsoft.Windows.ApplicationServer.Applications.Provider1.man na nową nazwę biblioteki 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. Użyj wevtutil, aby zarejestrować manifest.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Zobacz także


Dodatkowe zasoby