Web Service con Certificado
Buenas, tengo dos preguntas en una para quien tuviera a bien poder responderlas y sacarme del atasco:
Intento acceder a un Web Service seguro que requiere certificado, además de una tarjeta de microchip de firma digital, que está insertada al tarjetero. Todo está correctamente instalado ya que si uso el programa soapUI (versión 4.0.1) todo va correcto.
Si intento acceder desde la línea de comandos de VFP mediante
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/proyecto.php?wsdl", .F.)
Una vez hechas las asignaciones de
oHTTP.setRequestHeader("Content-Type".....
y
oHTTP.setRequestHeader("SOAPAction",.......
Hago oHTTP.SEND(cTXT), donde cTXT es el XML en cuestión.
Entonces salta una ventana de petición de selección del certificado. Y es lo que quiero evitar. Si cuando lo hago con el programa mencionado soapUI no me salta esta ventana, ¿por qué al hacerlo por código sí?
He intentado:
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/proyecto.php?wsdl", .F., cRutaDelCertificado, cClave)
Pero me sigue saltando la ventana.
_____________________________________________________________
Y la otra pregunta que "prometí"
Si hago lo que comentó, obviando la parte que pregunto de la ventana de petición de certificado me pasa otra cosa que no acabo de resolver:
Si abro un vfp y lo primero que intento desde la línea de comandos es
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.ruta.es/proyecto#test")
oHTTP.Send(cTXT)
Me pide el certificado (lo comentado) y ahora se tira cerca de dos minutos "como pillado" para al final terminar dando un error.
"Código de excepción OLE IDispatch 0 de msxml3.dll: Error del sistema: -2146697208"
Si ahora hago (SIN CERRAR EL VFP)
RELEASE ALL
y vuelvo a repetir los pasos anteriores, ya funciona correctamente.
Así, investigando, llegué a una "conclusión":
Si abro el VFP y hago todos los pasos igual, menos el oHTTP.Send, que lo hago "en vacío", es decir:
oHTTP.Send()
Me pide el certificado hace la conexión e inmediatamente termina (por supuesto con una respuesta de no haber encontrado nada porque no he mandado nada) Y ahora, hago RELEASE ALL, vuelvo a hacer lo mismo y todo "OK". Sin esos dos minutos de "latencia" ni nada.
¿Cómo puedo hacer para evitar este "parche" tan poco elegante?
_____________________________________
Así pues, estas son las dos preguntas. La segunda por ahora la resuelvo con una chapuza, con lo que la que más me quita el sueño es la primera.
Espero que algún experto pueda contestarme con algo.
Yo seguiré investigando mientras tanto.
Gracias, un saludo y con Dios.