2009-01-20 6 views
3

Je rencontre un problème avec Delphi 2007 lorsque j'essaie de consommer un service Web que j'ai configuré en Java à l'aide de JAX-WS. Le service Web peut être utilisé à partir d'un autre programme Java et à partir d'un site Web C#/ASP.NET 2.0. Toutefois, lorsque j'essaie d'accéder au même service à l'aide de WSDL Importer dans Delphi 2007 (correctif 17-DEc-2007), le service Web JAX-WS ne reconnaît aucun des paramètres que je transmets et les annule.Delphi 2007 ne consomme pas le service Web JAX-WS correctement

J'ai vérifié le message SOAP qui est passé par Delphi et l'ai comparé aux autres et ils sont à peu près identiques (à l'exception de quelques espaces de noms négligeables et beaucoup d'état d'affichage du .NET! J'ai également été sur le web (lien le plus utile était http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798 du Dr Bob) mais pas de joie.

Est-ce que quelqu'un a déjà rencontré ça?

TIA.


La saga continue! Après avoir enculé l'objet HTTPRIO pour essayer de le faire fonctionner, j'ai finalement abandonné et essayé un transfert XML direct sur HTTP. Échouer. OK, donc j'ai construit un simple testeur en C# et j'ai essayé ça. Fonctionne pas de problème. En utilisant Fiddler pour voir ce qui était envoyé en avant et en arrière, il semblait que la seule différence était dans les espaces de noms. J'ai changé les espaces de noms dans l'envoi XML en Delphi et ... ça marche!

C'était un échantillon du XML d'origine étant généré par le WSDLImporter:

<?xml version="1.0"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <version xmlns="http://path.to.service.com/"> 
      <input>test</input> 
     </version> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

et voici ce qui fonctionne réellement:

<?xml version="1.0"?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <ns2:version xmlns:ns2="http://path.to.service.com/"> 
      <input>test</input> 
     </ns2:version> 
    </S:Body> 
</S:Envelope> 

Alors, maintenant que je sais, je fais, je allez-vous changer les valeurs de l'espace de noms pour le code WSDLImporter? Je ne vois rien d'évident sur les propriétés HTTPRIO.

TIA

Répondre

4

HA HA IL VIT !!!

Fondamentalement, je devais prendre le recommandé

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument); 

et le forcer à utiliser Sec. 5 encodage. Les espaces de noms sont générés selon les besoins et les paramètres sont transmis au service Web Java.

droit, ont besoin de la bière, beaucoup de bière :)

+0

Je peux vérifier que commenter cette ligne résout le problème pour un service Web JAX-WS. Je ne peux pas vérifier l'efficacité de beaucoup de bière si ;-) –

1

pas la solution à votre problème, mais j'avais été en difficulté récemment avec le même environnement. J'ai dû changer les options plusieurs fois jusqu'à trouver la bonne façon de consommer le webservice (écrit en C#).

Vérifier:

- THTTPRIO.Converter.Options 
- THTTPRIO.HTTPWebNode 
- THTTPRIO.HTTPWebNode.InvokeOptions 
+0

Encore une fois, mes remerciements César! Je pense que vous devez me donner votre numéro abrégé;) –

+0

Désolé, vous avez oublié de marquer votre réponse! –

+0

Bon à savoir, ça vous aide. –

1

Je me suis cogné la tête contre le mur pendant deux jours, jusqu'à ce que je trouve ce post ... Et soupçon Cesars pour vérifier THTTPRIO.Converter.Options ...J'ai essayé presque tout, le dernier était de mettre siXXXXHdr à vrai -> puis est arrivé quelque chose d'étrange, pas plus de nulls au serveur: O ...

Je ne sais pas pourquoi ce paramètre fait passer les valeurs, il fait juste (au moins pour moi).

Serait bien si quelqu'un qui comprend réellement ce qui se passe pourrait expliquer cela.

1

Suppression soSendMultiRefObj de Converter.Options aide

+0

Un peu plus d'informations est toujours utile. – simonmorley

2

Vous devez simplement commenter cette ligne dans votre WSDL:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument); 

Ça suffit ... amusez-vous.

+0

C'était en effet assez. Merci pour le conseil. Ce serait cool si vous expliquiez ce que cette ligne commentée fait et pourquoi elle devrait être supprimée. –

Questions connexes