Fiddlerを使用してWCFサービスを監視する方法


107

複合型を受け入れて一部のデータを返すWCFサービスがあります。Fiddlerを使用して、サービスへの着信要求がどのように見えるかを確認したいと思います。クライアントは、サービス参照プロキシを使用する.netコンソールアプリです。これはフィドラーで可能ですか?私はこのツールを初めて使用し、過去にこのツールを使用してリクエストビルダーでデータを送信しただけです。


4
WCFトレースサービスは、それを表示するための優れたGUIを含め、それ自体でかなり優れています。msdn.microsoft.com/en-us/library/ms751526.aspx
ケニー

回答:


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

1
これは私にとってはうまくいきませんでした。私の状況は次のとおりです。サーバーはIIS7.5、クライアントはコンソールアプリケーションです。コンソールアプリでは、開発コンピューターのIIS7.5に展開されているWebServiceメソッドを呼び出しました。「localhost」を私のコンピューター名がうまくいきました。
ニューヨークの2014年

5
おかげで、うまくいきました。ちなみに、私の場合、私は上のWCFクライアントトラフィックをキャプチャしようとしたlocalhostのように離れてあなたの設定を追加することから、それはまたのURLを変更するために必要な、http://localhost/abc.svchttp://HOSTNAME/abc.svc
cateyes

1
何らかの理由で動作しませんでした(私は.svc Webサービスを使用しています)。最終的に私の回避策は、ウィンドウにキャッチャーを使用することでした
ren

2
驚くばかり!@cateyesの提案でうまくいきました
Alexander Derck

9

Fiddlerはインバウンドリクエストではなくアウトバウンドリクエストをリッスンするため、Fiddlerを使用してサービスに着信するすべてのリクエストを監視することはできません。

Fiddlerで得られる最高の機能は、コンソールアプリによって生成されたすべてのリクエストを確認できることです(他のパイプラインを使用するのではなく、アプリがWebリクエストを生成するとします)。

すべての着信要求を監視できる、より強力な(しかし、より使いにくい)ツールが必要な場合は、WireSharkをチェックしてください。

編集する

私は修正された立場です。Fiddlerをリバースプロキシとして構成するための指示を投稿してくれたEric Lawに感謝します


情報をありがとう。asmxサービスの説明ページと同様のリクエスト構造を表示する必要があります。WCFにはこのオプションがないようです。
Quadwwchs、2011年

9
これは正確ではありません(Wiresharkはトラフィックを変更できないため、「パワー」は主観的です)。参照してくださいfiddler2.com/fiddler/help/reverseproxy.aspインバウンドトラフィックを聞く方法の詳細については。
EricLaw、2011年

エリック-スタンドアロンの回答でそれを述べることをお勧めします。
Cheeso、2011年

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でホストされているWebアプリケーション/何かでは、追加する必要がありますproxyaddress

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • .NETが(サービスクライアントなどを介して)要求を行うと、HttpWebRequest常にを含むURLのFiddlerプロキシをバイパスするlocalhostため、マシン名などのエイリアスを使用するか、「hosts」ファイルに何かを作成する必要があります(これが理由です)のようなものlocalhost.fiddlerhttp://HOSTNAME作品)
  • を指定したproxyaddress場合、Fiddlerがオンになっていない場合は、設定から削除する必要があります。そうしないと、アプリからのリクエストによって次のような例外がスローされます。

    ターゲットマシンがアクティブに拒否したため、接続を確立できませんでした127.0.0.1:8888

  • 構成変換を使用して、本番環境のプロキシセクションを削除することを忘れないでください。

4

とてもシンプルで、必要なのは、構成クライアントのアドレスを変更することだけです。「localhost」の代わりに、マシン名またはIPに変更します。


1

通信を送信しているクライアントを制御できる場合、これは簡単です。クライアント側のサービスクラスにHttpProxyを設定するだけです。

たとえば、スマートフォンで実行されているWebサービスクライアントを追跡するためにこれを行いました。クライアント側の接続で、ネットワーク上のPCで実行されているFiddlerのIP /ポートにプロキシを設定しました。その後、スマートフォンアプリは、すべての発信通信をFiddlerを介してWebサービスに送信しました。

これは完全に機能しました。

クライアントがWCFクライアントの場合、プロキシの設定方法については、このQ&Aを参照してください。

クライアント側アプリのコードを変更する機能がない場合でも、クライアントが使用するWebサービススタックによっては、管理上プロキシを設定できる場合があります。


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

ブラウザのSilver Lightアプリからサービスへのサービスコールを監視するためにWire Sharkツールを使用しました。リンクを試すと明確な情報が得られます

リクエストとレスポンスの内容全体を監視できます。


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.