J'ai un service WCF qui doit connaître le principal de l'utilisateur appelant.WCF - Passing CurrentPrincipal dans l'en-tête
Dans le constructeur du service je:
Principal = OperationContext.Current.IncomingMessageHeaders.GetHeader<MyPrincipal>("myPrincipal", "ns");
et dans le code d'appel je quelque chose comme:
using (var factory = new ChannelFactory<IMyService>(localBinding, endpoint))
{
var proxy = factory.CreateChannel();
using (var scope = new OperationContextScope((IContextChannel)proxy))
{
var customHeader = MessageHeader.CreateHeader("myPrincipal", "ns", Thread.CurrentPrincipal);
OperationContext.Current.OutgoingMessageHeaders.Add(customHeader);
newList = proxy.CreateList();
}
}
Tout cela fonctionne très bien.
Ma question est, comment puis-je éviter d'avoir à envelopper tous les appels de méthode proxy dans le using (var scope...{ [create header and add to OperationContext]
? Puis-je créer une ChannelFactory personnalisée qui gérera l'ajout de l'en-tête myPrincipal au contexte de l'opération? Quelque chose comme ça sauverait une charge entière de copier/coller que je préfère ne pas faire, mais je ne suis pas sûr de savoir comment y parvenir :)
Merci