AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SOAP-Abfrage führt zu Abstürz des Programms
Thema durchsuchen
Ansicht
Themen-Optionen

SOAP-Abfrage führt zu Abstürz des Programms

Ein Thema von Zwixx · begonnen am 18. Mär 2009 · letzter Beitrag vom 25. Mär 2009
Antwort Antwort
Zwixx

Registriert seit: 2. Nov 2006
37 Beiträge
 
Delphi 10.3 Rio
 
#1

SOAP-Abfrage führt zu Abstürz des Programms

  Alt 18. Mär 2009, 11:55
Dies ist mein erster Versuch mit SOAP unter Delphi. Ich habe einen JBoss-ApplicationServer, darauf einen WebService deployed und wollte diesen von Delphi aus zugreifen (von PHP aus funktioniert dies).

Ich gabe folgende WSDL:
XML-Code:
<definitions name='MyWebServiceService' targetNamespace='http://MyWebService/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://MyWebService/' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
 <types>
  <xs:schema targetNamespace='http://MyWebService/' version='1.0' xmlns:tns='http://MyWebService/' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
   <xs:element name='calci' type='tns:calci'/>
   <xs:element name='calciResponse' type='tns:calciResponse'/>
   <xs:element name='callc' type='tns:callc'/>
   <xs:element name='callcResponse' type='tns:callcResponse'/>
   <xs:complexType name='calci'>
    <xs:sequence>
     <xs:element minOccurs='0' name='p1' type='xs:string'/>
     <xs:element minOccurs='0' name='p2' type='xs:string'/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name='calciResponse'>
    <xs:sequence>
     <xs:element minOccurs='0' name='return' type='xs:string'/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name='callc'>
    <xs:sequence/>
   </xs:complexType>
   <xs:complexType name='callcResponse'>
    <xs:sequence>
     <xs:element minOccurs='0' name='return' type='xs:string'/>
    </xs:sequence>
   </xs:complexType>
  </xs:schema>
 </types>
 <message name='MyWebService_callc'>
  <part element='tns:callc' name='callc'></part>
 </message>
 <message name='MyWebService_calciResponse'>
  <part element='tns:calciResponse' name='calciResponse'></part>
 </message>
 <message name='MyWebService_callcResponse'>
  <part element='tns:callcResponse' name='callcResponse'></part>
 </message>
 <message name='MyWebService_calci'>
  <part element='tns:calci' name='calci'></part>
 </message>
 <portType name='MyWebService'>
  <operation name='calci' parameterOrder='calci'>
   <input message='tns:MyWebService_calci'></input>
   <output message='tns:MyWebService_calciResponse'></output>
  </operation>
  <operation name='callc' parameterOrder='callc'>
   <input message='tns:MyWebService_callc'></input>
   <output message='tns:MyWebService_callcResponse'></output>
  </operation>
 </portType>
 <binding name='MyWebServiceBinding' type='tns:MyWebService'>
  <soap:binding style='document' transport='http://schemas.xmlsoap.org/soap/http'/>
  <operation name='calci'>
   <soap:operation soapAction=''/>
   <input>
    <soap:body use='literal'/>
   </input>
   <output>
    <soap:body use='literal'/>
   </output>
  </operation>
  <operation name='callc'>
   <soap:operation soapAction=''/>
   <input>
    <soap:body use='literal'/>
   </input>
   <output>
    <soap:body use='literal'/>
   </output>
  </operation>
 </binding>
 <service name='MyWebServiceService'>
  <port binding='tns:MyWebServiceBinding' name='MyWebServicePort'>
   <soap:address location='http://testserver:8080/WebApplication/MyWebService'/>
  </port>
 </service>
</definitions>
Dieser wurde von der Netbeans IDE 6.5 erstellt und soweit ging dort auch alles.

Ich habe dann dieses Schema in Delphi 2007 über den Assistenten importiert und habe versucht es auszuführen mit:
Delphi-Quellcode:
var
  test : MyWebService;
begin
  test := GetMyWebService(True);
  showmessage(test.calci('100', '100'));
end;
der erste Aufruf Klappt (Ich bekomme anscheinend auch ein gültiges Objekt zurück)
dann...

In Projekt abc.exe trat ein Problem mit folgender Meldung auf: 'access violation at 0x7c9452f5: write of address 0x016a0fec'. Prozess angehalten.

Woran kann das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#2

Re: SOAP-Abfrage führt zu Abstürz des Programms

  Alt 18. Mär 2009, 14:26
Du erzeugst das Objekt mit dem Parameter true (das müsste der Parameter "UseWsdl" sein). Geb hier mal false rein.
Ich weiss nicht warum, aber die Indys (die im Hintergrund die ganze Seifenschmierei machen) kommen damit nicht wirklich klar.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Zwixx

Registriert seit: 2. Nov 2006
37 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: SOAP-Abfrage führt zu Abstürz des Programms

  Alt 19. Mär 2009, 08:59
danke für die Antwort,

hatte ich auch probiert... leider keine Änderung... ich habe jetzt das ganze wsdl weggeworfen und habe in Eclipse selber eines zusammengeklickt... auf einmal funktioniert es auch in Delphi. Er scheint mit der Struktur des wsdl nicht klar zu kommen wie mir das aussieht... k.a.

jetzt habe ich das nächste Problem... die parameter kommen weder in der php-version noch in der Delphi-Version bei dem java-Programm an... ich mache in dem java-Programm lediglich ein

return p1 + p2;

als Ergebnis bekomme ich in Delphi und in PHP "nullnull". Dies wird dann aber nicht an Delphi liegen, sondern da wird wohl applikationsserverseitig irgendwas schief gehen, da die Daten an den Appliaktionsserver übergeben werden.

EDIT: Nach einigen Aufrufen des Programms wieder der gleiche Absturz... aber nur innerhalb der IDE, ausserhalb ist alles wie gehabt bei dem Ergebnis "nullnull"
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: SOAP-Abfrage führt zu Abstürz des Programms

  Alt 19. Mär 2009, 18:41
Hallo

vielleicht hilft es dir, mal zu vergleichen, was als soap-envelope übertragen wird.

Ich würde mal SoapUI oder soapscope probieren, damit kannst Du den Webserice testen, ohne ein Stückchen code zu schreiben. einfach wsdl aufrufen und du kannst die Methoden einfach ausprobieren. Mit beiden Programmen kannst du Den Request und die Response als xml anzeigen lassen und mal mit deinem Delphi-programm vergleichen:

Du kannst eine httprio-Komponente mit auf die Form zeihen und deinen Aufruf in
test := GetMyWebService(false,'',HttpRio) ändern.
in der httprio-Kompo hast du dann 2 Ereignisse onbeforeexecute und onafterexecute

Delphi-Quellcode:
procedure TForm_xyz.HTTPRIODebugAfterExecute(const MethodName: string; SOAPResponse: TStream);
Var sl:Tstrings;
begin
  sl:=TStringList.Create;
  try
    sl.LoadFromStream(SOAPResponse);

    sl.SaveToFile('blub:\'+'SoapResponse.xml');
  finally
    sl.free;
  end;
end;
Delphi-Quellcode:
procedure TForm_xyz.HTTPRIODebugBeforeExecute(const MethodName: string; var SOAPRequest: WideString);
Var sl:Tstrings;
begin
  sl:=TStringList.Create;
  try
    sl.Text:=SOAPRequest;
    sl.SaveToFile('blub:\'+'Soaprequest.xml');
  finally
    sl.free;
  end;
end;
ich habe teilweise das Problem, das irgendwelche Schemas nicht richtig gesetzt werden. Ich muß immer den request anpassen, weil ich keine andere Lösung weiß.

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Zwixx

Registriert seit: 2. Nov 2006
37 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: SOAP-Abfrage führt zu Abstürz des Programms

  Alt 25. Mär 2009, 08:04
ic habe die Lösung gefunden. Anscheinend hat der Importer von Delphi ein kleines Problem und hat da was durcheinander gebracht... als ich die Zeile

InvRegistry.RegisterInvokeOptions(TypeInfo(NewWSDLFile), ioDocument); gelöscht habe... lief alles so wie ich wollte
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz