Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel CustomTracking menunjukkan cara membuat peserta pelacakan kustom dan menulis konten data pelacakan ke konsol. Selain itu, sampel menunjukkan cara memancarkan CustomTrackingRecord objek yang diisi dengan data yang ditentukan pengguna. Peserta pelacakan berbasis konsol memfilter objek yang TrackingRecord dipancarkan 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 pemantauan mengimplementasikan instans alur kerja untuk menyampaikan kejadian yang terkait dengan siklus hidup alur kerja, kejadian dari aktivitas alur kerja, dan kejadian pemantauan kustom. Tabel berikut merinci komponen utama infrastruktur pelacakan.
| Komponen | Deskripsi |
|---|---|
| Pelacakan waktu eksekusi | Menyediakan infrastruktur untuk memancarkan rekaman pelacakan. |
| Pelacakan peserta | Mengonsumsi rekaman pelacakan. .NET Framework 4 disertakan dengan partisipan pemantauan yang menulis rekaman pelacakan sebagai acara Pelacakan Peristiwa untuk Windows (ETW). |
| Profil pemantauan | Mekanisme pemfilteran yang memungkinkan peserta yang melacak untuk berlangganan sebagian rekaman pelacakan yang dihasilkan dari instans alur kerja. |
Tabel berikut ini merinci rekaman pelacakan yang dikeluarkan oleh alur kerja runtime.
| Catatan Pelacakan | Deskripsi |
|---|---|
| Rekaman pelacakan instans alur kerja. | Menjelaskan siklus hidup instans alur kerja. Misalnya, rekaman instans dikeluarkan saat alur kerja dimulai atau selesai. |
| Rekaman status aktivitas pelacakan. | Rincian pelaksanaan aktivitas. Rekaman ini menunjukkan keadaan aktivitas alur kerja seperti ketika aktivitas dijadwalkan, ketika aktivitas selesai, atau ketika kesalahan terjadi. |
| Catatan kelanjutan marka buku. | Dikeluarkan setiap kali bookmark dalam instans alur kerja dilanjutkan. |
| Rekaman Pelacakan yang Disesuaikan | Penulis alur kerja dapat membuat Rekaman Pelacakan Kustom dan memancarkannya dalam aktivitas kustom. |
Peserta pelacakan berlangganan sebuah subset dari objek yang dipancarkan TrackingRecord menggunakan profil pelacakan. Profil pelacakan berisi kueri pelacakan yang memungkinkan berlangganan untuk jenis catatan pelacakan tertentu. Profil pelacakan dapat ditentukan dalam kode atau dalam konfigurasi.
Peserta Pemantauan Khusus
API peserta pelacakan memungkinkan penambahan ekstensi pada runtime pelacakan dengan peserta pelacakan yang disediakan oleh pengguna, yang dapat menyertakan logika kustom untuk menangani objek TrackingRecord yang dipancarkan oleh runtime alur kerja.
Untuk menulis pelacakan peserta, pengguna harus menerapkan TrackingParticipant. Metode Track harus diimplementasikan secara khusus oleh peserta khusus. Metode ini dipanggil ketika TrackingRecord dihasilkan oleh runtime alur kerja.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
Peserta pelacakan lengkap diimplementasikan dalam file ConsoleTrackingParticipant.cs. Metode Track berikut adalah untuk pelacakan peserta 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 pemanggil 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);
Mengeluarkan Catatan Pelacakan Kustom
Sampel ini juga menunjukkan kemampuan untuk memancarkan CustomTrackingRecord objek dari aktivitas alur kerja kustom:
Objek CustomTrackingRecord dibuat dan diisi dengan data yang ditentukan oleh pengguna yang ingin dipancarkan bersama dengan rekaman.
CustomTrackingRecord dipancarkan dengan memanggil metode lacak dari ActivityContext.
Contoh berikut menunjukkan cara memancarkan CustomTrackingRecord objek 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
Menggunakan Visual Studio, buka file solusi CustomTrackingSample.sln.
Untuk membangun solusi, tekan CTRL+SHIFT+B.
Untuk menjalankan solusi, tekan CTRL+F5.