WCF - Передача CurrentPrincipal в заголовок - PullRequest
3 голосов
/ 22 апреля 2010

У меня есть служба 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 в контекст операции? Нечто подобное спасло бы всю нагрузку копирования / вставки, которую я бы предпочел не делать, но я не уверен, как этого добиться:)

Спасибо

1 Ответ

3 голосов
/ 30 апреля 2010

Правильное время для установки участника WCF - через IAuthorizationPolicy, указав пользовательскую политику в конфигурации. Это покрыто полностью здесь . Если вы попытаетесь установить принципала в других точках (возможно, инспектора), он может быть сброшен системой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...