J'ai un problème pour accéder à un service Web via Delphi. J'ai consommé un fichier WSDL Java avec la version 2007 de l'outil WSDLimp et il semble que tous les objets aient été créés correctement. Quand je fais un programme de testeur cependant qui appelle le service, chaque objet est vide. Si je vide l'objet SOAPResponse dans la méthode HTTPRIOAfterExecute, je peux voir que j'ai récupéré un paquet de Soap XML correctement formaté qui contient toutes les données auxquelles je m'attendais, mais je ne peux pas y accéder via les objets. Alors, y a-t-il quelque chose qui me manque?Problème des services Web Delphi 2005
Répondre
La réponse du service Web contient des espaces de noms aliasés pour chaque attribut. Ces alias ne sont pas définis dans le fichier WSDL. Par exemple, le WSDL contient un espace de noms de "http://www.example.com/SomeService" et les alias de requête qui sont à la volée en tant que xmlns: ns3 = "http://www.example.com/SomeService" dans le nœud de niveau supérieur. Les attributs de la réponse ressemblent donc à ns3: somePropertyName = "[value]".
Dans l'unité OPToSOAPDomConv, dans TSOAPDomConv.InitObjectFromSOAP, il tente de rechercher un nom d'attribut sans le préfixe d'espace de noms. Cela provoque l'échec de la recherche et la suppression de la propriété d'objet. Cela arrive même avec les fichiers source 2007.
La meilleure solution que je peux voir est de modifier la routine InitObjectFromSOAP.
Vers la ligne 4181, ajouter:
RemTypeRegistry.InfoToURI(PropList[i].PropType^, NS, PropName, IsScalar);
et changer le AttrNode.HasAttribute pour passer la variable NS comme un second paramètre, il ressemble à:
if AttrNode.HasAttribute(ExternalPropName, NS) then
En outre, quelques lignes vers le bas est un appel SetObjectPropFromText. Le dernier paramètre est la valeur d'attribut, et vous aurez besoin de changer Attr.Attributes [ExternalPropName] pour
SetObjectPropFromText(Instance, PropList[I], AttrNode.GetAttributeNS(ExternalPropName, NS))
Et bien sûr, déclarer le NS, PropName et IsScalar vars.
Vous pouvez essayer la solution discutée à http://www.borlandtalk.com/1-vt102378.html?start=0
Delphi a laissé tomber la balle sur le soutien du service Web après Delphi 7 et n'a pas obtenu leur acte nouveau ensemble jusqu'à Delphi 2007 (bien que 2006 a été une amélioration).
Si cela fonctionne pour vous dans Delphi 2007, vous pouvez probablement travailler dans Delphi 2005 en utilisant l'environnement d'exécution SOAP mis à jour.
Je n'ai malheureusement pas accès à D2007. J'ai utilisé le WSDLimp qui est référencé dans votre lien.J'ai définitivement remarqué que le D2005 créait un code incroyablement mauvais. Je pense que mon problème se produit où la réponse SOAP est traduite dans les objets. Une idée où cela se produit? J'ai essayé de passer en revue le code mais je n'ai pas vu où cela essaye même de se produire. – mcmar
Utilisez-vous les unités mises à jour à partir du même lien? Ils sont ce que Delphi 2007 utilise et seront capables de gérer l'unité générée par le nouveau WSDLImp et les paquets SOAP du service Web. –
J'avouerai que je n'utilisais pas la source mise à jour jusqu'à hier quand j'ai réalisé qu'il y avait une source avec le nouveau WSDL. Mais j'obtiens exactement les mêmes résultats de toute façon. – mcmar
Je relis la question et le fait que c'est un service Web Java m'a rappelé quelque chose. Veillez à utiliser les dernières unités WSDLImp et SOAP. Recherchez dans l'unité importée l'appel à RegisterInvokeOptions. Le second paramètre devrait être ioDocument. Que se passe-t-il si vous changez cela en ioDefault?
Je me souviens d'un post quelque part qui suggérait cela pour les services web Java NetBeans (peut-être?), Mais je ne l'ai pas essayé.
- 1. Problème d'installation de SQL 2005 Analysis Services
- 2. Toute personne utilisant les services Web Bing Map avec Delphi?
- 3. Reporting Services 2005 Filter
- 4. Problème de connexion Reporting Services 2005 à OpenEdge 10.2A pilote
- 5. Services Web standard v Services Web sécurisés
- 6. Tâche de service Web SQL Integration Services Problème
- 7. Contrôle des services Windows via le Web?
- 8. Utilisation des services Web dans SQL Server Integration Services (SSIS)
- 9. Utilisation des services Web dans différents environnements
- 10. service Web Delphi Importateur et caractère NonAscii Problème
- 11. Mise à l'échelle correcte des graphiques dans Reporting Services 2005
- 12. Débogage des services Web ASP.NET C#
- 13. Outils pour développer des services Web RESTful
- 14. Comment déboguer des services Web dans Silverlight
- 15. Déplacement des services Web ASP.net vers WCF
- 16. Meilleure pratique pour exposer des services Web
- 17. Graphes à deux axes - Reporting Services 2005
- 18. Delphi SearchText Problème
- 19. (delphi) imprimer problème d'image
- 20. Reporting Services 2005 - paramètres dépendent des paramètres en cascade
- 21. Développement de services Web
- 22. Services Web affacturage?
- 23. Delphi 2009 Web Services "le document XML doit avoir un élément de niveau supérieur"
- 24. Generic .Net Web Services
- 25. Mono C# services web
- 26. Licences SQL Server Reporting Services 2005
- 27. Wrapping Web-Services pour COM
- 28. Aide Delphi et Sql Server 2005
- 29. problème de programmation avec des fichiers xml dans delphi
- 30. Amazon Web Services
Puisque vous utilisez l'importateur de ligne de commande au lieu de l'IDE, voici une référence pratique. http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/FR/html/devwin32/wsdlimp_xml.html –