Уровень обслуживания wcf (класс) OperationBehavior - PullRequest
3 голосов
/ 03 января 2012

В настоящее время для всех операций wcf я должен поместить атрибут OperationBehavior (для олицетворения) поверх каждого метода.

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]

Ставить его для каждого метода - пустая трата времени. Что мне нужно, так это исключить необходимость применения поведения ко всем доступным операциям. Есть ли способ поместить этот уровень класса атрибута так, чтобы он влиял на все методы в этом классе обслуживания?

1 Ответ

4 голосов
/ 03 января 2012

Создайте свой собственный атрибут, который реализует IServiceBehavior и примените правильное поведение операции ко всем доступным операциям:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class AllowImpersonationAttribtute : Attribute, IServiceBehaviour
{
  void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription desc, ServiceHostBase host)
  {
    var operations = desc.Endpoints.SelectMany(e => e.Contract.Operations);
    foreach (var operation in operations)
    {
      operation.Behaviors.Add(new OperationBehaviorAttribute{Impersonation = ImpersonationOption.Allowed});
    }
  }
  ... // remaining methods empty
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...