FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Mismo Problema
Hola APO
He realizado la implementación en Delphi y además desde .Net con c# Al realizar la llamada Ie215V1, la respuesta devuelta es null, empiezo a pensar que el mensaje que devuelve el servicio no es parseable al objeto (no lo se)... Por favor, si alguién diera con la solución del problema indicadlo. Un saludo y gracias |
#2
|
|||
|
|||
me pasa lo mismo
Cita:
yo estoy haciendo la implementacion en .Net con c# también. tengo el mismo problema, la respuesta siempre es null. analizando con wireshark, compruebo que si tengo respuesta, por lo que el problema es que no se puede parsear a objeto. encontré una página web, donde se puede validar el esquema wsdl wsdl-analyzer(punto)com fuí subiendo el equema, y me dice que hay el siguiente error (por si puede servirle a alguien) Ie215V1SoapBinding The part of the message 'Salida' references a schema type instead of a schema element. revisando el archivo Reference.cs del servicio veo lo siguiente en la clase salida public partial class Salida { [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)] public WasAvituallamientos.Ie215V1Service.Ie215V1SalType Ie215V1Sal; public Salida() { } public Salida(WasAvituallamientos.Ie215V1Service.Ie215V1SalType Ie215V1Sal) { this.Ie215V1Sal = Ie215V1Sal; } } el Namespace está vacío, en todas los demás tipos, hay un xsd, pero en este no. creo que el problema viene por aqui, la duda es que asignamos en el namespace para que pueda parsearlo. a alguien se le ocurre algo? saludos. |
#3
|
|||
|
|||
Cita:
Hola, En mi caso estoy implementándolo en Delphi XE8 y en la unidad que me genera el WSDL de importación me pone estos namespace en el esquema de salida Ie215V1SalType:
Y algo curioso, es que en la función para consumir el WebService me pone 'Cannot unwrap'. ¿Será por esto que no puede parsearlo correctamente?:
Revisando la documentación hay dos esquemas de salida, uno para cuando el mensaje es aceptado y otro para cuando es rechazado. Son estos: El diseño del esquema de salida correcta: https://www3.agenciatributaria.gob.e...Ie201V1Sal.xsd El diseño del esquema de salida para los albaranes incorrectos: https://www3.agenciatributaria.gob.e...Ie204V1Sal.xsd A ver si entre todos podemos conseguirlo. Gracias!! |
#4
|
|||
|
|||
Este es el PDF donde se encuentra la documentación técnica:
https://www3.agenciatributaria.gob.e...t/ws/Ie215.pdf Última edición por APO fecha: 08-05-2019 a las 11:09:24. |
#5
|
|||
|
|||
hola APO
no tengo ni idea de delphi, pero supongo que sucederá lo mismo que en .NET el objeto que tiene que resolver es el Ie215V1SalType que sería el "padre" de Ie201V1Sal y Ie204V1Sal (está en el esquema que pusiste antes) la definición de Ie215V1SalType está definido dentro de Ie215V1.wsdl, no como los demás que hay un XSD en una url, por ejemplo Ie215V1Ent que en .NET si pone el namespace https://www3.agenciatributaria.gob.e...Ie215V1Ent.xsd |
#6
|
|||
|
|||
Hola de nuevo,
Me han respondido de la AEAT sobre la consulta que les hice respecto a que la respuesta del WebService venía vacía a null. Pongo textualmente lo que me han respondido: Buenos días: Hay gente que tiene problemas con que la salida pueda tienes dos tipos de salida. Para eso tenemos diferentes soluciones. Te paso las posibles modificaciones (sobre ejemplos de los esquemas del EMCS) que se pueden realizar sobre los ficheros wsdl's que sabemos que han encontrado y aplicado satisfactoriamente algunas empresas que tuvieron este problema. La primera, que mejor ha funcionado y que aplicasteis ya en el EMCS, es desplegar los wsdl's cambiando, sobre el fichero wsdl, la definición del mensaje de salida dejándolo de la siguiente forma: <wsdl:message name="Salida"> <wsdl : part name="Ie215V1Sal1" element="Sal201:Ie201" /> <wsdl : part name="Ie215V1Sal2" element="Sal204:Ie204" /> </wsdl:message> Con esto, en lugar de hacer referencia al tipo complejo que nosotros tenemos declarado, se definen las salidas como elementos, declarando los 2 posibles elementos raíz que la invocación al Servicio Web puede retornar, con lo que la definición del tipo complejo Ie215V1SalType puede eliminarse del wsdl. Se debe tener en cuenta también que el Servicio Web puede, además, devolver mensajes del tipo SOAP FAULT. La segunda consiste en el uso de una definición del elemento del tipo 'sequence' cuyos elementos presenten ocurrencias mínimas 0; Dado que el control de respuesta recae en nuestro lado, siempre os aseguramos que solo uno de los dos elementos de la secuencia va a ser devuelto, salvo el caso del SOAP FAULT: <xs:complexType name="Ie215V1SalType"> <xs:sequence> <xs:element ref="Sal201:Ie201" minOccurs="0"></xs:element> <xs:element ref="Sal204:Ie204" minOccurs="0"></xs:element> </xs:sequence> </xs:complexType> Por último, definir un elemento del tipo 'all' con el atributo indicador de las ocurrencias mínimas igual a 0 que da a entender que los elementos hijos (CD815A/CD704A) pueden ser devueltos en cualesquiera orden, pudiendo aparecer los mismos ninguna o una vez; Como antes, dicho control recae en nuestro lado y SIEMPRE os será devuelto uno de los dos, nunca ambos, y nunca ninguno, salvo en el caso particular del SOAP FAULT. <xs:complexType name="Ie215V1SalType"> <xs:all minOccurs="0"> <xs:element ref="Sal201:Ie201"></xs:element> <xs:element ref="Sal204:Ie204"></xs:element> </xs:all> </xs:complexType> Atentamente, AEAT ¿Qué entendéis de todo esto? Yo no sé si lo he entendido muy bien, pero da a entender que se debe modificar el WSDL? O quizá modificar la unidad que genera el WSDL al importar? He probado de modificar el WSDL ( https://www3.agenciatributaria.gob.e...s/Ie215V1.wsdl ) así: Sustituir esta parte: Código:
<wsdl:message name="Salida"> <wsdl:part type="Ie215V1SalType" name="Ie215V1Sal"/> </wsdl:message> Código:
<wsdl:message name="Salida"> <wsdl:part name="Ie215V1Sal1" element="Sal201:Ie201" /> <wsdl:part name="Ie215V1Sal2" element="Sal204:Ie204" /> </wsdl:message> Última edición por Casimiro Notevi fecha: 09-05-2019 a las 18:06:41. |
#7
|
|||
|
|||
hola apo
he probado la primera parte y me funcionó. ya me dirás a que correo enviaste la pregunta, yo envié uno aemcs(arroba)correo.aeat.es pero no me contestaron. podrían publicar esto en las faq de la aeat, nos libraría de muchos dolores de cabeza... te cuento lo que hice, yo lo hice en .NET, pero espero que te pueda ayudar. me descarge el wsdl de la página de hacienda, y los todos los xsd necesarios, los guardas todos en una carpeta modificas con el bloc de notas el archivo wsdl, y en la parte donde define el Ie215V1SalType pones el que pusiste tu. luego cuando añades la referencia al servicio en .NET, normalmente agregas una url, ahora tines que hacer referencia a un archivo del disco duro. se añade la referencia al servicio, y a partir de aquí ya es como siempre. lo que ví que cambió, es que antes la llamada al servicio era así: Código:
Ie215V1SalType respuesta = cliente.Ie215V1(ie215Tipo); Código:
cliente.Ie215V1(ie215Tipo, out Ie215V1Service2.IE204Tipo iE204); sigo recibiendo el error 07009-Mensaje YA consumido con anterioridad y rechazado. pero eso ya es otra historia ahora por lo menos no recibo null muchas gracias APO y al señor de AEAT también si alguien se anima a probar el resto de opciones, que publique a ver que tal les fué. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Consumir Webservice | darkerbyte | Delphi para la web | 5 | 17-11-2012 20:59:50 |
Consumir un webservice echo en delphi con php | anahuel | Delphi para la web | 3 | 27-10-2012 07:20:42 |
Consumir WebService | nasedo | Varios | 1 | 11-08-2011 14:32:57 |
Consumir Webservice | MARLON1 | Internet | 0 | 06-07-2011 00:07:12 |
Problema al consumir un Webservice | netcigos | Varios | 0 | 08-03-2004 15:09:30 |
|