Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Error WS - Sin respuesta.

Buenas a todo@s...

Estoy teniendo un problema que me trae por el camino de la amargura....

En el en mensaje : https://www.clubdelphi.com/foros/sho...97&postcount=7 del hilo : https://www.clubdelphi.com/foros/showthread.php?t=95967 puse un ejemplo de utilización del servicio de validación de NIF/CIFs de la AEAT.

Me funciona perfectamente en muchos equipos que tengo en clientes, pero en varios de ellos no hay forma que funcione y me devuelve el error:

El documento XML debe tener un elemento de nivel superior
Line: 0

es decir no hay respuesta...

Me copio los datos en mi equipo (ejecutables, certificados etc... ) y funciona perfectamente...

No entiendo que puede estar pasando... ¿alguna pista?

gracias.
Responder Con Cita
  #2  
Antiguo 10-03-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A lo mejor si pones una copia del xml para que le echemos un vistazo, si es posible.
Normalmente, por lo que he visto en algunos casos, es porque no está bien estructurado.
Responder Con Cita
  #3  
Antiguo 10-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si has copiado los mismos ficheros en otro equipo, y la cosa no funciona, puede ser indicativo de que sea un problema de diferente configuración en los diferentes equipos.
Todo el tema de XML, según el código que estés utilizando, se apoya en DLLs y configuraciones del equipo (IE, protocolos,...)

Revisa y compara versiones del sistema operativo, versiones de protocolos,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 10-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
A lo mejor si pones una copia del xml para que le echemos un vistazo, si es posible.
Normalmente, por lo que he visto en algunos casos, es porque no está bien estructurado.
pues no tengo respuesta... ese es el problema...

Capturo la respuesta así:

Al httpRio asigno el evento OnAfterExecute y lo defino así...

Código Delphi [-]
procedure TMainForm.HTTPOnAfterExecute(const MethodName: string; SOAPResponse: TStream);
var
  ts: TStringList;
begin
    SOAPResponse.Position := 0;
    ts := TStringList.Create;
    try
      ts.LoadFromStream(SOAPResponse);
      SOAPResponse.Size := 0;
      SOAPResponse.Position := 0;
      ts.SaveToStream(SOAPResponse);
      ts.saveToFile(ExtractFilePath(Application.ExeName) + ChangeFileExt(ExtractFileName(Application.ExeName), '.debug.respuesta.txt'));
    finally
      ts.Free;
    end;
end;

pero siempre está vacío...

Edito:

Cuando responde todo va bien y sí llego a capturar el mensaje de restuesta

Código:
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Body><VNifV2Sal:VNifV2Sal xmlns:VNifV2Sal="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Sal.xsd"><VNifV2Sal:Contribuyente><VNifV2Sal:Nif>XXXXXX</VNifV2Sal:Nif><VNifV2Sal:Nombre>XXXXX</VNifV2Sal:Nombre><VNifV2Sal:Resultado>IDENTIFICADO</VNifV2Sal:Resultado></VNifV2Sal:Contribuyente></VNifV2Sal:VNifV2Sal></env:Body></env:Envelope>

Última edición por iMia fecha: 10-03-2023 a las 17:06:56. Razón: Poner etiquetas [delphi] [/delphi] al código.
Responder Con Cita
  #5  
Antiguo 11-03-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Puede ser que no exista el nif que se esté consultando.
Responder Con Cita
  #6  
Antiguo 13-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Puede ser que no exista el nif que se esté consultando.

Buenos días Casimiro,
no, no es ese el problema...
Cuando no se identifica, si hay mensaje de respuesta, devuelve el mensaje de NO IDENTIFICADO.

Código Delphi [-]
B33333333CERES NO IDENTIFICADO
Responder Con Cita
  #7  
Antiguo 13-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si has copiado los mismos ficheros en otro equipo, y la cosa no funciona, puede ser indicativo de que sea un problema de diferente configuración en los diferentes equipos.
Todo el tema de XML, según el código que estés utilizando, se apoya en DLLs y configuraciones del equipo (IE, protocolos,...)

Revisa y compara versiones del sistema operativo, versiones de protocolos,...

Creo que podría venir por aquí...

He conseguido llegar a que si ejecuto desde dentro del entorno de Delphi con un Run, funciona perfectamete, pero lanzando el ejecutable desde el propio S.O. , es cuando no hay respuesta...
Es como si el capicom o las librerias de openssl (libeay32.dll o ssleay32.dll) no fuesen las correctas: Desde Delphi está utilizando unas y desde el ejecutable, otras (o algo así) y no incluya bien el certificado o no sé exactamente qué pasa con la llamada y por eso no hay respuesta... pero por otra parte, cuando la llamada no es correcta, el servidor debería responder con error, pero es que no hay error, simplemente no hay respuesta...
Responder Con Cita
  #8  
Antiguo 13-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por iMia Ver Mensaje
Buenos días Casimiro,
no, no es ese el problema...
Cuando no se identifica, si hay mensaje de respuesta, devuelve el mensaje de NO IDENTIFICADO.

Código:
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Body><VNifV2Sal:VNifV2Sal xmlns:VNifV2Sal="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Sal.xsd"><VNifV2Sal:Contribuyente><VNifV2Sal:Nif>B33333333</VNifV2Sal:Nif><VNifV2Sal:Nombre>CERES </VNifV2Sal:Nombre><VNifV2Sal:Resultado>NO IDENTIFICADO</VNifV2Sal:Resultado></VNifV2Sal:Contribuyente></VNifV2Sal:VNifV2Sal></env:Body></env:Envelope>
He cambiado los tags para que se vea el mensaje.
Responder Con Cita
  #9  
Antiguo 14-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ahí en el menaje de respuesta tienes un "NO IDENTIFICADO"
Tendrías que saber a qué se refiere. Si es al certificado, si es por el DNI,...

Si está relacionado con librerías (SSL) deberías buscar en tu sistema a ver si tienes más de una versión. No sea que según desde dónde lo ejecutas te esté cogiendo unas u otras (path).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 14-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Ahí en el menaje de respuesta tienes un "NO IDENTIFICADO"
Tendrías que saber a qué se refiere. Si es al certificado, si es por el DNI,...

Si está relacionado con librerías (SSL) deberías buscar en tu sistema a ver si tienes más de una versión. No sea que según desde dónde lo ejecutas te esté cogiendo unas u otras (path).
Siempre que hay una respuesta "NO IDENTIFICADO", es que la llamada (y certificado) es correcto... simplemente que el NIF que se consulta, es incorrecto o no corresponde con el nombre.

El tema de las DLL tampoco lo tengo claro, por que solo tengo unas... sigo con esta linea de investigación a ver si veo algo...

Gracias a todos por mirarlo y perder unos minutos a pensar en ello...
Responder Con Cita
  #11  
Antiguo 15-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Sigo con el tema DLLs...

Desde el entorno de programación funciona OK, pero desde el S.O. llamando al ejecutable no.

¿Es relamente problema de las dll's...? ni libeay32.dll ni ssleay32.dll son llamadas desde mi proceso (Ejecutable desde SO)

Hasta ahora pensaba utilizaba las dlls (libeay32.dll y ssleay32.dll) pero ahora creo que no las utiliza... por eso al copiar varias versiones de dll de libeay32 y ssleay32 junto al ejecutable, pasa de ellas...

¿No seran otras dlls?

P.D.: Cómo saber qué DLL se están llamando... (sea del SO o del entrono de programación)
desde liena de comandos: C:\Windows\System32\perfmon.exe /res -> Pestaña CPU y seleccionar el proceso y las dlls aparecen en el apartado "módulos Asociados"

vaya lio....
Responder Con Cita
  #12  
Antiguo 15-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por iMia Ver Mensaje
Hasta ahora pensaba utilizaba las dlls (libeay32.dll y ssleay32.dll) pero ahora creo que no las utiliza... por eso al copiar varias versiones de dll de libeay32 y ssleay32 junto al ejecutable, pasa de ellas...
Si estás usando las Indy (por ejemplo) sí usa esas DLL's. Si estás utilizando los componentes REST creo que no, porque hace uso de lo que tiene el sistema operativo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #13  
Antiguo 15-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si estás usando las Indy (por ejemplo) sí usa esas DLL's. Si estás utilizando los componentes REST creo que no, porque hace uso de lo que tiene el sistema operativo.
Sí, Sólo utilizo los componentes propios de Delphi y la librería CAPICOM

Estos son los uses del maiForm

Código Delphi [-]

uses
  // Windows API
  Winapi.Windows, Winapi.Messages, WinApi.WinInet,
  // PlaySound
  MMSystem,
  // System
  System.SysUtils, System.Variants, System.Classes, System.IniFiles, System.UITypes, System.Win.ComObj,
  // VCL
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls, Vcl.Mask,
  // XML
  Xml.xmldom, Xml.XMLDoc, Xml.XMLIntf,
  // Data
  Data.DB, Bde.DBTables,
  // Rest - JSON
  REST.Json,
  // Soap
  Soap.SOAPHTTPClient, Soap.SOAPHTTPTrans, Soap.InvokeRegistry, Soap.Rio,
  // aeat NIF VAlidador
  VNifV21;
Responder Con Cita
  #14  
Antiguo 16-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Más pruebas...

He instalado Fiddler... un snifer de http, para ver las comunicaciones....

Si lo hago ejecutando la app desde el SO, Fiddler detecta el request: a sede.agenciatributaria:443

HEADER:
User-Agent: CodeGear SOAP 1.3
Host: www1.agenciatributaria.gob.es:443
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
con una respuesta:
HEADER
FiddlerGateway: Direct
StartTime: 08:00:48.731
pero en el RAW del request aparece esto:

Código:
CONNECT www1.agenciatributaria.gob.es:443 HTTP/1.0
User-Agent: CodeGear SOAP 1.3
Host: www1.agenciatributaria.gob.es:443
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

After the client received notice of the established CONNECT, it failed to send any data.

Ejecutando desde el IDE

el mismo header:
User-Agent: CodeGear SOAP 1.3
Host: www1.agenciatributaria.gob.es:443
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
pero el raw del mensaje:
Código:
CONNECT www1.agenciatributaria.gob.es:443 HTTP/1.0
User-Agent: CodeGear SOAP 1.3
Host: www1.agenciatributaria.gob.es:443
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.3 (TLS/1.2)
Random: 64 12 C3 D3 CD 93 AE CB 92 35 3F 92 27 60 63 C1 93 D9 94 1B E6 35 9E FB BA 33 D6 98 B1 3A CD ED
"Time": 01/08/2082 4:26:44
SessionID: empty
Extensions: 
	server_name	www1.agenciatributaria.gob.es
	status_request	OCSP - Implicit Responder
	supported_groups	x25519 [0x1d], secp256r1 [0x17], secp384r1 [0x18]
	ec_point_formats	uncompressed [0x0]
	signature_algs	rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha1, ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_sha1, dsa_sha1, rsa_pkcs1_sha512, ecdsa_secp521r1_sha512
	SessionTicket	empty
	extended_master_secret	empty
	renegotiation_info	00
Ciphers: 
	[C02C]	TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
	[C02B]	TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
	[C030]	TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
	[C02F]	TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
	[C024]	TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
	[C023]	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
	[C028]	TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
	[C027]	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
	[C00A]	TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
	[C009]	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
	[C014]	TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
	[C013]	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
	[009D]	TLS_RSA_WITH_AES_256_GCM_SHA384
	[009C]	TLS_RSA_WITH_AES_128_GCM_SHA256
	[003D]	TLS_RSA_WITH_AES_256_CBC_SHA256
	[003C]	TLS_RSA_WITH_AES_128_CBC_SHA256
	[0035]	TLS_RSA_WITH_AES_256_CBC_SHA
	[002F]	TLS_RSA_WITH_AES_128_CBC_SHA
	[000A]	SSL_RSA_WITH_3DES_EDE_SHA

Compression: 
	[00]	NO_COMPRESSION
y automáticamente está la llamada de POST a https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP con el xml de consulta.

Es como si no se enviase nada a parte del handshake de conexión... (ojo, el Content-Length: 0 de la respuesta raw de conexión no tiene nada que ver, ya que cuando se conecta correctamente, también sale a 0...) por que la respuesta del handshake es SSL3 "SSLv3-compatible ClientHello handshake was found" y el cliente no lo reconoce ¿?

Lo que sí, es que cuando se conecta bien, el tamaño total del request es de 1858 bytes (187 del header y 1671 del body) pero cuando lo hago desde el SO, el tamaño del request es de 276 bytes (187 del header y 89 del body).

El request se hace en dos partes, uno con la identificación (CONNECT) y otro con el request puramente dicho (POST). Parece que desde el ide, despés del Connect, puede hacer bien el POST, en cambio desde el SO, despues del Connect, no hace el Post...


o ya no sé ni lo que digo...
Responder Con Cita
  #15  
Antiguo 16-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa los parámetros de SSL.
Haz pruebas con diferentes versiones.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 16-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Revisa los parámetros de SSL.
Haz pruebas con diferentes versiones.
Gracias Neftali,

He probado de activar Manualmente TLS 1.2 en el registro, y SSL 3... y nada...

He probado copiando diferentes versiones de libeay32 y ssleay32 junto al ejecutable y como si nada... No sé si las utiliza (yo diría que no, por que comprobando las dlls que abre la app, no lo hace... ) y si las utiliza ni cómo ni cuando...
Responder Con Cita
  #17  
Antiguo 16-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Arreglado!!!!!!!!

El problema estaba en la forma de cargar el certificado con CAPICOM...

Tenia que ser:

Código Delphi [-]
Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_CURRENT_USER_KEY)

Última edición por Neftali [Germán.Estévez] fecha: 16-03-2023 a las 14:00:51. Razón: Añadir TAGs al código
Responder Con Cita
  #18  
Antiguo 16-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Gracias por comentar la solución.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Respuesta al ListBox Dannell Varios 5 28-11-2012 19:30:51
Tiempos de Respuesta Maury Manosalva MySQL 2 01-02-2007 17:59:46
mensaje de respuesta a error jhcaboverde Varios 1 23-01-2007 18:18:53
Respuesta danytorres Varios 2 16-07-2003 20:55:43


La franja horaria es GMT +2. Ahora son las 14:31:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi