2010-07-19 19 views
1

Puis-je ajouter et lire un en-tête personnalisé dans l'élément Enveloppe/En-tête/Sécurité? J'ai essayé d'utiliser l'attribut MessageHeader, mais cela ne me permet pas de placer l'en-tête dans l'élément Security.Ajouter un en-tête personnalisé dans l'élément de sécurité avec WCF

J'ai créé une classe qui implémente IClientMessageInspector pensant que je pouvais accéder à l'en-tête de sécurité comme ceci:

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

    Message originalMessage = buffer.CreateMessage(); 
    foreach (MessageHeader h in originalMessage.Headers) 
    { 
     Console.WriteLine("\n{0}\n", h); 
    } 

    return null; 
} 

Mais l'en-tête de sécurité n'est pas présent dans l'objet originalMessage.Headers.

Répondre

0

Créez un codeur de message personnalisé: http://msdn.microsoft.com/en-us/library/ms751486.aspx.

Vous pouvez accéder aux en-têtes de message dans le remplacement WriteMessage de votre encodeur. Notez que la propriété En-têtes du message ne contiendra pas l'en-tête de sécurité (bien que cela puisse dépendre du type de sécurité que vous utilisez). Ecrivez le message à un flux ou un fichier en utilisant, disons, Message.WriteMessage (XmlWriter). Le flux/fichier contiendra le contenu du message juste avant d'être envoyé sur le réseau, y compris l'élément de sécurité. À partir de là, vous pouvez modifier votre message si nécessaire et renvoyer un ArraySegment, y compris vos modifications.