Bagikan melalui


Mengonfigurasi Pesan Masuk

Topik ini menjelaskan bagaimana Anda dapat mengonfigurasi pengelogan pesan untuk skenario yang berbeda.

Mengaktifkan Pesan Masuk

Windows Communication Foundation (WCF) tidak membuat log pesan secara default. Untuk mengaktifkan pesan masuk, Anda harus menambahkan pendengar pelacakan ke System.ServiceModel.MessageLogging sumber pelacakan dan mengatur atribut untuk <messagelogging> elemen dalam file konfigurasi.

Contoh berikut menunjukkan cara mengaktifkan pesan masuk dan menentukan opsi tambahan.

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
         <add name="messages"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\logs\messages.svclog" />
        </listeners>
    </source>
  </sources>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging
         logEntireMessage="true"
         logMalformedMessages="false"
         logMessagesAtServiceLevel="true"
         logMessagesAtTransportLevel="false"
         maxMessagesToLog="3000"
         maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>

Untuk informasi selengkapnya tentang pengaturan pesan masuk, lihat Pengaturan yang Direkomendasikan untuk Penelusuran dan Pesan Masuk.

Anda dapat menggunakan add untuk menentukan nama dan jenis pendengar yang ingin Anda gunakan. Dalam konfigurasi contoh, Pendengar diberi nama "pesan" dan menambahkan pendengar jejak .NET Framework standar (System.Diagnostics.XmlWriterTraceListener) sebagai jenis untuk penggunaan. Jika Anda menggunakan System.Diagnostics.XmlWriterTraceListener, Anda harus menentukan lokasi dan nama file output dalam file konfigurasi. Hal ini dilakukan dengan mengatur initializeData ke nama file log. Jika tidak, sistem akan memberikan pengecualian. Anda juga dapat menerapkan pendengar kustom yang memancarkan log ke file default.

Catatan

Karena pesan masuk mengakses ruang disk, Anda harus membatasi jumlah pesan yang ditulis ke disk untuk layanan tertentu. Ketika batas pesan tercapai, jejak di tingkat Informasi dihasilkan dan semua aktivitas pesan masuk berhenti.

Tingkat pesan masuk, serta opsi tambahan, dibahas di bagian Tingkat Masuk dan Opsi.

switchValue Atribut dari a source hanya valid untuk pelacakan. Jika Anda menentukan switchValue atribut untuk System.ServiceModel.MessageLogging sumber penelusuran sebagai berikut, atribut tersebut tidak berpengaruh.

<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
</source>

Jika Anda ingin menonaktifkan sumber penelusuran, Anda harus menggunakan logMessagesAtServiceLevel, logMalformedMessages, dan logMessagesAtTransportLevel atribut messageLogging dari elemen sebagai gantinya. Anda harus mengatur semua atribut ini ke false. Ini dapat dilakukan dengan menggunakan file konfigurasi dalam contoh kode sebelumnya, melalui antarmuka UI Editor Konfigurasi, atau menggunakan WMI. Untuk informasi selengkapnya tentang alat Editor Konfigurasi, lihat Alat Editor Konfigurasi (SvcConfigEditor.exe). Untuk informasi selengkapnya tentang WMI, lihat Menggunakan Instrumentasi Manajemen Windows untuk Diagnostik.

Tingkat Masuk dan Opsi

Untuk pesan masuk, proses masuk terjadi segera setelah pesan terbentuk, segera sebelum pesan masuk ke kode pengguna di tingkat layanan, dan ketika pesan yang salah terdeteksi.

Untuk pesan keluar, proses masuk terjadi segera setelah pesan meninggalkan kode pengguna dan segera sebelum pesan masuk ke wire.

WCF mencatat pesan pada dua tingkat, layanan, dan transportasi yang berbeda. Pesan yang salah informasi juga dicatat. Ketiga kategori tersebut independen satu sama lain dan dapat diaktifkan secara terpisah dalam konfigurasi.

Anda dapat mengontrol tingkat pembuatan log dengan pengaturan logMessagesAtServiceLevel, logMalformedMessages, dan logMessagesAtTransportLevelatribut dari messageLogging elemen.

Tingkat Layanan

Pesan yang masuk di lapisan ini akan masuk (saat menerima) atau meninggalkan (saat mengirim) kode pengguna. Jika filter telah ditentukan, hanya pesan yang cocok dengan filter yang masuk. Jika tidak, semua pesan di tingkat layanan yang masuk. Pesan infrastruktur (transaksi, saluran rekan, dan keamanan) juga masuk pada tingkat ini, kecuali untuk Olahpesan yang Andal. Pada pesan yang dialirkan, hanya header yang masuk. Selain itu, pesan aman masuk didekripsi pada tingkat ini.

Tingkat Transportasi

Pesan yang dicatat pada lapisan ini siap untuk dikodekan atau didekodekan untuk atau setelah transportasi pada wire. Jika filter telah ditentukan, hanya pesan yang cocok dengan filter yang masuk. Jika tidak, semua pesan di lapisan transportasi yang masuk. Semua pesan infrastruktur yang masuk pada lapisan ini, termasuk olahpesan yang andal. Pada pesan yang dialirkan, hanya header yang masuk. Selain itu, pesan aman masuk sebagai dienkripsi pada tingkat ini, kecuali jika transportasi aman seperti HTTPS digunakan.

Tingkat Kerusakan

Pesan yang rusak adalah pesan yang ditolak oleh tumpukan WCF pada setiap tahap pemrosesan. Pesan rusak masuk sebagai: dienkripsi jika demikian, dengan XML yang tidak tepat, dan sebagainya. maxSizeOfMessageToLog menentukan ukuran pesan yang akan dicatat sebagai CDATA. Secara default, maxSizeOfMessageToLog sama dengan 256K. Untuk informasi selengkapnya tentang atribut ini, lihat bagian Opsi Lainnya.

Opsi lainnya

Selain tingkat pencatatan, pengguna dapat menentukan opsi berikut:

  • Log Seluruh Pesan (logEntireMessage atribut): Nilai ini menentukan apakah seluruh pesan (header pesan dan isi) masuk. Nilai default adalah false, yang berarti bahwa hanya header yang masuk. Pengaturan ini memengaruhi tingkat masuk pesan layanan dan transportasi.

  • Pesan maksimal untuk dicatat (maxMessagesToLog atribut): Nilai ini menentukan jumlah maksimum pesan yang akan dicatat. Semua pesan (layanan, transportasi, dan pesan rusak) dihitung dalam kuota ini. Ketika kuota tercapai, jejak dikeluarkan dan tidak ada pesan tambahan yang masuk. Nilai default adalah 10000.

  • Ukuran maksimum pesan untuk dicatat (maxSizeOfMessageToLog atribut): Nilai ini menentukan ukuran maksimum pesan untuk masuk byte. Pesan yang melebihi batas ukuran tidak dicatat, dan tidak ada aktivitas lain yang dilakukan untuk pesan tersebut. Pengaturan ini memengaruhi semua tingkat pelacakan. Jika penelusuran ServiceModel aktif, jejak tingkat Peringatan dikeluarkan pada titik pengelogan pertama (ServiceModelSend* atau TransportReceive) untuk memberi tahu pengguna. Nilai default untuk tingkat layanan dan pesan tingkat transportasi adalah 256K, sedangkan nilai default untuk pesan yang salah adalah 4K.

    Perhatian

    Ukuran pesan yang dihitung untuk dibandingkan maxSizeOfMessageToLog adalah ukuran pesan dalam memori sebelum serialisasi. Ukuran ini dapat berbeda dari panjang sebenarnya dari string pesan yang sedang dicatat, dan dalam banyak kesempatan lebih besar dari ukuran sebenarnya. Akibatnya, pesan mungkin tidak masuk. Anda dapat mempertanggungjawabkan fakta ini dengan menentukan maxSizeOfMessageToLog atribut menjadi 10% lebih besar dari ukuran pesan yang diharapkan. Selain itu, jika pesan rusak masuk, ruang disk aktual yang digunakan oleh pesan masuk dapat mencapai 5 kali ukuran nilai yang ditentukan oleh maxSizeOfMessageToLog.

Jika tidak ada pendengar jejak yang ditentukan dalam file konfigurasi, tidak ada output pencatatan yang dihasilkan terlepas dari tingkat pencatatan yang ditentukan.

Opsi pengelogan pesan, seperti atribut yang dijelaskan di bagian ini, dapat diubah pada durasi menggunakan Windows Management Instrumentation (WMI). Ini dapat dilakukan dengan mengakses instans AppDomainInfo, yang mengekspos properti Boolean ini: LogMessagesAtServiceLevel, LogMessagesAtTransportLevel, dan LogMalformedMessages. Oleh karena itu, jika Anda mengonfigurasi pendengar penelusuran untuk pesan masuk, tetapi mengatur opsi ini ke false dalam konfigurasi, Anda nantinya dapat mengubahnya menjadi true saat aplikasi berjalan. Hal Ini secara efektif memungkinkan pesan masuk pada waktu berjalan. Demikian pula, jika Anda mengaktifkan pesan masuk dalam file konfigurasi, Anda dapat menonaktifkannya pada durasi menggunakan WMI. Untuk informasi selengkapnya, lihat Menggunakan Instrumentasi Manajemen Windows untuk Diagnostik.

source Bidang dalam log pesan menentukan konteks mana pesan masuk: saat mengirim/menerima pesan permintaan, untuk permintaan balasan permintaan atau 1 arah, pada model layanan atau lapisan transportasi, atau dalam kasus pesan yang salah format.

Untuk pesan rusak, source juga demikian Malformed. Jika tidak, sumber memiliki nilai-nilai berikut berdasarkan konteksnya.

Untuk Permintaan/Balasan:

Lapisan Kirim permintaan Terima Permintaan Kirim Balasan Terima Balasan
Lapisan Model Layanan Layanan

Tingkat

Kirim

Minta
Layanan

Tingkat

Terima

Minta
Layanan

Tingkat

Kirim

Balas
Layanan

Tingkat

Terima

Balas
Lapisan Transport Transportasi

Kirim
Transportasi

Terima
Transportasi

Kirim
Transportasi

Terima

Untuk Permintaan Satu Arah:

Lapisan Kirim permintaan Terima Permintaan
Lapisan Model Layanan Layanan

Tingkat

Kirim

Datagram
Layanan

Tingkat

Terima

Datagram
Lapisan Transport Transportasi

Kirim
Transportasi

Terima

Filter Pesan

Filter pesan ditentukan dalam messageLogging elemen konfigurasi bagian diagnostics konfigurasi. Hal itu diterapkan pada tingkat layanan dan transportasi. Saat satu atau beberapa filter ditentukan, hanya pesan yang cocok dengan setidaknya salah satu filter yang masuk. Jika tidak ada filter yang ditentukan, semua pesan diteruskan.

Filter mendukung sintaks JalurX lengkap, dan diterapkan sesuai urutan kemunculan sintaks di file konfigurasi. Filter yang salah secara sintaks menghasilkan pengecualian konfigurasi.

Filter juga menyediakan fitur keamanan menggunakan nodeQuota atribut, yang membatasi jumlah maksimum simpul dalam JalurX DOM yang dapat diperiksa agar sesuai dengan filter.

Contoh berikut menunjukkan cara mengonfigurasi filter yang hanya merekam pesan yang memiliki bagian header SOAP.

<messageLogging logEntireMessage="true"
    logMalformedMessages="true"
    logMessagesAtServiceLevel="true"
    logMessagesAtTransportLevel="true"
    maxMessagesToLog="420">
    <filters>
        <add nodeQuota="10" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                 /soap:Envelope/soap:Header
        </add>
     </filters>
</messageLogging>

Filter tidak dapat diterapkan ke badan pesan. Filter yang mencoba memanipulasi isi pesan dihapus dari daftar filter. Peristiwa yang muncul juga menunjukkan hal ini. Misalnya, filter berikut akan dihapus dari tabel filter.

<add xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">/s:Envelope/s:Body[contains(text(), "Hello")]</add>

Mengonfigurasi Pendengar Kustom

Anda juga dapat mengonfigurasi pendengar kustom dengan opsi tambahan. Pendengar kustom dapat berguna dalam memfilter elemen PII khusus aplikasi dari pesan sebelum pengelogan. Contoh berikut menunjukkan konfigurasi pendengar kustom.

<system.diagnostics>
   <sources>
     <source name="System.ServiceModel.MessageLogging">
           <listeners>
             <add name="MyListener"
                    type="YourCustomListener"
                    initializeData="c:\logs\messages.svclog"
                    maxDiskSpace="1000"/>
           </listeners>
     </source>
   </sources>
</system.diagnostics>

Anda harus menyadari bahwa type atribut harus diatur ke nama rakitan yang memenuhi syarat dari jenis tersebut.

Lihat juga