web-dev-qa-db-ja.com

WCF-送受信されるメッセージを検査しますか?

2つのソリューションがあります。-サーバーソリューション-クライアントソリューション

サーバーは自分のローカルホストIISに自身を登録します。 http:// localhost/MyApp /

クライアントは、localhostアプリケーションからWCFサービス(サービス参照)を追加します。 http://localhost/MyApp/MyService.svc

クライアントを実行しているときに、やり取りされるメッセージを確認できるようにします。 Fiddlerをダウンロードしましたが、実際にWebブラウザーを使用しない限り、送信されているトラフィックを表示したくないようです。私はFiddlerを間違って使用していますか、これに使用する必要がある別のツールがありますか?


明確にするために、私がやろうとしているのは、渡される実際のメッセージを見ることです。自分の目で視覚的に見ること以外は何もしたくありません。

WCF Service Log Utilityは好きですが、そこに正しい設定があるとは思いません。メッセージが受信されたというだけで、実際のSOAPメッセージは表示されません。

また、さらに明確にするために、メッセージ自体を簡単に確認できる限り、どのツールを使用してもかまいません。

38
michael

メッセージの内容を表示するには、構成ファイルにSystem.ServiceModel.MessageLoggingのソースを追加する必要があります。トレースビューアのメッセージタブには、特定のサービスコールの完全なメッセージが表示されます。

サンプル構成ファイルを次に示します。

<configuration>

...

   <system.diagnostics>
      <sources>
         <source name="System.ServiceModel"
                      switchValue="All"
                      propagateActivity="true">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
         <source name="System.ServiceModel.MessageLogging"
                      switchValue="All">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
      </sources>
      <sharedListeners>
         <add name="traceListener"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\Traces.svclog" />
      </sharedListeners>
   </system.diagnostics>

   <system.serviceModel>
   <diagnostics>
      <messageLogging logEntireMessage="true"
                                  logMalformedMessages="true"
                                  logMessagesAtServiceLevel="true"
                                  logMessagesAtTransportLevel="true"
                                  maxMessagesToLog="500"/>
   </diagnostics>

...

</system.serviceModel>

...

</configuration>

詳細については、MSDNのトレースの構成トピックを参照してください。 http://msdn.Microsoft.com/en-us/library/ms733025.aspx

40
Trevor

何か足りないかもしれませんが、... WCFトレース機能を使用しないのはなぜですか?素晴らしいトラブルシューティングツールです。 IIS/WASでホストされるサービスにも使用しました。

WCFトレースを有効にする

ところで、一部の人はそれを知りませんが、サーバー側とクライアント側から同時にトレースを開くことができ、ビューアはサーバーとクライアントのアクション間の相関関係を素敵なグラフで表示します。

編集:TCP/IPトラフィックをキャプチャする必要があるときはいつでも、 WireShark を使用します。プログラムで実行する必要がある場合は、 SharpPCAP を使用できます。そのため、ネットワークからキャプチャしたものに対してアクションを実行できます。ただし、トラブルシューティングには、WCFトレースを使用する方がはるかに優れています。

14
Haplo

プログラムでメッセージを検査する場合は、 実装IClientMessageInspectorインターフェイス を使用してクライアントに登録できます。

これにより、使用しているバインディングに関係なく、すべてのメッセージにアクセスできます。一方、 Fiddlerなどのツールを使用 では、HTTPトランスポートチャネルを使用したメッセージのみを検査できます。

この手法を使用すると、実際にメッセージを大幅に変更したり、さらに多くのことを実行したりできることに注意してください(たとえば、通知を起動します)。メッセージに目を向けるだけなら、 トレースを使用 がより簡単なアプローチかもしれません。

5
casperOne

サービスはSOAPまたはRESTfulですか? WCF Service Trace Viewer Tool を使用して、SOAP=メッセージヘッダーと本文を表示できます。トレース用にWebサービスを構成する手順は、 こちら です。

1
retrodrone

このStackOverflowスレッドを見てください: Fiddlerを使用してWCFサービスを監視する方法

いくつかの質問に答えます。 Fiddlerのようにプロキシを設定するのではなく、ワイヤ上のすべてを調べる場合は、WireSharkなどを使用することもできます。

0

WCFでは、別の方法で実際のSOAP=メッセージ- カスタムMessageEncoder -低レベルのパイプライン拡張ポイントを確認できます。メッセージインスペクター(IDispatchMessageInspector/IClientMessageInspector)とは異なります)不正な形式のXMLデータを含む元のバイトコンテンツ標準の textMessageEncoding as custom binding element をラップし、そのカスタムバインディングを使用するように config ファイルを調整する必要があります。

また、プロジェクトでどのようにそれを行ったかを例として見ることができます- wrapping textMessageEncoding、ロギング encoder 、カスタムバインディング element および config

0
baur