Konfigurowanie śledzenia dla przepływu pracy
Przepływ pracy może być wykonywany na trzy sposoby:
Hostowane w WorkflowServiceHost
Wykonane jako WorkflowApplication
Wykonywane bezpośrednio przy użyciu polecenia WorkflowInvoker
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.
Aby otworzyć Podgląd zdarzeń, kliknij przycisk Start, a następnie kliknij przycisk Uruchom. W oknie dialogowym Uruchamianie wpisz
eventvwr
.W oknie dialogowym Podgląd zdarzeń rozwiń węzeł Dzienniki aplikacji i usług.
Rozwiń węzły Microsoft, Windows i Application Server-Applications.
Kliknij prawym przyciskiem myszy węzeł Debuguj w węźle Application Server-Applications i wybierz pozycję Włącz dziennik.
Wykonaj aplikację z obsługą śledzenia, aby wygenerować zdarzenia śledzenia.
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.
Aby otworzyć Podgląd zdarzeń, kliknij przycisk Start, a następnie kliknij przycisk Uruchom. W oknie dialogowym Uruchamianie wpisz
eventvwr
.W oknie dialogowym Podgląd zdarzeń rozwiń węzeł Dzienniki aplikacji i usług.
Rozwiń węzły Microsoft, Windows i Application Server-Applications.
Kliknij prawym przyciskiem myszy węzeł analityczny w węźle Application Server-Applications i wybierz pozycję Włącz dziennik.
Wykonaj aplikację z obsługą śledzenia, aby wygenerować rekordy śledzenia.
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ń:
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.
Zadeklaruj identyfikator dostawcy w pliku konfiguracji aplikacji.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>
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
Zmień identyfikator GUID w pliku manifestu na nowy identyfikator GUID.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Zmień nazwę dostawcy, jeśli nie chcesz odinstalować domyślnego dostawcy.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
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)" />
Wygeneruj bibliotekę DLL zasobu, wykonując następujące kroki.
Zainstaluj zestaw Windows SDK. Zestaw Windows SDK zawiera kompilator komunikatów (mc.exe) i kompilator zasobów (rc.exe).
W wierszu polecenia zestawu Windows SDK uruchom mc.exe w nowym pliku manifestu.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Uruchom rc.exe w pliku zasobu wygenerowany w poprzednim kroku.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
Utwórz pusty plik cs o nazwie NewProviderReg.cs.
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
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" />
Użyj narzędzia wevtutil , aby zarejestrować manifest.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man