Mengonfigurasi Pelacakan untuk Alur Kerja
Alur kerja dapat dijalankan dengan tiga cara:
Dihosting di WorkflowServiceHost
Dijalankan sebagai WorkflowApplication
Dijalankan secara langsung menggunakan WorkflowInvoker
Bergantung pada opsi hosting alur kerja, peserta pelacakan dapat ditambahkan baik melalui kode atau melalui file konfigurasi. Topik ini menjelaskan cara pelacakan dikonfigurasi dengan menambahkan peserta pelacakan ke WorkflowApplication dan ke WorkflowServiceHost, dan cara mengaktifkan pelacakan saat menggunakan WorkflowInvoker.
Mengonfigurasi Pelacakan Aplikasi Alur Kerja
Alur kerja dapat berjalan menggunakan kelas WorkflowApplication. Topik ini menunjukkan cara pelacakan dikonfigurasi untuk aplikasi alur kerja .NET Framework 4.6.1 dengan menambahkan peserta pelacakan ke host alur kerja WorkflowApplication. Dalam hal ini, alur kerja berjalan sebagai aplikasi alur kerja. Anda mengonfigurasi aplikasi alur kerja melalui kode (bukan dengan menggunakan file konfigurasi), yang merupakan file .exe yang dihosting sendiri menggunakan kelas WorkflowApplication. Peserta pelacakan ditambahkan sebagai ekstensi ke instans WorkflowApplication. Ini dilakukan dengan menambahkan TrackingParticipant ke koleksi ekstensi untuk instans WorkflowApplication.
Untuk aplikasi alur kerja, Anda dapat menambahkan ekstensi perilaku EtwTrackingParticipant seperti yang ditunjukkan dalam kode berikut.
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);
Mengonfigurasi Pelacakan Layanan Alur Kerja
Alur kerja dapat diekspos sebagai layanan WCF saat dihosting di host layanan WorkflowServiceHost. WorkflowServiceHost adalah implementasi .NET ServiceHost khusus untuk layanan berbasis alur kerja. Bagian ini menjelaskan cara mengonfigurasi pelacakan untuk layanan alur kerja .NET Framework 4.6.1 yang berjalan di WorkflowServiceHost. Ini dikonfigurasi melalui file Web.config (untuk layanan yang dihosting Web) atau file App.config (untuk layanan yang dihosting dalam aplikasi yang berdiri sendiri, seperti aplikasi konsol) dengan menentukan perilaku layanan atau melalui kode dengan menambahkan perilaku khusus pelacakan ke koleksi Behaviors untuk host layanan.
Untuk layanan alur kerja yang dihosting di WorkflowServiceHost, Anda dapat menambahkan EtwTrackingParticipant menggunakan elemen <behavior
> dalam file konfigurasi, seperti yang ditunjukkan dalam contoh berikut.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
Atau, untuk layanan alur kerja yang dihosting di WorkflowServiceHost, Anda dapat menambahkan ekstensi perilaku EtwTrackingParticipant melalui kode. Untuk menambahkan peserta pelacakan kustom, buat ekstensi perilaku baru dan tambahkan ke ServiceHost seperti yang ditunjukkan dalam kode contoh berikut.
Catatan
Jika Anda ingin melihat kode sampel yang memperlihatkan cara membuat elemen perilaku kustom yang menambahkan peserta pelacakan kustom, lihat sampel Pelacakan.
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();
Peserta pelacakan ditambahkan ke host layanan alur kerja sebagai ekstensi untuk perilaku.
Contoh kode di bawah ini menunjukkan cara membaca profil pelacakan dari file konfigurasi.
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;
Kode sampel ini menunjukkan cara menambahkan profil pelacakan ke host alur kerja.
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
});
}
Catatan
Untuk informasi selengkapnya tentang melacak profil, lihat Melacak Profil.
Mengonfigurasi pelacakan menggunakan WorkflowInvoker
Untuk mengonfigurasi pelacakan untuk alur kerja yang dijalankan menggunakan WorkflowInvoker, tambahkan penyedia pelacakan sebagai ekstensi ke instans WorkflowInvoker. Contoh kode berikut berasal dari sampel Pelacakan Kustom.
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();
Menampilkan rekaman pelacakan di Pemantau Peristiwa
Ada dua log Pemantau Peristiwa yang menarik untuk dilihat saat melacak eksekusi WF - Log analitik dan Log debug. Keduanya berada di bawah node Microsoft|Windows|Application Server-Applications. Log dalam bagian ini berisi peristiwa dari satu aplikasi daripada peristiwa yang berdampak pada seluruh sistem.
Peristiwa jejak debug ditulis ke Log Debug. Untuk mengumpulkan peristiwa jejak debug WF di Pemantau Peristiwa, aktifkan Log Debug.
Untuk membuka Pemantau Peristiwa, klik Mulai, lalu klik Jalankan. Dalam dialog Jalankan, ketik
eventvwr
.Dalam dialog Pemantau Peristiwa, perluas node Log Aplikasi dan Layanan.
Perluas node Microsoft, Windows, dan Application Server-Applications.
Klik kanan node Debug di bawah node Aplikasi Server-Aplikasi, lalu pilih Aktifkan Log.
Jalankan aplikasi yang mendukung pelacakan Anda untuk menghasilkan peristiwa pelacakan.
Klik kanan node Debug dan pilih Refresh. Peristiwa pelacakan harus terlihat di panel tengah.
WF 4 menyediakan peserta pelacakan yang menulis rekaman pelacakan ke sesi ETW (Pelacakan Peristiwa untuk Windows). Peserta pelacakan ETW dikonfigurasi dengan profil pelacakan untuk berlangganan rekaman pelacakan. Saat pelacakan diaktifkan, rekaman pelacakan kesalahan dipancarkan ke ETW. Peristiwa pelacakan ETW (antara rentang 100-113) yang sesuai dengan peristiwa pelacakan yang dipancarkan oleh peserta pelacakan ETW ditulis ke Log Analitik.
Untuk melihat rekaman pelacakan, ikuti langkah-langkah ini.
Untuk membuka Pemantau Peristiwa, klik Mulai, lalu klik Jalankan. Dalam dialog Jalankan, ketik
eventvwr
.Dalam dialog Pemantau Peristiwa, perluas node Log Aplikasi dan Layanan.
Perluas node Microsoft, Windows, dan Application Server-Applications.
Klik kanan node Analitik di bawah node Application Server-Applications, lalu pilih Aktifkan Log.
Jalankan aplikasi yang mendukung pelacakan Anda untuk menghasilkan rekaman pelacakan.
Klik kanan node Analitik dan pilih Refresh. Rekaman pelacakan harus terlihat di panel tengah.
Gambar berikut menunjukkan peristiwa pelacakan di penampil peristiwa:
Mendaftarkan ID penyedia khusus aplikasi
Jika peristiwa perlu ditulis ke log aplikasi tertentu, ikuti langkah-langkah ini untuk mendaftarkan manifes penyedia baru.
Nyatakan ID penyedia dalam file konfigurasi aplikasi.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>
Salin file manifes dari %windir%\Microsoft.NET\Framework\<versi terbaru .NET Framework 4.6.1>\Microsoft.Windows. ApplicationServer.Applications.man ke lokasi sementara, dan ganti namanya menjadi Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Ubah GUID dalam file manifes ke GUID baru.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Ubah nama penyedia jika Anda tidak ingin menghapus instalan penyedia default.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Jika Anda mengubah nama penyedia di langkah sebelumnya, ubah nama saluran dalam file manifes menjadi nama penyedia baru.
<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)" />
Buat DLL sumber daya dengan mengikuti langkah-langkah ini.
Instal ulang SDK Windows. SDK Windows mencakup pengompilasi pesan (mc.exe) dan pengompilasi sumber daya (rc.exe).
Di perintah SDK Windows, jalankan mc.exe pada file manifes baru.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Jalankan rc.exe pada file sumber daya yang dihasilkan pada langkah sebelumnya.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
Buat file cs kosong yang disebut NewProviderReg.cs.
Buat DLL sumber daya menggunakan pengompilasi C#.
csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
Ubah nama dll sumber daya dan pesan dalam file manifes dari
Microsoft.Windows.ApplicationServer.Applications.Provider1.man
ke nama dll baru.<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" />
Gunakan wevtutil untuk mendaftarkan manifes.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man