Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   PRESVET: Definición del servicio web de comunicación de prescripciones veterinarias (https://www.clubdelphi.com/foros/showthread.php?t=96563)

nincillo 13-01-2024 07:25:51

PRESVET: Definición del servicio web de comunicación de prescripciones veterinarias
 
Pues eso, que como no era suficiente pegarme con el famoso VeriFactu ahora me toca pegarme con la actualización del PRESVET que tengo operativo en algunos clientes.

Hasta ahora lo tenía por el método REST pero como ahora estaba ya metido con los SOAP y la importación de los WSDL, me he decidido a intentar cambiar de manera de consumir los servicios.

El manual de instrucciones se puede descargar de aquí: https://www.mapa.gob.es/es/ganaderia...m30-485047.pdf. Por desgracia es una versión obsoleta. La versión actualizada no se de donde se puede descargar. Yo la tengo porque me la enviaron por email, pero es demasiado pesada para poder adjuntarla. ¿Es posible subirla al FTP del foro o algo así? Son poco más de dos megas.

Con las pruebas que estoy haciendo, me encuentro con dos problemas:
1) No tengo muy claro como indicar el usuario y la contraseña de acceso al servicio (aún estoy pendiente de que me las envien).
2) Por otro lado, mientras consigo esas credenciales, estoy intentando hacer peticiones para al menos obtener un error de acceso o algo así, pero lo único que consigo es un error de TimeOut.

La url actualizada del wsdl es: https://servicio.mapa.gob.es/wspresv...scripcion.wsdl


Si hago las pruebas con el SOAPUi:

Si hago la petición:
Código:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
  <soap:Header/>
  <soap:Body>
      <tem:EstaActivo/>
  </soap:Body>
</soap:Envelope>

La respuesta es:
Código:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
      <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
  </s:Header>
  <s:Body>
      <s:Fault>
        <s:Code>
            <s:Value>s:Sender</s:Value>
            <s:Subcode>
              <s:Value xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</s:Value>
            </s:Subcode>
        </s:Code>
        <s:Reason>
            <s:Text xml:lang="es-ES">An error occurred when verifying security for the message.</s:Text>
        </s:Reason>
      </s:Fault>
  </s:Body>
</s:Envelope>

Si hago esa misma petición desde Delphi, lo único que consigo es un timeout después de un rato.

A ver si a alguien se le ocurre algo.

Gracias.

nincillo 13-01-2024 07:41:04

Creo que he descubierto el motivo del timeout, lo que no se es como solucionarlo en la llamada desde Delphi.

Seguí haciendo pruebas desde SOAPUi y unas veces me funcionaba bien y otras me daba error de timeout. Al final me di cuenta que el timeout dependía de si tenía activado o no el check de Enable ws-a addresing. Hace falta que esté activado.

¿Cómo activo esa opción al hacer la llamada desde Delphi?

Gracias.

Casimiro Notevi 13-01-2024 19:24:07

Cita:

Empezado por nincillo (Mensaje 553992)
... El manual de instrucciones se puede descargar de aquí: https://www.mapa.gob.es/es/ganaderia...m30-485047.pdf. Por desgracia es una versión obsoleta. La versión actualizada no se de donde se puede descargar. Yo la tengo porque me la enviaron por email, pero es demasiado pesada para poder adjuntarla. ¿Es posible subirla al FTP del foro o algo así? Son poco más de dos megas...

Contacto por mensaje privado con Neftali o a mí mismo para subirlo.

nincillo 13-01-2024 20:11:27

Cita:

Empezado por Casimiro Notevi (Mensaje 553997)
Contacto por mensaje privado con Neftali o a mí mismo para subirlo.

Hecho.
Muchas gracias.

nincillo 13-01-2024 22:13:54

He conseguido los logs del SoapUI enviando la peticitón tanto activando la opción como sin activarla.

Activada:
Código:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
  <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://tempuri.org/IPresVetComunicacionPrescripcion/EstaActivo</wsa:Action></soap:Header>
  <soap:Body>
      <tem:EstaActivo/>
  </soap:Body>
</soap:Envelope>

Sin Activar

Código:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
  <soap:Header/>
  <soap:Body>
      <tem:EstaActivo/>
  </soap:Body>
</soap:Envelope>


nincillo 14-01-2024 12:35:57

Cita:

Empezado por nincillo (Mensaje 553992)
Pues eso, que como no era suficiente pegarme con el famoso VeriFactu ahora me toca pegarme con la actualización del PRESVET que tengo operativo en algunos clientes.

Hasta ahora lo tenía por el método REST pero como ahora estaba ya metido con los SOAP y la importación de los WSDL, me he decidido a intentar cambiar de manera de consumir los servicios.

El manual de instrucciones se puede descargar de aquí: https://www.mapa.gob.es/es/ganaderia...m30-485047.pdf. Por desgracia es una versión obsoleta. La versión actualizada no se de donde se puede descargar. Yo la tengo porque me la enviaron por email, pero es demasiado pesada para poder adjuntarla. ¿Es posible subirla al FTP del foro o algo así? Son poco más de dos megas.

Con las pruebas que estoy haciendo, me encuentro con dos problemas:
1) No tengo muy claro como indicar el usuario y la contraseña de acceso al servicio (aún estoy pendiente de que me las envien).
2) Por otro lado, mientras consigo esas credenciales, estoy intentando hacer peticiones para al menos obtener un error de acceso o algo así, pero lo único que consigo es un error de TimeOut.

La url actualizada del wsdl es: https://servicio.mapa.gob.es/wspresv...scripcion.wsdl


Si hago las pruebas con el SOAPUi:

Si hago la petición:
Código:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
  <soap:Header/>
  <soap:Body>
      <tem:EstaActivo/>
  </soap:Body>
</soap:Envelope>

La respuesta es:
Código:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
      <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
  </s:Header>
  <s:Body>
      <s:Fault>
        <s:Code>
            <s:Value>s:Sender</s:Value>
            <s:Subcode>
              <s:Value xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</s:Value>
            </s:Subcode>
        </s:Code>
        <s:Reason>
            <s:Text xml:lang="es-ES">An error occurred when verifying security for the message.</s:Text>
        </s:Reason>
      </s:Fault>
  </s:Body>
</s:Envelope>

Si hago esa misma petición desde Delphi, lo único que consigo es un timeout después de un rato.

A ver si a alguien se le ocurre algo.

Gracias.

Editado:
Gracias a Casimiro ya se puede descargar el fichero de aquí: https://terawiki.clubdelphi.com/Otro...embre_2023.pdf

nincillo 17-01-2024 12:22:39

Ejemplo de conexión con .NET y C#
 
Ejemplo conexión .Net y C#
Y en el cliente .net será necesario establecer la siguiente configuración:
Código:

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="BasicEndpoint">
        <security mode="TransportWithMessageCredential">
          <transport clientCredentialType="None" />
          <message clientCredentialType="UserName" establishSecurityContext="false" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
  <client>
    <endpoint address="https://servicio.mapa.gob.es/wspresvetcomunicacion/wspresvetcomunicacion.svc"
        binding="wsHttpBinding" bindingConfiguration="BasicEndpoint"
        contract="PresVetComunicacionPrescripcion.IPresVetComunicacionPrescripcion"
        name="BasicEndpoint" />
  </client>
</system.serviceModel>


static void Main(string[] args)
{
      using (PresVetComunicacionPrescripcionClient comunicacionPrescripcion = new PresVetComunicacionPrescripcionClient())
{
      comunicacionPrescripcion.ClientCredentials.UserName.UserName = "usuario";
      comunicacionPrescripcion.ClientCredentials.UserName.Password = "clave";
      System.Net.ServicePointManager.Expect100Continue = false;
      string resultado = comunicacionPrescripcion.EstaActivo();
      Console.Write(resultado);
      Console.ReadLine();
}
}

¿Alquien podría "traducirlo" a Delphi?. Gracias.


La franja horaria es GMT +2. Ahora son las 00:28:52.

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