Cara menggunakan Fiddler untuk memantau layanan WCF

107

Saya memiliki layanan WCF yang menerima tipe kompleks dan mengembalikan beberapa data. Saya ingin menggunakan Fiddler untuk melihat seperti apa permintaan masuk ke layanan tersebut. Kliennya adalah aplikasi konsol .net yang menggunakan proxy referensi Layanan. Apakah ini mungkin dengan Fiddler. Saya baru mengenal alat ini dan hanya menggunakannya di masa lalu untuk mengirim data dengan pembuat permintaan.

Quadwwchs
sumber
4
Layanan penelusuran WCF cukup bagus dengan sendirinya termasuk GUI yang bagus untuk melihatnya. msdn.microsoft.com/en-us/library/ms751526.aspx
kenny

Jawaban:

148

Anda perlu menambahkan ini di web.config Anda

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. lalu Mulai Fiddler di mesin WEBSERVER.
  2. Klik Alat | Fiddler Options => Connections => sesuaikan port sebagai 8888. (izinkan remote jika Anda membutuhkannya)
  3. Ok, lalu dari menu file, tangkap lalu lintas.

Itu saja, namun jangan lupa untuk menghilangkan baris web.config setelah menutup fiddler, karena jika tidak maka akan membuat error.

Referensi: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

Tarek El-Mallah
sumber
1
Terima kasih, itu juga sangat membantu saya. Kesalahan saya tidak menentukan http://dalam alamat proxy. Sisanya sama, seperti yang Anda sebutkan.
Johnny_D
1
Ini tidak berhasil untuk saya. Situasi saya adalah: server adalah IIS7.5, klien adalah aplikasi konsol. Di aplikasi konsol saya, saya memanggil metode Layanan Web yang diterapkan di IIS7.5 di komputer pengembangan saya. Mengganti "localhost" dengan nama komputer saya berfungsi untuk saya.
york
5
Terima kasih, itu berhasil untuk saya. Ngomong-ngomong, dalam kasus saya, saya mencoba menangkap lalu lintas klien WCF di localhost , jadi selain menambahkan pengaturan Anda, itu juga perlu mengubah URL dari http://localhost/abc.svctohttp://HOSTNAME/abc.svc
cateyes
1
Untuk beberapa alasan tidak berhasil untuk saya (saya menggunakan layanan web .svc). Akhirnya solusi saya adalah menggunakan penangkap untuk windows
ren
2
Hebat! Saran dari @cateyes berhasil untuk saya
Alexander Derck
9

Fiddler mendengarkan permintaan keluar daripada permintaan masuk sehingga Anda tidak akan bisa memantau semua permintaan yang masuk ke layanan Anda dengan menggunakan Fiddler.

Hal terbaik yang akan Anda dapatkan dengan Fiddler adalah kemampuan untuk melihat semua permintaan saat dibuat oleh Aplikasi Konsol Anda (dengan asumsi bahwa aplikasi tersebut menghasilkan permintaan web daripada menggunakan pipeline lain).

Jika Anda menginginkan alat yang lebih kuat (tetapi lebih sulit digunakan) yang memungkinkan Anda memantau SEMUA permintaan yang masuk, Anda harus memeriksa WireShark.

Edit

Saya berdiri dikoreksi. Terima kasih kepada Eric Law yang telah memposting petunjuk untuk mengonfigurasi Fiddler menjadi proxy terbalik !

Justin Niessner
sumber
Terimakasih atas infonya. Saya perlu melihat struktur permintaan yang mirip dengan halaman deskripsi untuk layanan asmx. WCF sepertinya tidak memiliki opsi ini.
Quadwwchs
9
Itu tidak cukup akurat (dan "kekuatan" bersifat subjektif, karena WireShark tidak dapat mengubah lalu lintas). Lihat fiddler2.com/fiddler/help/reverseproxy.asp untuk detail lebih lanjut tentang cara mendengarkan lalu lintas masuk.
EricLaw
Eric - Saya sarankan Anda menyatakan itu dalam jawaban yang berdiri sendiri.
Cheeso
9

Baru saja mengalami masalah ini, yang berhasil bagi saya adalah menggunakan localhost.fiddler:

 <endpoint address="http://localhost.fiddler/test/test.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="customBinding" 
            contract="test" 
            name="customBinding"/>
L-Empat
sumber
6

Menggabungkan peringatan yang disebutkan dalam komentar / jawaban untuk beberapa kasus penggunaan.

Kebanyakan, lihat http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • Mulai Fiddler sebelum aplikasi Anda
  • Di aplikasi konsol, Anda mungkin tidak perlu menentukan proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • Dalam aplikasi web / sesuatu yang dihosting di IIS, Anda perlu menambahkan proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • Ketika .NET membuat permintaan (melalui klien layanan atau HttpWebRequest, dll), itu akan selalu melewati proxy Fiddler untuk URL yang berisi localhost, jadi Anda harus menggunakan alias seperti nama mesin atau membuat sesuatu di file 'host' Anda (itulah sebabnya sesuatu seperti localhost.fiddleratau http://HOSTNAMEkarya)
  • Jika Anda menetapkannya proxyaddress, Anda harus menghapusnya dari konfigurasi Anda jika Fiddler tidak aktif, atau permintaan apa pun yang dibuat aplikasi Anda akan memunculkan pengecualian seperti:

    Tidak ada koneksi yang dapat dibuat karena mesin target secara aktif menolaknya 127.0.0.1:8888

  • Jangan lupa untuk menggunakan transformasi konfigurasi untuk menghapus bagian proxy dalam produksi
drzaus
sumber
4

Sederhananya, yang Anda butuhkan hanyalah mengubah alamat di klien konfigurasi: alih-alih 'localhost' ubah ke nama mesin atau IP

Ziv.Ti
sumber
1

Ini mudah jika Anda memiliki kendali atas klien yang mengirimkan komunikasi. Yang perlu Anda lakukan hanyalah menyetel HttpProxy pada kelas layanan sisi klien.

Saya melakukan ini, misalnya, untuk melacak klien layanan web yang berjalan di ponsel cerdas. Saya mengatur proxy pada koneksi sisi klien ke IP / port Fiddler, yang berjalan pada PC di jaringan. Aplikasi smartphone kemudian mengirimkan semua komunikasi keluarnya ke layanan web, melalui Fiddler.

Ini bekerja dengan sempurna.

Jika klien Anda adalah klien WCF, lihat T&J ini untuk mengetahui cara menyetel proxy.

Meskipun Anda tidak memiliki kemampuan untuk mengubah kode aplikasi sisi klien, Anda mungkin dapat menyetel proxy secara administratif, bergantung pada tumpukan layanan web yang digunakan klien Anda.

Cheeso
sumber
1

Pelacakan / Diagnostik WCF Standar

Jika karena alasan tertentu Anda tidak dapat mengaktifkan Fiddler, atau lebih suka mencatat permintaan dengan cara lain, opsi lain adalah menggunakan fungsionalitas pelacakan WCF standar. Ini akan menghasilkan file yang memiliki penampil yang bagus.

Docs

Lihat https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/tracing-and-message-logging

Konfigurasi

Tambahkan yang berikut ini ke konfigurasi Anda, pastikan c:\logsada, buat ulang, dan buat permintaan:

  <system.serviceModel>
    <diagnostics>
      <!-- Enable Message Logging here. -->
      <!-- log all messages received or sent at the transport or service model levels -->
      <messageLogging logEntireMessage="true"
                      maxMessagesToLog="300"
                      logMessagesAtServiceLevel="true"
                      logMalformedMessages="true"
                      logMessagesAtTransportLevel="true" />
    </diagnostics>
  </system.serviceModel>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information,ActivityTracing"
        propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\logs\TracingAndLogging-client.svclog" type="System.Diagnostics.XmlWriterTraceListener"
        name="xml" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>
Seth Flowers
sumber
0

Saya telah menggunakan alat hiu kawat untuk memantau panggilan layanan dari aplikasi lampu perak di browser ke layanan. coba link berikan info yang jelas

Ini memungkinkan Anda untuk memantau seluruh permintaan dan tanggapan konten.

DiAgo
sumber
0

Saya baru saja mencoba jawaban pertama dari Brad Rem dan sampai pada pengaturan ini di web.config di bawah BasicHttpBinding:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding bypassProxyOnLocal="False" useDefaultWebProxy="false" proxyAddress="http://127.0.0.1:8888" ...
        ...
      </basicHttpBinding>
    </bindings>
    ...
<system.serviceModel>

Semoga ini bisa membantu seseorang.

Remko Roodselaar
sumber
0

Anda dapat menggunakan HTTP Debugger versi Gratis.

Ini bukan proxy dan Anda tidak perlu melakukan perubahan apa pun di web.config.

Juga, ini bisa menunjukkan keduanya; permintaan HTTP masuk dan keluar. HTTP Debugger Gratis

Khachatur
sumber