着信要求を WCF サービスに記録する方法はありますか?
Windows サービスとしてホストされている単純な WCF サービスがあります。WCF サービスは、毎日ログを書き込みます。時々悪いリクエストが来て、私もログインしたいと思います。
入ってくる SOAP リクエストをログに記録する方法はありますか? そうすれば、クライアントが犯している間違いを示すのに役立ちます。
よろしく。
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 メッセージの内容を正確にログに記録する方法はわかりませんが、特に時間指定ログを実装している場合は、この方法で多くの追加情報を得ることができます。
サービスの構成ファイルでトレースとトレースのレベルを構成できます。ログファイルを表示するために、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>