Visual Basic.NET - Acceso a Web Service con autentificación via certificado digital

   
Vista:

Acceso a Web Service con autentificación via certificado digital

Publicado por Javier (2 intervenciones) el 13/04/2016 08:59:31
Muy buenas a todos, estoy escribiendo un programa para acceder a un servicio web, mediante autentificación via certificado digital. Al agregar la url del wsdl me pide el certificado digital y ya despues se descarga el esquema xml. Le pongo el nombre a la referencia web y listo. Hasta aqui no tengo problemas.

El problema viene que este esquena no incluye la cabecera soap (Soap Header) por lo que hay que agregarsela manualmente y enviarsela antes de realizar cualquier operación con el web service. Por otro lado usa un identificador aparte del certificado digital, por lo que no me pide usuario y contraseña, solo este identificador.

Para ello me creo una clase de la siguiente manera:

1
2
3
4
Public Class myheader
     Inherits SoapHeader
     Public IDentificador As String
End Class

Una vez creado la clase creo un metodo para esta clase de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
<WebService(NameSpace:="https://urlcorrespondiente.es/")>
Public Class MyWebService
     Public myHeaderMemberVariable as myheader
    <WebMethod, SoapHeader("myHeaderMemberVariable")>
          Public Sub MyWebMethod()
                If (myHeaderMemberVariable.IDentificador = "MI.VALOR" Then
                     'El valor del identificador es el correcto
                End If
         End Sub
End Class

Una vez realizado todo esto ya procedo a probar codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Try
     'Creo una variable para la cabecera soap
     Dim header as myheader = New myheader()
     header.IDentificador = "MI.VALOR"
 
    'Creo una variable para el resultado del servicio y para el aceso a los servicios
    Dim resultado as new miservicio.ResultadoCarga
    Dim iservicio as new miservicio.IServicio
 
    'Variable para la cabecera SOAP
    Dim Sh as new MyWebService
    Sh.myHeaderMemberVariable = header
    Sh.MyWebMethod()
 
    dim variable as new miservicio.valores
    variable.valor1 = "valor 1"
    variable.valor2 = "valor 2"
 
   'Llamo al metodo del servicio web para cargar valores
   resultado = miservicio.cargardatos(variable)
 
    messagebox.show(resultado.valido.tostring)
 
Catch ex as Exception
     messagebox.show(ex.Message.ToString)
End Try

El metodo para crear la cabecera soap parece que funciona en principio, ya que si ne la zona donde pregunto si el IDentificador = "MI.VALOR" pongo un messagebox.show, este mensaje se me muestra previamente antes de enviar ninguna información. Per ocuando realiceo el envio a traves de miservicio.cargardatos(variable), el web service me responde diciendo que no se ha recibido el identificador IDentificador.

Llevo varios dias dandole vueltas pero no se donde puede estar el problema y si hay alguna manera de insertar el soap header antes de enviar los datos al Web Service.

Lo estoy programando todo en Visual Basic .NET 2015.

Un saludo y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder