Udostępnij za pośrednictwem


Konfigurowanie śledzenia dla przepływu pracy

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

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

Konfigurowanie śledzenia aplikacji przepływu pracy

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

W przypadku aplikacji przepływu pracy można dodać EtwTrackingParticipant rozszerzenie zachowania, 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 WorkflowServiceHostprogramie można dodać EtwTrackingParticipant element using <behavior> w pliku konfiguracji, jak pokazano w poniższym przykładzie.

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

Alternatywnie w przypadku usługi przepływu pracy hostowanej w WorkflowServiceHostprogramie można dodać EtwTrackingParticipant rozszerzenie zachowania za pomocą kodu. Aby dodać niestandardowego uczestnika śledzenia, utwórz nowe rozszerzenie zachowania i dodaj je do ServiceHost elementu , 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 do 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 przy użyciu elementu WorkflowInvoker

Aby skonfigurować śledzenie dla przepływu pracy wykonywanego przy użyciu polecenia WorkflowInvoker, dodaj dostawcę śledzenia jako rozszerzenie do WorkflowInvoker wystąpienia. 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ąd zdarzeń

Istnieją dwa Podgląd zdarzeń dzienniki o szczególnym znaczeniu do wyświetlenia podczas śledzenia wykonywania platformy WF — dziennik analityczny i dziennik debugowania. Obie znajdują się w firmie Microsoft |Windows|Węzeł Application 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ąd 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 zdarzeń śledzenia emitowanych 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ń:

Screenshot of the Event Viewer showing tracking records.

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 folderu %windir%\Microsoft.NET\Framework\<latest version of .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man do lokalizacji 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 bibliotekę DLL zasobu, 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 wygenerowany 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 narzędzia wevtutil , aby zarejestrować manifest.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Zobacz też