วิธีใช้ Fiddler เพื่อตรวจสอบบริการ WCF


107

ฉันมีบริการ WCF ที่ยอมรับประเภทที่ซับซ้อนและส่งคืนข้อมูลบางส่วน ฉันต้องการใช้ Fiddler เพื่อดูว่าคำขอที่เข้ามาของบริการมีลักษณะอย่างไร ไคลเอนต์คือแอปคอนโซล. net ซึ่งใช้พร็อกซีอ้างอิงบริการ เป็นไปได้ไหมกับ Fiddler ฉันเพิ่งเคยใช้เครื่องมือนี้และเคยใช้เครื่องมือนี้เพื่อโพสต์ข้อมูลกับตัวสร้างคำขอเท่านั้น


4
บริการติดตาม WCF นั้นค่อนข้างดีในตัวเองรวมถึง GUI ที่ดีสำหรับการดู msdn.microsoft.com/en-us/library/ms751526.aspx
kenny

คำตอบ:


148

คุณต้องเพิ่มสิ่งนี้ใน web.config ของคุณ

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. จากนั้นเริ่ม Fiddler บนเครื่อง WEBSERVER
  2. คลิกเครื่องมือ | Fiddler Options => Connections => ปรับพอร์ตเป็น 8888 (อนุญาตให้ใช้รีโมตได้หากคุณต้องการ)
  3. ตกลงจากเมนูไฟล์จับการเข้าชม

นั่นคือทั้งหมด แต่อย่าลืมลบบรรทัด web.config หลังจากปิด fiddler เพราะถ้าคุณไม่ทำจะทำให้เกิดข้อผิดพลาด

อ้างอิง: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy


1
ขอบคุณจริงๆที่ช่วยฉันด้วย ข้อผิดพลาดของฉันไม่ได้ระบุhttp://ในที่อยู่พร็อกซี ส่วนที่เหลือทั้งหมดเหมือนกันตามที่คุณได้กล่าวไว้
Johnny_D

1
สิ่งนี้ไม่ได้ผลสำหรับฉันสถานการณ์ของฉันคือ: เซิร์ฟเวอร์คือ IIS7.5 ไคลเอนต์เป็นแอปพลิเคชันคอนโซลในแอปคอนโซลของฉันฉันเรียกวิธี WebService ซึ่งปรับใช้บน IIS7.5 บนคอมพิวเตอร์ที่กำลังพัฒนาของฉันแทนที่ "localhost" ด้วย ชื่อคอมพิวเตอร์ของฉันใช้ได้กับฉัน
york

5
ขอบคุณมันได้ผลสำหรับฉัน อย่างไรก็ตามในกรณีของฉันฉันพยายามจับการรับส่งข้อมูลไคลเอนต์ WCF บนlocalhostดังนั้นนอกเหนือจากการเพิ่มการตั้งค่าของคุณแล้วยังต้องเปลี่ยน URL จากhttp://localhost/abc.svcเป็นhttp://HOSTNAME/abc.svc
cateyes

1
ด้วยเหตุผลบางอย่างไม่ได้ผลสำหรับฉัน (ฉันใช้บริการเว็บ. svc) ในที่สุดวิธีแก้ปัญหาของฉันคือใช้catcherสำหรับ windows
ren

2
สุดยอด! คำแนะนำของ @cateyes ทำเพื่อฉัน
Alexander Derck

9

Fiddler รับฟังคำขอขาออกมากกว่าคำขอขาเข้าดังนั้นคุณจะไม่สามารถตรวจสอบคำขอทั้งหมดที่เข้ามาในบริการของคุณได้โดยใช้ Fiddler

สิ่งที่ดีที่สุดที่คุณจะได้รับจาก Fiddler คือความสามารถในการดูคำขอทั้งหมดที่สร้างขึ้นโดยแอปคอนโซลของคุณ (สมมติว่าแอปสร้างคำขอทางเว็บแทนที่จะใช้ไปป์ไลน์อื่น ๆ )

หากคุณต้องการเครื่องมือที่มีประสิทธิภาพมากขึ้น (แต่ใช้งานยากกว่า) ที่จะช่วยให้คุณตรวจสอบคำขอที่เข้ามาทั้งหมดได้คุณควรตรวจสอบ WireShark

แก้ไข

ฉันยืนแก้ไข ขอบคุณ Eric Law ที่โพสต์คำแนะนำในการกำหนดค่า Fiddler ให้เป็น reverse proxy !


ขอบคุณสำหรับข้อมูล. ฉันต้องการดูโครงสร้างคำขอที่คล้ายกับหน้าคำอธิบายสำหรับบริการ asmx ดูเหมือนว่า WCF จะไม่มีตัวเลือกนี้
Quadwwchs

9
นั่นไม่ถูกต้องนัก (และ "กำลัง" เป็นเรื่องส่วนตัวเนื่องจาก WireShark ไม่สามารถเปลี่ยนการรับส่งข้อมูลได้) ดูfiddler2.com/fiddler/help/reverseproxy.aspสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีรับฟังการจราจรขาเข้า
EricLaw

Eric - ฉันขอแนะนำให้คุณระบุด้วยคำตอบแบบสแตนด์อโลน
Cheeso

9

เพิ่งมีปัญหานี้สิ่งที่ใช้ได้ผลสำหรับฉันคือใช้ localhost.fiddler:

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

6

การรวมคำเตือนที่กล่าวถึงในความคิดเห็น / คำตอบสำหรับกรณีการใช้งานหลาย ๆ

ส่วนใหญ่โปรดดูhttp://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • เริ่ม Fiddler ก่อนแอปของคุณ
  • ในแอปคอนโซลคุณอาจไม่จำเป็นต้องระบุproxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • ในเว็บแอปพลิเคชัน / บางสิ่งที่โฮสต์ใน IIS คุณต้องเพิ่มproxyaddress:

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • เมื่อ. NET ส่งคำขอ (ผ่านไคลเอนต์บริการหรือHttpWebRequestฯลฯ ) มันจะข้ามพร็อกซีของ Fiddler สำหรับ URL ที่มีอยู่localhostเสมอดังนั้นคุณต้องใช้นามแฝงเช่นชื่อเครื่องหรือสร้างบางสิ่งในไฟล์ 'โฮสต์' ของคุณ (ซึ่งเป็นสาเหตุ สิ่งที่ชอบlocalhost.fiddlerหรือใช้http://HOSTNAMEงานได้)
  • หากคุณระบุproxyaddressคุณต้องลบออกจากการกำหนดค่าของคุณหากไม่ได้เปิด Fiddler มิฉะนั้นคำขอใด ๆ ที่แอปของคุณสร้างขึ้นจะทำให้เกิดข้อยกเว้นเช่น:

    ไม่สามารถทำการเชื่อมต่อได้เนื่องจากเครื่องเป้าหมายปฏิเสธอย่างแข็งขัน 127.0.0.1:8888

  • อย่าลืมใช้การแปลงการกำหนดค่าเพื่อลบส่วนพร็อกซีในการผลิต

4

ง่ายมากเพียงคุณเปลี่ยนที่อยู่ในไคลเอนต์ config: แทนที่จะเปลี่ยน 'localhost' เป็นชื่อเครื่องหรือ IP


1

ตรงไปตรงมาหากคุณมีอำนาจควบคุมไคลเอนต์ที่กำลังส่งการสื่อสาร สิ่งที่คุณต้องทำคือตั้งค่า HttpProxy บนคลาสเซอร์วิสฝั่งไคลเอ็นต์

ตัวอย่างเช่นฉันทำสิ่งนี้เพื่อติดตามไคลเอนต์บริการเว็บที่ทำงานบนสมาร์ทโฟน ฉันตั้งค่าพร็อกซีในการเชื่อมต่อฝั่งไคลเอ็นต์กับ IP / พอร์ตของ Fiddler ซึ่งทำงานบนพีซีบนเครือข่าย จากนั้นแอปสมาร์ทโฟนจะส่งการสื่อสารขาออกทั้งหมดไปยังบริการเว็บผ่าน Fiddler

สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ

หากลูกค้าของคุณเป็นไคลเอนต์ WCF โปรดดูถาม & ตอบนี้สำหรับวิธีตั้งค่าพร็อกซี

แม้ว่าคุณจะไม่มีความสามารถในการแก้ไขโค้ดของแอปฝั่งไคลเอ็นต์คุณอาจสามารถตั้งค่าพร็อกซีในระดับผู้ดูแลระบบได้ทั้งนี้ขึ้นอยู่กับบริการเว็บสแต็กที่ไคลเอนต์ของคุณใช้


1

มาตรฐาน WCF Tracing / Diagnostics

หากด้วยเหตุผลบางประการคุณไม่สามารถทำให้ Fiddler ทำงานได้หรือต้องการบันทึกคำขอด้วยวิธีอื่นอีกทางเลือกหนึ่งคือใช้ฟังก์ชันการติดตาม WCF มาตรฐาน สิ่งนี้จะสร้างไฟล์ที่มีโปรแกรมดูที่ดี

เอกสาร

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

การกำหนดค่า

เพิ่มสิ่งต่อไปนี้ในการกำหนดค่าของคุณตรวจสอบให้แน่ใจว่าc:\logsมีอยู่สร้างใหม่และร้องขอ:

  <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

ฉันใช้เครื่องมือ wire shark เพื่อตรวจสอบการเรียกใช้บริการจากแอพแสงสีเงินในเบราว์เซอร์ไปจนถึงบริการ ลองลิงค์ให้ข้อมูลที่ชัดเจน

ช่วยให้คุณสามารถตรวจสอบคำขอและเนื้อหาการตอบกลับทั้งหมด


0

ฉันเพิ่งลองคำตอบแรกจาก Brad Rem และมาที่การตั้งค่านี้ใน web.config ภายใต้ BasicHttpBinding:

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

หวังว่านี่จะช่วยใครบางคนได้


0

คุณสามารถใช้ HTTP Debugger เวอร์ชันฟรี

ไม่ใช่พร็อกซีและคุณไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ ใน web.config

นอกจากนี้ยังสามารถแสดงทั้งสองอย่าง คำขอ HTTP ขาเข้าและขาออก HTTP Debugger ฟรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.