2009-09-09 6 views
2

J'essaye d'écrire un MessageHeader aux OutgoingMessageHeaders mais la valeur ne colle pas.WCF OutgoingMessageHeaders n'enregistrant pas les valeurs

BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); 
EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1003/Client.svc"); 

IClientService serviceClient = new ChannelFactory<IClientService>(basicHttpBinding, endpointAddress).CreateChannel(); 

// attempt 1 
using (OperationContextScope scope = new OperationContextScope(serviceClient as IContextChannel)) 
{ 
    OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId","","ABC")); 
} 

// attempt 2 
using (OperationContextScope scope = new OperationContextScope(serviceClient as IContextChannel)) 
{ 
    OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId","","ABC")); 
} 

OK, vous pouvez voir que je suis en train OutgoingMessageHeaders deux fois, mais qui est tout simplement de prouver un point. Dans la deuxième tentative, avant de faire l'ajout réel, j'inspecte le OperationContext.Current.OutgoingMessageHeaders. Je m'attendrais à ce que cela ait une entrée. Mais c'est zéro. Dès qu'il sort de la portée d'utilisation, la valeur est perdue. Lorsque cela est transmis au serveur, il indique qu'il ne peut pas trouver l'en-tête du message, indiquant que, pour ce qui le concerne, il n'a pas été enregistré non plus.

Pourquoi mon MessageHeader ne colle-t-il pas?

Jeff

Répondre

8

La fin du bloc à l'aide appelle le Éliminez et remet à zéro la OperationContext précédente.

Donc, vous voulez quelque chose comme ça avec l'appel de service à l'intérieur de l'OperationContextScope.

 using (OperationContextScope scope = new OperationContextScope(serviceClient as IContextChannel)) 
     { 
      OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId", "", "ABC")); 
      serviceClient.CallOperation(); 
     } 
+0

exactement - vous devez réellement ** FAIRE ** l'appel dans le bloc using()! –

+0

Arghh. Bien sûr! J'espérais être en mesure de mettre cela en un seul endroit au moment où je reçois le proxy alors tous mes appels en utilisant le proxy n'a pas eu à être changé. On dirait que je vais devoir utiliser des comportements et ajuster les messages de cette façon. Le problème que je vois avec cette approche est que cela empêcherait les méthodes de service d'être utilisables par quelque chose qui n'utilise pas WCF :-( –

Questions connexes