2010-11-29 8 views
0

WSDL URLからProxyクラスを生成しました。私はそれに要求を送ることができますが、私は送信されるXMLを記録する必要があります。それをどうやってやりますか?プロキシクラスがWebサービスに送信するXMLをどのようにログに記録するのですか?

+0

これは、クライアント側で発生しなければならない、またはサーバ側のログソリューションは、許容もあるのか? –

+0

私はサーバー側を管理していないので、クライアント側でなければなりません。おかげさまで –

答えて

1

私は、hereのようにIDispatchMessageInspectorを実装することでこのサーバー側を行っています。しかし、私は、IClientMessageInspectorインターフェイスを実装することで、クライアント側でも同じことができると信じています。

私が正しく覚えていれば、Message .ToString()メソッドは、あなたのログに直接入れることができるSOAPを返します。

しかし、私はがサーバー側のみであると信じていますが、ここではそれを言及しません。

Messageクラスは一度だけ読み込まれるように設計されています。ログを取るためにメッセージを傍受しているので、副作用としてそれをマークしないようにする必要があります。あなたはそのようにそれをクローンする必要があります。

public class ClientMessageLogger : IClientMessageInspector 
{ 
    public void AfterReceiveReply(
     ref System.ServiceModel.Channels.Message reply, object correlationState) 
    { 
     // Do nothing. 
    } 

    public object BeforeSendRequest(
     ref System.ServiceModel.Channels.Message request, IClientChannel channel) 
    { 
     // Create a buffer. 
     MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); 

     // Set the request reference to an unspoiled clone. 
     request = buffer.CreateMessage(); 

     // Make another unspoiled clone to process (taint) locally within this method. 
     Message originalMessage = buffer.CreateMessage(); 

     // Log the SOAP xml. 
     Log(originalMessage.ToString()); 

     return null; 
    } 
} 
+0

それが正しい軌道に乗った。 –

+0

@My Other Me - ちょっと好奇心が強いのですが、それはクライアント側の問題でしたか?そうでない場合は、私の答えから削除します。 – sheikhjabootie

1

また、あなたはWCFを使用していない場合には、SOAPのロギングをオンにすることができます。

http://msdn.microsoft.com/en-us/library/esw638yk(VS.71).aspx

+0

私はそれを試みたが、私の人生のためにクライアント側に何かを記録させることができなかった。 –

関連する問題