Bagikan melalui


Peserta Pelacakan

Peserta pelacakan adalah titik ekstensibilitas yang memungkinkan pengembang alur kerja mengakses objek TrackingRecord dan memprosesnya. .NET Framework 4.6.1 mencakup peserta pelacakan standar yang menulis rekaman pelacakan sebagai peristiwa Pelacakan Peristiwa untuk Windows (ETW). Jika cara tersebut tidak memenuhi kebutuhan Anda, Anda juga dapat menulis peserta pelacakan kustom.

Peserta Pelacakan

Infrastruktur pelacakan memungkinkan penerapan filter pada rekaman pelacakan keluar sehingga peserta dapat berlangganan subset rekaman. Mekanisme untuk menerapkan filter dilakukan melalui profil pelacakan.

Windows Workflow Foundation (WF) di .NET Framework 4.6.1 menyediakan peserta pelacakan yang menulis rekaman pelacakan ke sesi ETW. Peserta dikonfigurasi pada layanan alur kerja dengan menambahkan perilaku khusus pelacakan dalam file konfigurasi. Mengaktifkan peserta pelacakan ETW memungkinkan rekaman pelacakan dilihat di penampil peristiwa. Sampel SDK untuk pelacakan berbasis ETW adalah cara yang tepat untuk memahami pelacakan WF menggunakan peserta pelacakan berbasis ETW.

Peserta Pelacakan ETW

.NET Framework 4.6.1 menyertakan Peserta Pelacakan ETW yang menulis rekaman pelacakan ke sesi ETW. Ini dilakukan dengan cara yang sangat efisien dengan dampak minimum terhadap performa aplikasi atau throughput server. Kelebihan menggunakan peserta pelacakan ETW standar adalah rekaman pelacakan yang diterima dapat dilihat dengan log aplikasi dan sistem lain di Windows Event Viewer.

Peserta pelacakan ETW standar dikonfigurasi dalam file Web.config seperti yang ditunjukkan dalam contoh berikut.

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <etwTracking profileName="Sample Tracking Profile"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
   <tracking>
      <profiles>
        <trackingProfile name="Sample Tracking Profile">
        ….
       </trackingProfile>
      </profiles>
    </tracking>
  </system.serviceModel>
</configuration>

Catatan

Jika nama trackingProfile tidak ditentukan, seperti hanya <etwTracking/> atau <etwTracking profileName=""/>, profil pelacakan default yang diinstal dengan .NET Framework 4.6.1 dalam file Machine.config akan digunakan.

Dalam file Machine.config, profil pelacakan default berlangganan rekaman dan kesalahan instans alur kerja.

Di ETW, peristiwa ditulis ke sesi ETW melalui ID penyedia. ID Penyedia yang digunakan peserta pelacakan ETW untuk menulis rekaman pelacakan ke ETW ditentukan di bagian diagnostik file Web.config (di bagian <system.serviceModel><diagnostics>). Secara default, peserta pelacakan ETW menggunakan ID penyedia default jika belum ditentukan, seperti yang ditunjukkan dalam contoh berikut.

<system.serviceModel>
        <diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />

Ilustrasi berikut menunjukkan alur data pelacakan melalui peserta pelacakan ETW. Setelah mencapai sesi ETW, data pelacakan dapat diakses dengan beberapa cara. Salah satu cara paling berguna untuk mengakses peristiwa ini adalah melalui Penampil Peristiwa, alat Windows umum yang digunakan untuk melihat log dan jejak dari aplikasi dan layanan.

Flow of tracking data through the ETW tracking provider.

Melacak Data Peristiwa Peserta

Peserta pelacakan membuat serialisasi data peristiwa yang dilacak ke sesi ETW dalam format satu peristiwa per rekaman pelacakan. Peristiwa diidentifikasi menggunakan ID dalam rentang 100 hingga 199. Untuk definisi rekaman peristiwa pelacakan yang dikeluarkan oleh peserta pelacakan, lihat topik Referensi Peristiwa Pelacakan.

Ukuran peristiwa ETW dibatasi oleh ukuran buffer ETW, atau oleh payload maksimum untuk peristiwa ETW, nilai mana pun yang lebih kecil. Jika ukuran peristiwa melebihi salah satu batas ETW ini, peristiwa akan dipotong dan kontennya dihapus secara acak. Variabel, argumen, anotasi, dan data kustom tidak dihapus secara selektif. Dalam kasus pemotongan, semuanya akan dipotong terlepas dari nilai yang menyebabkan ukuran peristiwa melebihi batas ETW. Data yang dihapus diganti dengan <item>..<item>.

Jenis kompleks dalam variabel, argumen, dan item data kustom diserialisasi ke rekaman peristiwa ETW menggunakan kelas NetDataContractSerializer. Kelas ini menyertakan informasi jenis CLR dalam aliran XML yang diserialisasi.

Pemotongan data payload dikarenakan batas ETW dapat mengakibatkan rekaman pelacakan duplikat dikirim ke sesi ETW. Hal ini dapat terjadi jika lebih dari satu sesi mendengarkan acara dan sesi memiliki batas payload yang berbeda untuk acara tersebut.

Untuk sesi dengan batas bawah, peristiwa dapat dipotong. Peserta pelacakan ETW tidak memiliki pengetahuan tentang jumlah sesi yang mendengarkan acara; jika suatu acara dipotong untuk sesi maka peserta ETW mencoba mengirim acara sekali. Dalam hal ini, sesi yang dikonfigurasi untuk menerima ukuran payload yang lebih besar akan mendapatkan peristiwa dua kali (peristiwa yang tidak terpotong dan terpotong). Duplikasi dapat dicegah dengan mengonfigurasi semua sesi ETW dengan batas ukuran buffer yang sama.

Mengakses Data Pelacakan dari Peserta ETW di Penampil Peristiwa

Peristiwa yang ditulis ke sesi ETW oleh peserta pelacakan ETW dapat diakses melalui Penampil Peristiwa (saat menggunakan ID penyedia default). Hal ini memungkinkan untuk melihat rekaman pelacakan dengan cepat yang telah ditampilkan oleh alur kerja.

Catatan

Peristiwa rekaman pelacakan yang ditampilkan ke ID peristiwa penggunaan sesi ETW dalam rentang 100 hingga 199.

Untuk mengaktifkan melihat Rekaman Pelacakan di Penampil Peristiwa

  1. Memulai Penampil Peristiwa (EVENTVWR.EXE)

  2. Pilih Penampil Peristiwa, Log Aplikasi dan Layanan, Microsoft, Windows, Aplikasi-Server Aplikasi.

  3. Klik kanan dan pastikan bahwa Lihat, Tampilkan log Analitik dan Debut dipilih. Jika tidak, pilih agar tanda centang muncul di sampingnya. Ini akan menampilkan log Analitik, Perf, dan Debug.

  4. Klik kanan log Analitik lalu pilih Aktifkan Log. Log akan berada di %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.etl file.

Peserta Pelacakan Kustom

API peserta pelacakan memungkinkan ekstensi runtime pelacakan dengan peserta pelacakan yang disediakan pengguna yang dapat menyertakan logika kustom untuk menangani rekaman pelacakan yang ditampilkan oleh runtime alur kerja. Untuk menulis peserta pelacakan kustom, pengembang harus menerapkan metode Track di kelas TrackingParticipant. Metode ini dipanggil saat rekaman pelacakan ditampilkan oleh runtime alur kerja.

Peserta pelacakan berasal dari kelas TrackingParticipant. EtwTrackingParticipant yang disediakan sistem menampilkan peristiwa Pelacakan Peristiwa untuk Windows (ETW) untuk setiap rekaman pelacakan yang diterima. Untuk membuat peserta pelacakan kustom, kelas dibuat yang berasal dari TrackingParticipant. Untuk menyediakan fungsionalitas pelacakan dasar, ambil alih Track. Track dipanggil saat rekaman pelacakan dikirim oleh runtime dan dapat diproses dengan cara yang diinginkan. Dalam contoh berikut, kelas peserta pelacakan kustom ditentukan yang menampilkan semua rekaman pelacakan ke jendela konsol. Anda juga dapat menerapkan objek TrackingParticipant yang memproses rekaman pelacakan secara asinkron menggunakan metode BeginTrack dan EndTrack-nya

class ConsoleTrackingParticipant : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        if (record != null)
        {
            Console.WriteLine("=================================");
            Console.WriteLine(record);
        }
    }
}

Untuk menggunakan peserta pelacakan tertentu, daftarkan dengan instans alur kerja yang ingin dilacak, seperti yang ditunjukkan pada contoh berikut.

myInstance.Extensions.Add(new ConsoleTrackingParticipant());

Dalam contoh berikut, alur kerja yang terdiri dari aktivitas Sequence yang berisi aktivitas WriteLine dibuat. ConsoleTrackingParticipant ditambahkan ke ekstensi dan alur kerja dipanggil.

Activity activity= new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Hello World."
        }
    }
};

WorkflowApplication instance = new WorkflowApplication(activity);

instance.Extensions.Add(new ConsoleTrackingParticipant());
  instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                Console.WriteLine("workflow instance completed, Id = " + instance.Id);
                resetEvent.Set();
            };
            instance.Run();
            Console.ReadLine();

Lihat juga