2009-04-20 7 views
3

Ich habe versucht, einen Soap-Server zu bekommen, der eine WSDL-Spezifikation von einer dritten Partei implementiert (ist das der richtige Begriff?). Ich habe Delphis WSDL-Importer benutzt. (Teil) sieht den generierten Code wie folgt aus:WSDL-Importeur erzeugt fehlerhaften Server

miniPortType = interface(IInvokable) 
['{824D172A-9C1F-D202-5B21-4C324553BCF0}'] 

    // Cannot unwrap: 
    // - Input element wrapper name does not match operation's name 
    function miniService(const aMessage: MiniMessageType): MiniAnswerType; stdcall; 
end; 

Wenn sie aufgerufen wird, wird der Server sagt, dass „ Keine Methode mit dem Namen‚MiniMessageType‘durch die Schnittstelle unterstützt wird‚miniPortType‘“.

Ich kann nur funktionieren, indem Sie den Namen der Funktion und den Namen des Hauptelements der Nachricht gleich machen.

Ich denke, es sollte möglich sein, verschiedene Namen zu haben. Wenigstens beschwert sich daapUI nicht. Und ich habe eigentlich keine andere Wahl, als das WSDL so zu implementieren, wie es ist. Weiß jemand, wie ich das umgehen kann?

Ich verwende Delphi 2007

Danke, Miel.

+1

Welche Version von Delphi verwenden Sie? –

+0

Was hast du am Ende gemacht? Ich hatte gehofft, hier eine nützliche Lösung zu finden. –

+2

@chris Ich habe es aufgegeben, in Delphi SOAP-Dienste zu schreiben. Ich finde den Mangel an Unterstützung für SOAP in Delphi störend. Speziell für Dienstleistungen. Ich schreibe jetzt diese in C#. Die offizielle Embarcadero-Haltung scheint zu sein, dass Dienste in Prism geschrieben werden sollten ... – Miel

Antwort

0

Wenn ich mich richtig erinnere, ist die SOAP-Schnittstelle tatsächlich in einer "Tabelle" am Ende der Definitionen definiert, und dies ist es, die für die Konvertierung zwischen Delphi-Typen und SOAP-Typen in der Kommunikation verwendet wird. Ich habe diese Art von Dingen in der Vergangenheit "korrigiert", indem ich die Aufrufe des Tabellenaufbaus manuell geändert habe, aber Sie müssen vorsichtig sein und müssen möglicherweise auch den SOAP-Text an der entsprechenden Stelle verfehlen, um alles in Ordnung zu bringen.

+0

Ich hatte ein ähnliches Problem. Das neueste wsdlimp konnte keine Felder für die Soap-Header generieren. Die Felder für die Header wurden jedoch generiert. Um die Methode ausführen zu können, musste ich also alle Header instanziieren und eins nach dem anderen vor der Ausführung der Methode senden. RIO.SoapHeader.Send(); Ich hoffe, dass es jemandem hilft. – John

Verwandte Themen