phpbar.de logo

Mailinglisten-Archive

[php] PEAR-SOAP und IE-Behavior

[php] PEAR-SOAP und IE-Behavior

Mario Batz BatzMario at gmx.net
Die Okt 19 18:04:36 CEST 2004


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