
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:
Una vez creado la clase creo un metodo para esta clase de la siguiente manera:
Una vez realizado todo esto ya procedo a probar codigo:
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.
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


0