SoapServer mit wsdl Datei

Hallo,
ich versuche ein WebService mit php zuerstellen. Bei der Benutztung mit
meiner wsdl-Datei bekomme ich auf Client aber eine Fehlermeldung

Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Server] Procedure
'eins' not present in E:\www\Apache2\htdocs\wsdl\client.php:7 Stack trace:
#0 [internal function]: SoapClient->__call('add', Array) #1
E:\www\Apache2\htdocs\wsdl\client.php(7): SoapClient->add(Object(SoapParam),
Object(SoapParam)) #2 {main} thrown in E:\www\Apache2\htdocs\wsdl\client.php
on line 7

Zu sehen ist das in http://jew.no-ip.biz/wsdl/
Ich verstehe nicht warum php versucht 'eins' als Procedure zu interpretiren.

Ich hoffe mir kann noch geholfen werden.
Jens
Jens Wichmann [ Fr, 04 Januar 2008 11:39 ] [ ID #1899921 ]

Re: SoapServer mit wsdl Datei

Jens Wichmann schrieb:

> Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Server] Procedure
> 'eins' not present in E:\www\Apache2\htdocs\wsdl\client.php:7 Stack trace:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Wenn Du willst, dass wir Dir helfen, solltest Du dieses PHP-Script hier
posten, damit wir uns die Stelle einmal anschauen können. Ich wüsste
nicht, wie wir Dir sonst helfen können sollen.

Gruß. Claus
Claus Reibenstein [ Fr, 04 Januar 2008 15:15 ] [ ID #1899923 ]

Re: SoapServer mit wsdl Datei

> Wenn Du willst, dass wir Dir helfen, solltest Du dieses PHP-Script hier
> posten, damit wir uns die Stelle einmal anschauen können. Ich wüsste
> nicht, wie wir Dir sonst helfen können sollen.
>
> Gruß. Claus

du meinst ich muss den seiten langen code hir rein packen an stelle des
links den ich geschrieben hab?

ok, aber nur die kurzform,
wer das alles sehen will benutzt bitte http://jew.no-ip.biz/wsdl/.

Server.php
------------
<?php
define("wsdlFile", "muster2.wsdl");

$server = new SoapServer(wsdlFile);
$server->setClass('clsTest');

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$server->handle();
} else {
switch (strtolower($_SERVER['QUERY_STRING'])){
case 'add':
$d = new clsTest();
echo "<pre>\n1 + 2 = ".htmlentities($d->add(1,2))."</pre>";
break;
case 'welt':
$d = new clsTest();
echo "<pre>".htmlentities($d->getWelt())."</pre>";
break;
case 'wsdl':
header('Content-Type: text/xml');
readfile(wsdlFile);
break;
}
}

class clsTest {
function getWelt() {
return "hallo Welt";
}
function add($eins, $zwei) {
return $eins + $zwei;
}
}
?>
Client.php----------<?php
include("localconfig.inc.php");
$client = new SoapClient("http://jew.no-ip.biz/wsdl/server.php?wsdl",
$login);
$result = $client->add(new SoapParam(1, "eins"), new SoapParam(6, "zwei"));
echo $result."<br>\n";
$result = $client->getWelt();
echo $result."<br>\n";
?>muster2.wsdl-------------<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="MusterWSDL"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<message name="outString">
<part name="text" type="xsd:string"/>
</message>
<message name="inAdd">
<part name="eins" type="xsd:int"/>
<part name="zwei" type="xsd:int"/>
</message>
<message name="outAdd">
<part name="summe" type="xsd:int"/>
</message>
<portType name="WeltType">
<operation name="getWelt">
<output message="outString"/>
</operation>
<operation name="add">
<input message="inAdd"/>
<output message="outAdd"/>
</operation>
</portType>

<binding name="WeltBind" type="WeltType">
<soap:binding style="rcp" transport="http://schemas.xmlsoap.org/soap/http"
/>
<operation name="getWelt">
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="add">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

<service name="WeltService">
<port binding="WeltBind" name="FilmServices">
<soap:address location="http://jew1/wsdl/server.php"/>
</port>
</service>

</definitions>
Jens Wichmann [ Fr, 04 Januar 2008 16:21 ] [ ID #1899925 ]

Re: SoapServer mit wsdl Datei

Entschuldigt bitte das durcheinander aber ich hab momentan leider nur ein
ungepatchtes outlook express zur Verfügung.

Jens
Jens Wichmann [ Fr, 04 Januar 2008 16:36 ] [ ID #1899926 ]

Re: SoapServer mit wsdl Datei

Jens Wichmann schrieb:

>> Wenn Du willst, dass wir Dir helfen, solltest Du dieses PHP-Script hier
>> posten, damit wir uns die Stelle einmal anschauen können. Ich wüsste
>> nicht, wie wir Dir sonst helfen können sollen.
>
> du meinst ich muss den seiten langen code hir rein packen an stelle des
> links den ich geschrieben hab?

Nicht jeder, der Newsgroups liest, hat auch direkten Zugang zum Web. Von
daher ist es grundsätzlich besser, den fraglichen Text hier zu posten.

Nichtsdestotrotz hatte ich die Links auf den Quelltext schlicht
übersehen. Sorry.

> ok, aber nur die kurzform,
> [...]
>
> Client.php----------<?php
> include("localconfig.inc.php");
> $client = new SoapClient("http://jew.no-ip.biz/wsdl/server.php?wsdl",
> $login);
> $result = $client->add(new SoapParam(1, "eins"), new SoapParam(6, "zwei"));

An dieser verstümmelten "Kurzform" (was daran kurz sein soll, ist mir
schleierhaft) ist leider nicht zu erkennen, dass die letzte Zeile die
fehlerverursachende Zeile 7 darstellt. Anhand der geposteten Links
konnte ich das immerhin noch ermitteln.

Ansonsten sind jetzt die Soap-Experten gefragt. Da gehöre ich leider
nicht zu :-)

Gruß. Claus
Claus Reibenstein [ Fr, 04 Januar 2008 16:39 ] [ ID #1899927 ]

Re: SoapServer mit wsdl Datei

* Jens Wichmann wrote:

> $client = new SoapClient("http://jew.no-ip.biz/wsdl/server.php?wsdl",
> $login);
> $result = $client->add(new SoapParam(1, "eins"), new SoapParam(6, "zwei"));

Dort tritt dein Fehler offensichtlich auf.

Erstmal würde ich alles in ein try/catch packen:

try {
[...]
} catch (SoapFault $fault) {
echo "SOAP Error: ".$fault->faultcode." : ".$fault->faultstring;
}

Und teste mal einfach:
$result=$client->add(1, 2);

G.



--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt [at] bmservices.de
Gerome Muent [ Fr, 04 Januar 2008 16:45 ] [ ID #1899928 ]

Re: SoapServer mit wsdl Datei

> > $result =3D $client->add(new SoapParam(1, "eins"), new SoapParam(6, "zwe=
i"));
>
> Dort tritt dein Fehler offensichtlich auf.

ok

> Erstmal würde ich alles in ein try/catch packen:

hab ich gemacht das ergebniss ist die gleiche Meldung in anderer form
SOAP Error: SOAP-ENV:Server : Procedure 'eins' not present

ich glaube in zwichen auch das es sich um ein SOAP Problem handelt.
Aber jemand zu finden der alle kann (php, soap, wsdl) dürfte nicht so
einfach sein.

Jens
Jens.Abalu [ Fr, 04 Januar 2008 19:25 ] [ ID #1899929 ]

Re: SoapServer mit wsdl Datei

Am Fri, 4 Jan 2008 11:39:31 +0100 schrieb Jens Wichmann:

Hallo,

etwas generelles. Wenn Du vorhast, mehr mit SOAP zu machen,
könnte das evtl- interessant für dich sein:
http://www.osoa.org/display/PHP/SOA+PHP+Homepage

Viele Grüsse
Stefan
Stefan Kuhn [ Fr, 11 Januar 2008 17:22 ] [ ID #1905602 ]
PHP » de.comp.lang.php.misc » SoapServer mit wsdl Datei

Vorheriges Thema: Frage zu cannot sent header
Nächstes Thema: pdf-Datei mit php bearbeiten