wcf服务(类)级别OperationBehavior

时间:2012-01-03 15:12:43

标签: .net wcf wcf-security

目前,对于所有wcf操作,我必须在每个方法的顶部放置OperationBehavior属性(用于模拟)。

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]

将它用于每种方法似乎都是浪费时间。我需要的是消除将行为应用于所有可用操作的必要性。有没有办法将此属性类级别设置为影响该服务类中的所有方法?

1 个答案:

答案 0 :(得分:4)

创建自己的实现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
}