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 logMessagesAtTransportLevel
atribut 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 adalahfalse
, 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 menentukanmaxSizeOfMessageToLog
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 olehmaxSizeOfMessageToLog
.
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.