Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei? (https://www.delphipraxis.net/63134-%5Bphp-soap-wsdl%5D-fehlerhafte-wsdl-datei.html)

Chewie 14. Feb 2006 12:43


[PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?
 
Ich experimentiere gerade etwas mit SOAP und WSDL, dazu verwende ich PHP. Ich möchte für den Anfang eine einfache Funktion exportieren, die einfach eine Ganzzahl zurückgibt. Und halt das volle Programm mit SOAP und einer WSDL-Datei.

Die beteiligten Dateien:

Der PHP-Server:
Code:
<?php

function getAmount() {
   return 1.0;
}

ini_set('soap.wsdl_cache_enabled', "0");

$server = new SoapServer('bierometer.wsdl');
$server->addFunction('getAmount');

$server->handle();

?>
Der PHP-Client:
Code:
?php

ini_set('display_errors', 'on');

echo 'Fange an...
';
$client = new SoapClient('bierometer.wsdl');
echo 'Menge: ';
echo $client->getAmount();



?>
Die WSDL-Datei:

XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<definitions name="BierOMeter"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
   xmlns="http://schemas.xmlsoap.org/wsdl/">

   <message name="getAmountResponse">
      <part name="Result" type="xsd:float"/>
   </message>

   <portType name="BierOMeterPortType">
      <operation name="getAmount">
         <output message="getAmountResponse"/>
      </operation>
   </portType>

   <binding name="BierOMeterBinding" type="BierOMeterPortType">
      <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="getAmount">
         <soap:operation soapAction="urn:BierOMeter"/>
         <input>
            <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:BierOMeter" use="encoded" />
         </input>
         <output>
             <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:BierOMeter" use="encoded" />
         </output>
     </operation>
   </binding>

   <service name="BierOMeterService">
      <port name="BierOMeterPortType" binding="BierOMeterBinding">
         <soap:address location="http://localhost/soap.php"/>
      </port>
   </service>

</definitions>

Beim Aufruf des Clients bekomm ich folgenden Fehler:
Zitat:

Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] looks like we got no XML document in C:\Web\soap\client.php:8
Stack trace:
#0 C:\Web\soap\client.php(8): SoapClient->__call('getAmount', Array)
#1 C:\Web\soap\client.php(8): SoapClient->getAmount()
#2 {main} thrown in C:\Web\soap\client.php on line 8

Als ich testweise die Datei im Visual Studio importieren wollte, klappte das auch nicht (ich weiß den Fehler aber nicht mehr). Ich scließe daraus, dass der Fehler in der WSDL-Datei liegt. Leider bin ich auf dem Gebiet völliger Anfänger und hab mir das da oben alles aus Tutorials gesaugt, sodass ich den Fehler nicht selber finde.

Kennt sich hier jemand vielleicht gut damit aus und kann mir einen Tipp geben?

Dankeschön!

czapie 14. Feb 2006 15:21

Re: [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?
 
Hallo Chewie,

ich bin zwar noch nicht so lange auf diesem Gebiet unterwegs und von daher auch kein Profi, aber schauen wir mal ;o)

Probier doch mal bitte bei der Definition deiner Operationen im PortType-Teil auch eine "input"-Message zu definieren.
Folgendermaßen:

Delphi-Quellcode:
...
   <message name="getAmountResponse">
      <part name="Result" type="xsd:float"/>
   </message>
   <message name="getAmountRequest">
   </message>

   <portType name="BierOMeterPortType">
      <operation name="getAmount">
         <input message="getAmountRequest" />
         <output message="getAmountResponse"/>
      </operation>
   </portType>
...
Muss nicht helfen, kann aber. Ansonsten bin ich dazu übergegangen zuerst die WSDL-Dateien mit Hilfe von geeigneten Editoren zu erstellen
und dann den entsprechenden Rest, Top-Down also.

Viel Erfolg.

r_kerber 15. Feb 2006 04:22

Re: [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?
 
Zitat:

Zitat von Chewie
Als ich testweise die Datei im Visual Studio importieren wollte, ...

Da Du schon VS hast, dann bastele Dir doch denselben SOAP-Service mal damit und laß ihn im IIS oder im Cassini laufen. Mit ASP.Net werden die WSDL-Dateien automatisch zur Laufzeit erzeugt. Und dann einfach Copy & Paste.

Jelly 15. Feb 2006 07:37

Re: [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?
 
Vielleicht hilft ja diese Seite weiter.

Zitat:

Zitat von r_kerber
Da Du schon VS hast, dann bastele Dir doch denselben SOAP-Service mal damit und laß ihn im IIS oder im Cassini laufen. Mit ASP.Net werden die WSDL-Dateien automatisch zur Laufzeit erzeugt. Und dann einfach Copy & Paste.

Uii.... Und ich dacht ich wär der Einzige mit der idee gewesen. Da aber das Beispiel das ich verlinkt habe, bei mir mir nicht klappte (also einen .NET Webdienst den ich unter Delphi.NET erstellt habe), per PHP auf diesen Dienst zuzugreifen, dachte ich mehr daran, dass PHP prinzipiell nichts mit diesen .NET Diensten anzufangen weiss...

Geht das also doch... Also ein .NET Dienst über PHP zu benutzen.. (PHP v.5 vorausgesetzt) :gruebel:

Chewie 15. Feb 2006 12:20

Re: [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?
 
@czapie:

Das Hinzufügen des Requests hat nichts geändert.


@r_kerber:
Mir die WSDL vom VS generieren zu lassen, daran dachte ich schon, speziell nachdem ich gestern ein Tutorial gefunden habe, in dem 3 Projekte verwendet werden: Eines für den Client, eines für den Server (also die Prozeduren) und eines für den "Vertrag" dazwischen. Wäre eine Notlösung.

Aber das Tutorial von Jelly sieht natürlich für meine Zwecke vielversprechender aus :)
Ich werd mir alles mal ankucken und geb dann feedback, wie's gelaufen ist.

Chewie 15. Feb 2006 12:53

Re: [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?
 
Oh Mann, ich bin doch doof.... :wall:


Der Fehler ist ganz einfach und dumm:

XML-Code:
<soap:address location="http://localhost/soap.php"/>

Ich hätte hier vielleicht einfach die richtige Adresse angeben sollen :duck:

Nun ja, immerhin hab ich jetzt einiges über WSDL gelernt. Danke für eure Zeit!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 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