2010-07-29 10 views
5

Nous pouvons ajouter en-tête du message au message WCF en ajoutant l'attribut MessageHeader comme celui-ciDynamiquement ajouter en-tête crypté message WCF

[MessageContract] 
public class HelloResponseMessage 
{ 
    [MessageHeader(ProtectionLevel=EncryptAndSign)] 
    public string SSN 
    { 
     get { return extra; } 
     set { this.extra = value; } 
    } 
} 

première question est, comment est-ce sécurisé, et est ce travail pour tous les types de liaisons WCF?

et la deuxième question, est-il possible d'ajouter un en-tête chiffré à tous les messages et d'extraire dans la partie serveur dynamique comme ceci?

MessageHeader header = MessageHeader.CreateHeader("SessionKey", "ns", _key); 
OperationContext.Current.OutgoingMessageHeaders.Add(header); 

Répondre

2

Vous pouvez utiliser le service IServiceBehavior qui, à son tour, utilisera un DispatchMessageInspector.

Pour le proxy client vous devez créer un IEndpointBehavior qui utiliserait un IClientMessageInspector

Le IClientMessageInspector instancierez un MessageHeader ou un type dérivé et l'ajouter à chaque demande dans la méthode BeforeSendRequest.

DispatchMessageInspector analyse chaque requête dans la méthode AfterReceiveRequest et extrait l'en-tête à partir de là. Un inconvénient de ceci est que je ne pense pas que cette intention ou en-tête sera documentée dans le WSDL. Par conséquent, je pense que vous devrez prendre le contrôle en utilisant une implémentation personnalisée de l'interface IWsdlExportExtension.

Andrew

+0

je connais IServiceBehavior, mais il semble qu'il ne fonctionne pas pour PollingDuplex obligatoire pour Silverlight ... –