2010-01-06 4 views
2

J'ai écrit un IDFatchMessageInspector WCF, afin que je puisse enregistrer les messages entrants et sortants. Mais je ne suis pas sûr de savoir comment obtenir une chaîne XML joliment formatée pour se connecter.IDispatchMessageInspector pour consigner les messages de savon en texte brut?

Mon code ressemble à ceci:

 public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); 
     request = buffer.CreateMessage(); 
     Log("Received", request.ToString(); 
     return null; 
    } 

Le résultat de cette exploitation forestière inclut des choses comme "esperluette lt;" et une sorte de données codées en binaire. Comment obtenir quelque chose qui ressemble à un document XML de savon standard? Je sais que cela devrait être évident, mais je suis trop dense pour le comprendre.

Merci.

Dan

Répondre

1

Voici un exemple de travail

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
{ 
    MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); 
    request = buffer.CreateMessage(); 

    XDocument doc; 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     XmlWriter writer = XmlWriter.Create(ms); 
     request.WriteMessage(writer); 
     writer.Flush(); 
     ms.Position = 0; 

     doc = XDocument.Load(ms); 
    } 

    if (SaveLog != null) 
    { 
     LogSaveFileEventArgs logEventArgs = new LogSaveFileEventArgs(doc, false); 
     SaveLog(this, logEventArgs); 
    } 

    request = buffer.CreateMessage(); 

    //The return value can be any object that you want to use for correlation purposes; 
    //it is returned to you as the correlationState parameter in the BeforeSendReply method. 
    return null; 
} 
Questions connexes