AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?

[PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?

Ein Thema von Chewie · begonnen am 14. Feb 2006 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?

  Alt 14. Feb 2006, 13:43
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!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#2

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

  Alt 14. Feb 2006, 16:21
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.
Was man zu verstehen gelernt hat, fürchtet man nicht mehr.
(Marie Curie)
http://www.cafes-in-berlin.com
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

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

  Alt 15. Feb 2006, 05:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

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

  Alt 15. Feb 2006, 08:37
Vielleicht hilft ja diese Seite weiter.

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)
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 15. Feb 2006, 13:20
@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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 15. Feb 2006, 13:53
Oh Mann, ich bin doch doof....


Der Fehler ist ganz einfach und dumm:

<soap:address location="http://localhost/soap.php"/>
Ich hätte hier vielleicht einfach die richtige Adresse angeben sollen

Nun ja, immerhin hab ich jetzt einiges über WSDL gelernt. Danke für eure Zeit!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:20 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