Ich habe einen WCF-Dienst, der den Principal des aufrufenden Benutzers kennen muss.
Im Konstruktor des Dienstes habe ich:
Principal = OperationContext.Current.IncomingMessageHeaders.GetHeader<MyPrincipal>("myPrincipal", "ns");
und in dem aufrufenden Code habe ich etwas wie:
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();
}
}
Das alles funktioniert gut.
Meine Frage ist, wie kann ich vermeiden, dass ich alle Proxy-Methodenaufrufe in die using (var scope...{ [create header and add to OperationContext]
?
Könnte ich eine benutzerdefinierte ChannelFactory erstellen, die das Hinzufügen des myPrincipal-Headers zum Operationskontext übernimmt? So etwas würde mir eine Menge Kopieren/Einfügen ersparen, was ich lieber nicht tun würde, aber ich bin mir nicht sicher, wie ich es erreichen kann:)
Gracias