J'utilise WCF (.NET 3.5) pour communiquer avec un serveur utilisant SOAP. Lors de l'exécution en mode débogage, j'utilise System.ServiceMode.Dispatcher.IClientMessageInspector
et log4Net pour enregistrer le contenu de la requête.Masquage des informations sensibles lors de la connexion à partir de IClientMessageInspector
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
log.Debug(request);
}
Ma difficulté est que, parfois, le message SOAP contient des informations d'authentification que je dois masquer avant d'écrire aux journaux par exemple dans l'exemple suivant, je voudrais enregistrer l'élément de mot de passe <password>**********</password>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://service.soap.host.com/credentials</Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<credentials xmlns="http://service..soap.host.com/credentials">
<username>MyUsername</username>
<password>MyPassword</password>
</credentials>
</s:Body>
</s:Envelope>
Je suis en mesure d'y parvenir d'une manière brute en utilisant l'expression régulière correspondant à la sortie de request.ToString()
mais je me demande s'il y a un plus élégant et approche efficace qui me permettra de modifier la valeur de l'élément de mot de passe avant de convertir le message en une chaîne.