Fiddler를 사용하여 WCF 서비스를 모니터링하는 방법


107

복잡한 형식을 받아들이고 일부 데이터를 반환하는 WCF 서비스가 있습니다. Fiddler를 사용하여 서비스에 대한 수신 요청이 어떻게 보이는지 확인하고 싶습니다. 클라이언트는 서비스 참조 프록시를 사용하는 .net 콘솔 앱입니다. Fiddler로 가능합니까? 저는이 도구를 처음 사용했으며 이전에는 요청 작성기를 사용하여 데이터를 게시하는 데만 사용했습니다.


4
WCF 추적 서비스는보기에 좋은 GUI를 포함하여 그 자체로 꽤 좋습니다. msdn.microsoft.com/en-us/library/ms751526.aspx
kenny 2011 년

답변:


148

web.config에 이것을 추가해야합니다.

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. 그런 다음 WEBSERVER 시스템에서 Fiddler를 시작하십시오.
  2. 도구 | Fiddler 옵션 => 연결 => 포트를 8888로 조정 (필요한 경우 원격 허용)
  3. 좋아, 그런 다음 파일 메뉴에서 트래픽을 캡처하십시오.

그게 다입니다.하지만 피들러를 닫은 후 web.config 줄을 제거하는 것을 잊지 마십시오. 그렇지 않으면 오류가 발생하기 때문입니다.

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


1
감사합니다. 정말 도움이되었습니다. 내 실수는 http://프록시 주소 를 지정하지 않은 것 입니다. 당신이 언급했듯이 나머지는 모두 동일했습니다.
Johnny_D 2013-08-29

1
이것은 나를 위해 작동하지 않았습니다. 내 상황은 : 서버는 IIS7.5이고 클라이언트는 콘솔 응용 프로그램입니다. 내 콘솔 앱에서 개발 컴퓨터의 IIS7.5에 배포되는 WebService 메서드를 호출했습니다. "localhost"를 내 컴퓨터 이름이 나를 위해 일했습니다.
뉴욕

5
고마워요. 그건 그렇고, 제 경우에는 localhost 에서 WCF 클라이언트 트래픽을 캡처하려고 했기 때문에 설정을 추가하는 것 외에도 URL을 다음에서 변경해야 http://localhost/abc.svc했습니다http://HOSTNAME/abc.svc
cateyes 2014-08-21

1
어떤 이유로 나를 위해 작동하지 않았습니다 (.svc 웹 서비스를 사용하고 있습니다). 결국 내 해결 방법은 창에 캐처 를 사용하는 것이 었습니다
ren

2
대박! @cateyes의 제안은 나를 위해 그것을 한
알렉산더 Derck에게

9

Fiddler는 인바운드 요청이 아닌 아웃 바운드 요청을 수신하므로 Fiddler를 사용하여 서비스로 들어오는 모든 요청을 모니터링 할 수 없습니다.

Fiddler로 얻을 수있는 가장 좋은 점은 콘솔 앱에서 생성 된 모든 요청을 볼 수 있다는 것입니다 (앱이 다른 파이프 라인을 사용하는 대신 웹 요청을 생성한다고 가정).

들어오는 모든 요청을 모니터링 할 수있는 더 강력하지만 사용하기 어려운 도구를 원한다면 WireShark를 확인해야합니다.

편집하다

나는 바로 잡았다. Fiddler를 역방향 프록시구성 하는 지침을 게시 한 Eric Law에게 감사드립니다 !


정보 주셔서 감사합니다. asmx 서비스에 대한 설명 페이지와 유사한 요청 구조를 확인해야합니다. WCF에는이 옵션이없는 것 같습니다.
Quadwwchs 2011 년

9
이는 정확하지 않습니다 (WireShark는 트래픽을 변경할 수 없기 때문에 "파워"는 주관적입니다). 인바운드 트래픽을 수신하는 방법에 대한 자세한 내용 은 fiddler2.com/fiddler/help/reverseproxy.asp 를 참조하십시오.
EricLaw 2011 년

에릭-독립형 답변으로 말씀 드리는 것이 좋습니다.
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등을 통해 요청을 할 때 항상을 포함하는 URL에 대해 Fiddler 프록시를 우회 localhost하므로 시스템 이름과 같은 별칭을 사용하거나 '호스트'파일에서 무언가를 구성해야합니다. 같은 localhost.fiddler또는 http://HOSTNAME작동)
  • 을 지정하는 proxyaddress경우 Fiddler가 켜져 있지 않으면 구성에서 제거해야합니다. 그렇지 않으면 앱에서 수행하는 모든 요청에서 다음과 같은 예외가 발생합니다.

    대상 컴퓨터가 적극적으로 거부했기 때문에 연결할 수 없습니다. 127.0.0.1:8888

  • 구성 변환 을 사용 하여 프로덕션에서 프록시 섹션을 제거하는 것을 잊지 마십시오.

4

간단하고 필요한 것은 구성 클라이언트에서 주소를 변경하는 것입니다. 'localhost'대신 시스템 이름 또는 IP로 변경하십시오.


1

통신을 보내는 클라이언트를 제어 할 수있는 경우 이것은 간단합니다. 클라이언트 측 서비스 클래스에 HttpProxy를 설정하기 만하면됩니다.

예를 들어 스마트 폰에서 실행되는 웹 서비스 클라이언트를 추적하기 위해이 작업을 수행했습니다. 클라이언트 측 연결에서 네트워크상의 PC에서 실행중인 Fiddler의 IP / 포트에 프록시를 설정했습니다. 그런 다음 스마트 폰 앱은 Fiddler를 통해 모든 발신 통신을 웹 서비스로 보냈습니다.

이것은 완벽하게 작동했습니다.

클라이언트가 WCF 클라이언트 인 경우 프록시 설정 방법 은 이 Q & A 를 참조 하세요 .

클라이언트 측 앱의 코드를 수정할 수있는 권한이 없더라도 클라이언트가 사용하는 웹 서비스 스택에 따라 관리적으로 프록시를 설정할 수 있습니다.


1

표준 WCF 추적 / 진단

어떤 이유로 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

브라우저의 실버 라이트 앱에서 서비스까지의 서비스 호출을 모니터링하기 위해 와이어 샤크 도구를 사용했습니다. 은 try 링크하는 것은 명확한 정보를 제공합니다

전체 요청 및 응답 내용을 모니터링 할 수 있습니다.


0

방금 Brad Rem의 첫 번째 답변을 시도하고 BasicHttpBinding 아래의 web.config에서이 설정에 도달했습니다.

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

이것이 누군가를 돕기를 바랍니다.


0

HTTP 디버거의 무료 버전을 사용할 수 있습니다.

프록시가 아니므로 web.config를 변경할 필요가 없습니다.

또한 둘 다 표시 할 수 있습니다. 수신 및 발신 HTTP 요청. HTTP 디버거 무료

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.