Bagikan melalui


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:

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

  1. Dengan menggunakan Visual Studio, buka file solusi CustomTrackingSample.sln.

  2. Untuk membangun solusi, tekan CTRL+SHIFT+B.

  3. Untuk menjalankan solusi, tekan CTRL+F5.

Lihat juga