WCF hizmetini izlemek için Fiddler nasıl kullanılır?


107

Karmaşık bir türü kabul eden ve bazı verileri döndüren bir WCF hizmetim var. Hizmete gelen isteklerin neye benzediğini görmek için Fiddler'ı kullanmak istiyorum. İstemci, bir Hizmet başvurusu proxy'si kullanan .net konsol uygulamasıdır. Bu Fiddler ile mümkün mü? Bu araçta yeniyim ve geçmişte yalnızca istek oluşturucu ile veri göndermek için kullandım.


4
WCF izleme hizmetleri, onları görüntülemek için güzel bir GUI dahil olmak üzere kendi başlarına oldukça iyidir. msdn.microsoft.com/en-us/library/ms751526.aspx
kenny

Yanıtlar:


148

Bunu web.config dosyanıza eklemeniz gerekiyor

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. ardından WEBSERVER makinesinde Fiddler'ı başlatın.
  2. Araçlar'ı tıklayın | Fiddler Seçenekleri => Bağlantılar => bağlantı noktasını 8888 olarak ayarlayın. (İhtiyacınız varsa uzaktan kumandaya izin verin)
  3. Tamam, sonra dosya menüsünden trafiği yakalayın.

Hepsi bu, ancak kemancıyı kapattıktan sonra web.config satırlarını kaldırmayı unutmayın, çünkü kapatmazsanız bir hata yapacaktır.

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


1
Teşekkürler, bu da bana gerçekten yardımcı oldu. Hatam http://vekil adresinde belirtmemek oldu. Bahsettiğiniz gibi, geri kalan her şey aynıydı.
Johnny_D

1
Bu benim için işe yaramadı. Benim durumum: sunucu IIS7.5, istemci bir konsol uygulaması. Konsol uygulamamda, geliştirme bilgisayarımda IIS7.5'te dağıtılan bir WebService yöntemini çağırdım. "Localhost" u ile değiştiriyorum bilgisayar adım benim için çalıştı.
york

5
Teşekkürler, benim için çalıştı. Bu arada, benim durumumda ben yakalama WCF istemci trafiği çalıştı localhost yüzden ayrı ayarlarınızı eklemesini, o da URL'yi değiştirmek için gereken, http://localhost/abc.svciçinhttp://HOSTNAME/abc.svc
kedi gözleri

1
Nedense benim için çalışmadı (.svc web servisini kullanıyorum). Sonunda benim çözümüm windows için catcher kullanmak oldu
ren

2
Harika! @Cateyes'in önerisi benim için yaptı
Alexander Derck

9

Fiddler, gelen istekler yerine giden istekleri dinler, böylece hizmetinize gelen tüm istekleri Fiddler'ı kullanarak izleyemezsiniz.

Fiddler ile elde edeceğiniz en iyi şey, tüm istekleri Konsol Uygulamanız tarafından oluşturuldukları anda görme yeteneğidir (uygulamanın başka bir ardışık düzen kullanmak yerine web istekleri oluşturduğunu varsayarsak).

TÜM gelen istekleri izlemenize izin verecek daha güçlü (ancak kullanımı daha zor) bir araç istiyorsanız, WireShark'a göz atmalısınız.

Düzenle

Düzeltilmiş durumdayım. Eric Law'a, Fiddler'ı ters vekil sunucu olarak yapılandırma talimatlarını yayınladığı için teşekkürler !


Bilgi için teşekkürler. Asmx hizmetleri için açıklama sayfasına benzer istek yapısını görüntülemem gerekiyor. WCF'de bu seçenek görünmüyor.
Quadwwchs

9
Bu tam olarak doğru değildir (ve "güç" özneldir, çünkü WireShark trafiği değiştiremez). Gelen trafiği nasıl dinleyeceğiniz hakkında daha fazla ayrıntı için fiddler2.com/fiddler/help/reverseproxy.asp sayfasına bakın .
EricLaw

Eric - Bunu bağımsız bir cevapta belirtmeni öneririm.
Cheeso

9

Sadece bu problemi yaşadım, benim için işe yarayan şey localhost.fiddler'ı kullanmaktı:

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

6

Çeşitli kullanım durumları için yorumlarda / yanıtlarda belirtilen uyarıları birleştirmek.

Çoğunlukla bkz. Http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • Uygulamanızdan önce Fiddler'ı başlatın
  • Bir konsol uygulamasında şunları belirtmeniz gerekmeyebilir proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • Bir web uygulamasında / IIS'de barındırılan bir şeyde şunları eklemeniz gerekir proxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • .NET bir talepte bulunduğunda (bir hizmet istemcisi veya HttpWebRequestvb. Aracılığıyla ) localhost, içeren URL'ler için her zaman Fiddler proxy'sini atlar , bu nedenle makine adı gibi bir takma ad kullanmanız veya 'hosts' dosyanızda bir şey oluşturmanız gerekir (bu nedenle gibi localhost.fiddlerveya http://HOSTNAMEçalışıyor)
  • Öğesini belirtirseniz, proxyaddressFiddler açık değilse yapılandırmanızdan kaldırmanız gerekir veya uygulamanızın yaptığı herhangi bir istek aşağıdaki gibi bir istisna atar:

    Hedef makine aktif olarak reddettiği için bağlantı kurulamadı 127.0.0.1:8888

  • Üretimde proxy bölümünü kaldırmak için yapılandırma dönüşümlerini kullanmayı unutmayın

4

Çok basit, ihtiyacınız olan tek şey yapılandırma istemcisindeki adresi değiştirmek: 'localhost' yerine makine adı veya IP'yi değiştirin


1

İletişimi gönderen müşteri üzerinde kontrole sahipseniz, bu basittir. Tek yapmanız gereken, istemci tarafı hizmet sınıfında HttpProxy'yi ayarlamaktır.

Bunu, örneğin bir akıllı telefonda çalışan bir web hizmeti istemcisini izlemek için yaptım. Bu istemci tarafı bağlantıdaki proxy'yi, ağdaki bir PC'de çalışan Fiddler'ın IP / bağlantı noktasına ayarladım. Akıllı telefon uygulaması daha sonra tüm giden iletişimini Fiddler aracılığıyla web hizmetine gönderdi.

Bu mükemmel çalıştı.

İstemciniz bir WCF istemcisiyse, proxy'yi nasıl ayarlayacağınızı öğrenmek için bu Soru ve Cevap'a bakın.

İstemci tarafındaki uygulamanın kodunu değiştirme olanağınız olmasa bile, istemcinizin kullandığı web hizmetleri yığınına bağlı olarak proxy'yi idari olarak ayarlayabilirsiniz.


1

Standart WCF İzleme / Teşhis

Herhangi bir nedenle Fiddler'ın çalışmasını sağlayamazsanız veya istekleri başka bir şekilde günlüğe kaydetmek isterseniz, başka bir seçenek de standart WCF izleme işlevini kullanmaktır. Bu, güzel bir görüntüleyiciye sahip bir dosya oluşturacaktır.

Dokümanlar

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

Yapılandırma

Aşağıdakileri yapılandırmanıza ekleyin, c:\logsvar olduğundan emin olun , yeniden oluşturun ve isteklerde bulunun:

  <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>

0

Tarayıcıdaki gümüş ışık uygulamasından servis çağrılarını izlemek için tel köpekbalığı aracını kullandım. bağlantıyı dene net bilgi verir

Tüm istek ve yanıt içeriklerini izlemenizi sağlar.


0

Brad Rem'den ilk cevabı denedim ve bu ayara web.config'de BasicHttpBinding altında geldim:

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

Umarım bu birine yardımcı olur.


0

HTTP Hata Ayıklayıcısının Ücretsiz sürümünü kullanabilirsiniz.

Bu bir proxy değildir ve web.config dosyasında herhangi bir değişiklik yapmanız gerekmez.

Ayrıca her ikisini de gösterebilir; gelen ve giden HTTP istekleri. HTTP Hata Ayıklayıcı Ücretsiz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.