服务合同的PrincipalPermission属性

时间:2012-11-22 17:09:43

标签: .net wcf

是否有技术原因可以将PrincipalPermission放置在服务合同界面上?它只适用于实现合同的类或直接适用于类方法。

这不起作用。

[ServiceContract]
public interface IMyService
{
    [PrincipalPermission(SecurityAction.Demand, Role="Admin")]
    [OperationContract]
    void MyFunction(string str);
}

但是如果我将属性放在实现IMyService的类中的匹配方法上,它就可以工作。

2 个答案:

答案 0 :(得分:3)

使用实现方法上的属性,而不是放在方法实现的接口上的属性,在运行时检查角色。更一般地说,在.NET中,放在方法上的自定义属性与放在相应接口方法上的自定义属性(如果有)之间没有直接关系。

答案 1 :(得分:1)

我知道这篇文章很老,试图为OP问题提供一个具体的答案,原因在于界面和类之间的区别。

想一想; 接口是对实现的描述,它不是实现的行为。  接口只描述了类方法和事件等。

Or as Microsoft says it:

  

接口定义了一组成员的签名   实施者必须提供。接口无法提供实现   成员的详细信息(行为)

继承接口的类提供了这些方法和事件的行为。 - 也就是说实现接口的[behavior~function]

那么为什么界面:

如果需要提供值类型的多态层次结构,请定义接口。

考虑定义接口以实现类似于多重继承的效果。

https://msdn.microsoft.com/library/ms229013(v=vs.100).aspx

希望这有助于其他人理解。