Pelacakan Kustom
Sampel Pelacakan Kustom mendemonstrasikan cara membuat peserta pelacakan kustom dan menulis konten data pelacakan ke konsol. Selain itu, sampel menunjukkan cara menghasilkan objek CustomTrackingRecord yang diisi dengan data yang ditentukan pengguna. Peserta pelacakan berbasis konsol memfilter objek TrackingRecord yang dihasilkan oleh alur kerja menggunakan objek profil pelacakan yang dibuat dalam kode.
Detail Sampel
Windows Workflow Foundation (WF) menyediakan infrastruktur pelacakan untuk melacak eksekusi instans alur kerja. Runtime bahasa umum pelacakan mengimplementasikan instans alur kerja untuk menghasilkan kejadian terkait siklus hidup alur kerja, kejadian dari aktivitas alur kerja, dan kejadian pelacakan kustom. Tabel berikut merinci komponen utama infrastruktur pelacakan.
Komponen | Deskripsi |
---|---|
Runtime bahasa umum pelacakan | Menyediakan infrastruktur untuk menghasilkan catatan pelacakan. |
Melacak peserta | Menggunakan catatan pelacakan. .NET Framework 4 dikirim dengan peserta pelacakan yang menulis catatan pelacakan sebagai kejadian Pelacakan Kejadian untuk Windows (ETW). |
Profil pelacakan | Mekanisme pemfilteran yang memungkinkan peserta pelacakan berlangganan subset catatan pelacakan yang dihasilkan dari instans alur kerja. |
Tabel berikut berisi detail rekaman penelusuran yang ditampilkan oleh runtime alur kerja.
Catatan Pelacakan | Deskripsi |
---|---|
Rekaman pelacakan instans alur kerja. | Menjelaskan siklus hidup instans alur kerja. Misalnya, catatan instans dihasilkan saat alur kerja dimulai atau selesai. |
Catatan Pelacakan status aktivitas. | Memerinci eksekusi aktivitas. Catatan ini menunjukkan keadaan aktivitas alur kerja seperti saat aktivitas dijadwalkan atau saat aktivitas selesai atau saat kesalahan dilemparkan. |
Catatan kelanjutan jangkar. | Dihasilkan setiap kali jangkar dalam instans alur kerja dilanjutkan. |
Catatan Pelacakan Kustom. | Penulis alur kerja dapat membuat Catatan Pelacakan Kustom dan menghasilkannya dalam aktivitas kustom. |
Peserta pelacakan berlangganan subset catatan pelacakan objek TrackingRecord yang dihasilkan menggunakan profil pelacakan. Profil pelacakan berisi kueri pelacakan yang memungkinkan berlangganan jenis catatan pelacakan tertentu. Profil pelacakan dapat ditentukan dalam kode atau dalam konfigurasi.
Peserta Pelacakan Kustom
API peserta pelacakan memungkinkan ekstensi runtime bahasa umum pelacakan dengan peserta pelacakan yang disediakan pengguna yang dapat menyertakan logika kustom untuk menangani objek TrackingRecord yang dihasilkan runtime bahasa umum alur kerja.
Untuk menulis peserta pelacakan, pengguna harus menerapkan TrackingParticipant. Secara khusus, metode Track harus diimplementasikan oleh peserta kustom. Metode ini dipanggil saat TrackingRecord dihasilkan oleh runtime bahasa umum alur kerja.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
Peserta pelacakan yang lengkap diimplementasikan dalam file ConsoleTrackingParticipant.cs. Contoh kode berikut adalah metode Track untuk peserta pelacakan kustom.
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
...
WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
if (workflowInstanceRecord != null)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" Workflow InstanceID: {0} Workflow instance state: {1}",
record.InstanceId, workflowInstanceRecord.State));
}
ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
if (activityStateRecord != null)
{
IDictionary<String, object> variables = activityStateRecord.Variables;
StringBuilder vars = new StringBuilder();
if (variables.Count > 0)
{
vars.AppendLine("\n\tVariables:");
foreach (KeyValuePair<string, object> variable in variables)
{
vars.AppendLine(String.Format(
"\t\tName: {0} Value: {1}", variable.Key, variable.Value));
}
}
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
activityStateRecord.Activity.Name, activityStateRecord.State,
((variables.Count > 0) ? vars.ToString() : String.Empty)));
}
CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
{
...
}
Console.WriteLine();
}
Contoh kode berikut menambahkan peserta konsol ke invoker alur kerja.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
Memancarkan Rekaman Pelacakan Kustom
Sampel ini juga menunjukkan kemampuan untuk menghasilkan objek CustomTrackingRecord dari aktivitas alur kerja kustom:
Objek CustomTrackingRecord dibuat dan diisi dengan data yang ditentukan pengguna yang diinginkan untuk dihasilkan dengan catatan.
CustomTrackingRecord dihasilkan dengan memanggil metode trek dari ActivityContext.
Contoh berikut menunjukkan cara menghasilkan objek CustomTrackingRecord dalam aktivitas kustom.
// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
Data =
{
{"OrderId", 200},
{"OrderDate", "20 Aug 2001"}
}
};
// Emit custom tracking record
context.Track(customRecord);
Untuk menggunakan sampel ini
Dengan menggunakan Visual Studio, buka file solusi CustomTrackingSample.sln.
Untuk membangun solusi, tekan CTRL+SHIFT+B.
Untuk menjalankan solusi, tekan CTRL+F5.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk