La ventaja que me brinda está modalidad es que no mezcla los parámetros que requiere el web service con los datos de autenticación del usuario que consume el web service.
No vayan a pensar que esto es algo nuevo, para nada, en realidad este es un tema bastante conocido, sin embargo hago el post porque necesité enviar un ejemplo de cómo operan las cabeceras SOAP, y es el pretexto perfecto para hacer un nuevo post para este blog que lo tengo tan olvidado.
Vamos con el ejemplo, para este caso he creado una solución con dos proyectos, el primero contiene un web service con dos métodos, uno no requiere autenticación y el otro sí.
El segundo proyecto contiene una página aspx que hace de cliente y consume al web service, para lo cual debe pasar el usuario, contraseña y ambiente que solicita la cabecera SOAP que implementé.
Cabe destacar que las cabeceras SOAP permiten crear la cantidad de elementos que Ud. considere necesario, es decir es una autenticación personalizada.
Vamos a continuar explicando conforme revisemos el código.
Empecemos revisando el primer proyecto, el cual contiene varias clases que trabajan con las cabeceras SOAP.
También en este proyecto está el web service. Un punto resaltante es que cada método que requiere autenticación debe ser decorado con los atributos SoapHeader y la clase personalizada que hay creado, en este caso cAuthenticationExtension:
<cAuthenticationExtension()> <SoapHeader("Credentials")> <WebMethod()> _ Public Function HelloWorld_YESHeaders(ByVal FullName As String) As String Return String.Format("Hello {0}", FullName) End Function
Si tengo métodos en el web service que no requieren autenticación, serán decorados sólo con WebMethod:
<WebMethod()> _ Public Function HelloWorld_NOHeaders(ByVal FullName As String) As String Return String.Format("Hello {0}", FullName) End Function
Luego, en el segundo proyecto, he añadido una página aspx, el cual consume los métodos del web service:
Obviamente, primero debo añadir una referencia a dicho web service, yo la he llamado Cabec_Soap_Referencia. Luego el código para consumir los métodos del web service sería:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack Then Return 'instanciamos el web service Dim wsx As New ws.WebService1 'consumimos el método del web service que no requiere cabeceras SOAP Dim msg0 As String = wsx.HelloWorld_NOHeaders("Segundo Serrano") Response.Write("<br /><br />" & msg0) 'Instanciamos la cabecera SOAP Dim myHeader As New ws.cAuthenticationHeader myHeader.UserName = "usuario1" myHeader.Password = "password1" myHeader.Ambiente = "TIENDAS EFE" 'este método sí requiere cabeceras SOAP... si no pusiéramos esta línea, el método arrojaría error wsx.cAuthenticationHeaderValue = myHeader Dim msg1 As String = wsx.HelloWorld_YESHeaders("Segundo Serrano") Response.Write("<br /><br />" & msg1) End SubLes dejo el ejemplo completo.
Espero que les sea de utilidad
No hay comentarios.:
Publicar un comentario