web-dev-qa-db-ja.com

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

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

103
Quadwwchs

これを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. OK、次にファイルメニューからトラフィックをキャプチャします。

それだけですが、フィドラーを閉じた後にweb.config行を削除することを忘れないでください。そうしないとエラーが発生します。

リファレンス: http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

142
Tarek El-Mallah

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

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

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

編集

私は立ち直る。 Fiddlerをリバースプロキシとして設定する !への指示を投稿してくれたEric Lawに感謝します。

8
Justin Niessner

この問題が発生したとき、localhost.fiddlerを使用することでうまくいきました。

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

いくつかのユースケースのコメント/回答に記載されている警告を統合します。

ほとんどの場合、 http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp を参照してください

  • アプリの前にFiddlerを起動します
  • コンソールアプリでは、proxyaddressを指定する必要がない場合があります。

    <proxy bypassonlocal="False" usesystemdefault="True" />
    
  • Webアプリケーション/ IISでホストされているものでは、proxyaddressを追加する必要があります。

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

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

  • config transformations を使用して、本番環境のプロキシセクションを削除することを忘れないでください
6
drzaus

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

4
Ziv.Ti

標準のWCFトレース/診断

何らかの理由でFiddlerを動作させることができない場合、またはリクエストを別の方法で記録する場合、別のオプションは標準のWCFトレース機能を使用することです。これにより、Nice Viewerを持つファイルが作成されます。

ドキュメント

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>
1
Seth Flowers

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

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

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

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

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

1
Cheeso

ブラウザのシルバーライトアプリからサービスへのサービスコールを監視するためにWire sharkツールを使用しました。 link を試してください

これにより、要求と応答の内容全体を監視できます。

0
DiAgo

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