2010-11-29 5 views
0

J'ai généré une classe Proxy à partir d'une URL WSDL. Je peux envoyer des requêtes, mais je dois me connecter au XML envoyé. Comment ferais-je cela?Comment enregistrer le code XML que ma classe proxy envoie à un service Web?

+0

est-ce que cela a à se produire sur le côté client, ou est une solution d'enregistrement côté serveur également acceptable? –

+0

Je ne suis pas en contrôle du côté serveur, il devrait donc être côté client. –

Répondre

1

J'ai effectué ce côté serveur en implémentant IDispatchMessageInspector comme décrit here. Cependant, je crois que vous pouvez faire la même chose côté client en implémentant l'interface IClientMessageInspector. Si je me souviens bien, la méthode Message .ToString() retourne le SOAP que vous pouvez placer directement dans votre journal.

Cependant, il ya un getcha que je crois est côté serveur seulement, mais je vais le mentionner ici car il ne peut pas être.

La classe Message est conçue pour être lue une seule fois. Puisque vous interceptez le message pour le journaliser, vous devez vous assurer de ne pas le marquer comme un effet secondaire. Vous devez cloner comme ceci:

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

Merci. Cela m'a mis sur la bonne voie. –

+0

@My Other Me - Juste curieux, mais était-ce un problème pour le client? Sinon, je l'enlèverai de ma réponse. – sheikhjabootie

Questions connexes