2010-11-10 47 views
3

J'ai besoin de parler à un service web et j'ai donc importé le WSDL. J'essaie maintenant de l'appeler mais il signale cette exception: No Native to Message converter set
Très, très énervant, d'autant plus que je n'ai pas la permission de poster des extraits de code de ce service ici. Encore faut-il essayer ... Est-ce que quelqu'un a des suggestions sur la façon de corriger cette erreur?Que signifie "Aucun convertisseur natif pour message"?


L'erreur est générée dans rio.pas dans la fonction TRIO.Generic. Cette ligne:

if not Assigned(FConverter) then 
    raise Exception.Create(SNoMessageConverter); 

Pour des raisons inconnues, FConverter est fixé à zéro, donc l'exception est générée. Cela arrive même avant que la demande soit envoyée. Rien n'est envoyé au service, car Delphi se bloque avant même d'avoir pu appeler le service.


Options d'importation WSDL, vérifier les options:

  • Un Outparam est de retour
  • Unwind params littérales
  • Generate Destructeurs
  • Avertissement Commentaires
  • chaîne de la carte à WideString
  • Générer des informations détaillées types de t et les interfaces
  • Ignore portTypes avec les liaisons HTTP
  • Ne pas émettre les types inutilisés
  • Valider les types énumération
  • Importer les types de défauts
  • Importer les types d'en-tête
  • processus inclus et les schémas importés
  • Générer alias de classe en tant que types de classe
  • Traiter les éléments à rainurer et les éléments optionnels

En fait, Mon système est nouveau, Delphi a été installé il y a environ 3 jours et l'importation de ce fichier WSDL a été la première chose que j'ai faite, essentiellement en utilisant ces paramètres par défaut.

+0

Veuillez indiquer votre version Delphi, et si vous avez appliqué des correctifs, tels que le patch D2005 avec les bibliothèques SOAP D2007. Indiquez également la version de l'importateur WSDL que vous avez utilisé et les options. Indiquez également le type de document. Pourquoi? Ce sont généralement les premières choses que les gens vous recommanderont de changer d'un côté ou de l'autre. –

+0

Chris, l'étiquette delphi-2007 n'est-elle pas assez claire? –

Répondre

2

Utilisez SoapUI consommer le WSDL et faire un service fictif. Pointez votre application sur votre service client SoapUI et vous pourrez capturer vos demandes sortantes. Vous pouvez maintenant retourner et soumettre ces demandes au service et voir la réponse. Cela devrait vous donner une idée de l'origine du message. c'est-à-dire provient-il de la bibliothèque SOAP de Delphi en raison de quelque chose qu'elle ne comprend pas, ou provient-elle du service Web lui-même, suite à quelque chose que l'informatique n'a pas compris dans votre requête?

Alternativement, vous pouvez le faire dans Delphi: Intercepter le XML entrant/sortant en exploitant les événements RIO_BeforeExecute/RIO_AfterExecute de votre objet HttpRIO.

Si votre trafic est http (plus difficile avec SSL mais possible), vous pouvez également intercepter avec Fiddler2. Une fois que vous avez le XML brut, soumettez des requêtes avec SoapUI, et voyez ce que vous obtenez. Vous pouvez trouver que vos requêtes ont besoin d'être "peaufinées", ou si tout va bien dans SoapUI, vous devrez peut-être modifier les réponses avant la sérialisation.