У меня есть служба WCF, которая должна знать принципала вызывающего пользователя.
В конструкторе сервиса у меня есть:
Principal = OperationContext.Current.IncomingMessageHeaders.GetHeader<MyPrincipal>("myPrincipal", "ns");
и в коде вызова у меня есть что-то вроде:
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();
}
}
Все это прекрасно работает.
Мой вопрос: как мне избежать необходимости оборачивать все вызовы прокси-методов в using (var scope...{ [create header and add to OperationContext]
?
Могу ли я создать собственную ChannelFactory, которая будет обрабатывать добавление заголовка myPrincipal в контекст операции? Нечто подобное спасло бы всю нагрузку копирования / вставки, которую я бы предпочел не делать, но я не уверен, как этого добиться:)
Спасибо