Aquí está la situación. Tengo un servicio web (C# 2.0), que consiste en (principalmente) una clase que hereda de System.Web.Services.WebService. Contiene algunos métodos, que todos necesitan llamar a un método que verifica si están autorizados o no.Llamar a un determinado método antes de cada llamada al servicio web
Básicamente algo como esto (perdón por la arquitectura, esto es puramente como un ejemplo):
public class ProductService : WebService
{
public AuthHeader AuthenticationHeader;
[WebMethod(Description="Returns true")]
[SoapHeader("AuthenticationHeader")]
public bool MethodWhichReturnsTrue()
{
if(Validate(AuthenticationHeader))
{
throw new SecurityException("Access Denied");
}
return true;
}
[WebMethod(Description="Returns false")]
[SoapHeader("AuthenticationHeader")]
public bool MethodWhichReturnsFalse()
{
if(Validate(AuthenticationHeader))
{
throw new SecurityException("Access Denied");
}
return false;
}
private bool Validate(AuthHeader authHeader)
{
return authHeader.Username == "gooduser" && authHeader.Password == "goodpassword";
}
}
Como se puede ver, el método Validate
tiene que ser llamado en cada método. Estoy buscando una manera de poder llamar a ese método, mientras sigo siendo capaz de acceder a los encabezados de jabón de una manera sensata. He visto los eventos en el global.asax
, pero no creo que pueda acceder a los encabezados de esa clase ... ¿Puedo?
No es tan sencillo como suponía. Voy a probar esto ahora. –
¡Funciona! Tenga en cuenta que el acceso basado en web de Visual Studio no activa la extensión, ya que no utiliza SOAP para realizar la solicitud. Me hizo rascar mi cabeza por unos minutos. –