Mailinglisten-Archive |
Hallo,
aktuell habe ich nach Vorgabe von "Webservices mit PHP" (Christian Wenz)
einen kleinen Webservice mit PEAR:SOAP aufgebaut. SOAP-Server und -Client
funktionieren auf Basis von PHP tadellos.
Jetzt gibt es aber die Möglichkeit ab dem InternetExplorer 5 Behaviors
einzusetzen und eine "webservice.htc"-Datei zu nutzen. Laut Beispiel
JavaScript-Buch (Christian Wenz) funktioniert das ganze mit den
Primzahlen-Beispiel anstandslos.
Jetzt bin ich auf die Idee gekommen, eine IE-SOAP-Anfrage an mein
PHP-SOAP-Server-Skript zu schicken, aber ohne Erfolg! Es erscheint immer die
Fehlermldung die im JavaScript-Code hinterlegt ist. Mit dieser Kombination
wäre z.B. eine Preisabfrage über den Browser möglich ohne Reload.
Aber wenn es doch von PHP -> PHP geht müßte es doch auch mit IE -> PHP gehn,
dafür zeichnet sich ja Webservice aus.
Füge ich in der HTML-Seite ein "alert(wert.errorDetail.string);" ein erhalte
ich als Meldung: "method '{}jetzt' not defined in service". Blos woher
kommen die geschweiften Klammern?
Falls jemand eine Idee hat was ich da vergessen/falsch gemacht hab, wäre ich
für jeden Hinweis dankbar.
MfG
Mario Batz
Code des SOAP-Server-Skript:
---------------------------------------
<?php
require_once("SOAP/Server.php");
require_once("SOAP/Disco.php");
# WebService-Klasse
class Service
{
var $__dispatch_map = array();
# Konstruktor
function Service()
{
$this->__dispatch_map["jetzt"] = array(
"in" =>
array("format"=>"string"),
"out" =>
array("uhrzeit"=>"string")
);
}
function __dispatch($methode)
{
if(isset($this->__dispatch_map[$methode]))
return $this->__dispatch_map[$methode];
else
return NULL;
}
function jetzt($format="Y-m-d H:i:s")
{
if ($format==null || trim($format)=="")
return new SOAP_Fault("Fehler ist
aufgetreten","0815-Fehler");
else
return date($format);
}
}
$soap = new SOAP_Server();
$server->_auto_translation = true;
$service = new Service();
$soap->addObjectMap($service,"urn:soapservice");
if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=="POST")
{
$soap->service($HTTP_RAW_POST_DATA);
}
else
{
$disco = new SOAP_DISCO_Server($soap,"Bezeichnung");
if(isset($_SERVER['QUERY_STRING']) &&
strcasecmp($_SERVER['QUERY_STRING'],"wsdl")==0)
{
header("Content-type: text/xml");
print $disco->getWSDL();
}
}
?>
---------------------------------------
HTML-Seite mit SOAP-Anfrage:
---------------------------------------
<html>
<head>
<title>Web Service</title>
<script language="JavaScript">
<!--
function check(f)
{
ausgabe.innerText = "Bitte warten ...";
DatumService.useService("http://192.168.0.6/soap/server.php?WSDL","Datum");
DatumService.Datum.callService(ergebnis, "jetzt",
f.elements["formatierung"].value);
}
function ergebnis(wert) {
if (wert.error)
ausgabe.innerText = "Fehler!";
else
ausgabe.innerText = wert.value;
// Ausgabe durch Alert: method '{}jetzt' not defined in service
alert(wert.errorDetail.string);
}
//-->
</script>
</head>
<body>
<div id="DatumService" style="behavior:url(webservice.htc)"></div>
<form>
Bitte Formatierungszeichen eingeben:
<input type="text" name="formatierung" value="Y-m-d">
<input type="button" value="OK" onclick="check(this.form);">
</form>
<p id="ausgabe">---</p>
</body>
</html>
---------------------------------------
php::bar PHP Wiki - Listenarchive