Estoy creando un CodeAccessSecurityAttribute personalizado para manejar la autorización para mis servicios WCF. Construí clase A como tal:Creación de CodeAccessSecurityAttribute personalizado conduce a la excepción en compilar
public class A : CodeAccessSecurityAttribute
{
public A() : base(SecurityAction.Demand)
{
// Constructor Code
}
public override IPermission CreatePermission()
{
// Permission Creation Code
}
}
Y en la compilación produce este error.
Error emitting 'A' attribute -- 'Serialized security custom attribute is
truncated or incorrectly formed.'
Después de jugar con él un poco me ocurrió con la siguiente muestra que se compila sin error:
public class B : CodeAccessSecurityAttribute
{
public B(SecurityAction Action) : base(Action)
{
// Constructor Code
}
public override IPermission CreatePermission()
{
// Permission Creation Code
}
}
Sé que es debido a que la enumeración SecurityAction no se hace referencia directa a la parte pública de la Clase A, pero lo que no puedo descifrar es cómo hacerlo para poder hacerlo con el método de clase A en lugar de la clase B.
I a marcar esto como la respuesta por ahora, pero lo que no entiendo es que si yo estoy forzando la SecurityAction ser un valor al llamar de nuevo a la clase base, ¿por qué importa sobre la clase instanciar? – thaBadDawg
@thaBadDawg: La cosa es que podrías intentar agregar el parámetro requerido al constructor, pero ignorándolo y pasando una constante a 'base()'. Sin embargo, parece que no funciona, de todos modos, los atributos CAS no se evalúan al estilo "clásico", parece. – Mormegil
Siempre usaré "Demand". Es molesto que tenga que especificarlo. Oh, bueno, al menos es una enumeración. – helios456