【问题标题】:wcf service (class) level OperationBehaviorwcf 服务(类)级别 OperationBehavior
【发布时间】:2012-01-03 15:12:43
【问题描述】:

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

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]

将它用于每种方法似乎是在浪费时间。我需要的是消除将行为应用于所有可用操作的必要性。有没有办法把这个属性类放在一个级别,以便它影响该服务类中的所有方法?

【问题讨论】:

    标签: .net wcf wcf-security


    【解决方案1】:

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

    【讨论】:

    • 你好,我不需要实现任何属性。我需要的是消除将行为应用于所有可用操作的必要性。
    • @archstanton 请参阅更新以了解预期用途。只需将上述属性添加到您的服务中,所有操作都会获得允许模拟行为。
    • 不幸的是它没有帮助。它说“属于具有'ISomeService'名称和'tempuri.org'命名空间的合同的服务操作'someMethod'不允许模拟”
    • 顺便说一句,我在 iis 中浏览 svc 文件时遇到此错误。不知何故属性未应用。
    • @archstanton 你能调试你的代码并确保代码运行吗?并且你期望找到的所有操作都找到了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多