tha*_*awg 5 .net wcf code-security
我正在构建一个自定义CodeAccessSecurityAttribute来处理我的WCF服务的授权.我这样建了A级:
public class A : CodeAccessSecurityAttribute
{
public A() : base(SecurityAction.Demand)
{
// Constructor Code
}
public override IPermission CreatePermission()
{
// Permission Creation Code
}
}
Run Code Online (Sandbox Code Playgroud)
在编译时会产生此错误.
Error emitting 'A' attribute -- 'Serialized security custom attribute is
truncated or incorrectly formed.'
Run Code Online (Sandbox Code Playgroud)
在玩了一点之后我想出了下一个编译而没有错误的示例:
public class B : CodeAccessSecurityAttribute
{
public B(SecurityAction Action) : base(Action)
{
// Constructor Code
}
public override IPermission CreatePermission()
{
// Permission Creation Code
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是因为SecurityAction枚举没有直接引用到A类的公共端,但我无法弄清楚的是如何制作它以便我可以使用A类方法而不是B类.
Mor*_*gil 11
我不知道该要求的确切原因,但CodeAccessSecurityAttribute上的MSDN文档清楚地说明了这一点
对继承者的说明
从此类派生的所有权限属性必须只有一个构造函数,该构造函数将SecurityAction作为其唯一参数.
修订:此要求的原因CodeAccessSecurityAttribute是,从低级别视图来看,与其他自定义属性完全不同.通常,自定义属性存储在CustomAttribute表中的已编译元数据中.但是,源自的安全属性SecurityAttribute分别存储在DeclSecurity表中.并且此表不包含CustomAttribute表之类的常规数据,此表包含值Action,属性类型的名称,以及自定义属性大小写中的一组属性(命名参数).因此,编译器需要将常规自定义属性语法转换为此元数据表中的条目,因此需要它遵循上面提到的固定形式.(另见本博客文章,或分区Ⅱ,部分22.11 DeclSecurity:为0x0E的的通用语言基础结构(CLI) .标准)
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |