2

着信要求を WCF サービスに記録する方法はありますか?

Windows サービスとしてホストされている単純な WCF サービスがあります。WCF サービスは、毎日ログを書き込みます。時々悪いリクエストが来て、私もログインしたいと思います。

入ってくる SOAP リクエストをログに記録する方法はありますか? そうすれば、クライアントが犯している間違いを示すのに役立ちます。

よろしく。

4

3 に答える 3

2

IServiceBehaviorおよびIParameterInspectorロギングを処理するクラスを実装してみることができます。

IServiceBehavior
ApplyDispatchBehavior、実装する最も重要なメソッドです。

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
        {
            foreach (var endpoint in dispatcher.Endpoints)
            {
                foreach (var dispatchOperation in endpoint.DispatchRuntime.Operations)
                {
                    dispatchOperation.ParameterInspectors.Add(new LoggingParameterInspector(/*reference to your logger*/));
                }
            }
        }
    }

これをサービス実装クラスにするか、起動時に定義に追加することで、これServiceBehaviorをサービスに適用する必要があります。Attribute

IParameterInspector
このインターフェイスには、 と の 2 つのメソッドがBeforeCallありAfterCallます。これらのメソッドの実装では、操作名とメソッドに与えられた入力にアクセスできます。これにより、サービスへのすべての呼び出しのクリーンでシンプルなトレースを作成できます。

SOAP メッセージの内容を正確にログに記録する方法はわかりませんが、特に時間指定ログを実装している場合は、この方法で多くの追加情報を得ることができます。

于 2013-01-25T08:54:58.333 に答える
1

サービスの構成ファイルでトレースとトレースのレベルを構成できます。ログファイルを表示するために、Microsoftは特別なトレースログビューアを提供しています。通常、トレースファイルをダブルクリックするだけで、このビューアで開くことができます。

これは、SOで何度も回答されています。たとえば、WCFトレースをオンにする方法は?

MSDNのドキュメント http://msdn.microsoft.com/en-us/library/ms733025.aspx

サンプル構成

<configuration>
  <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>
      <source name="myUserTraceSource"
              switchValue="Information, ActivityTracing">
        <listeners>
            <add name="xml"/>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
        <add name="xml"
             type="System.Diagnostics.XmlWriterTraceListener"
             initializeData="Error.svclog" />
    </sharedListeners>
  </system.diagnostics>
</configuration>
于 2013-01-25T09:00:54.510 に答える