binding error 0x805564

From: Date: Wed, 25 Jan 2012 19:07:16 +0000
Subject: binding error 0x805564
Groups: php.test 
Request: Send a blank email to php-test+get-916@lists.php.net to get a copy of this message
=========================================================== WSDL =========================================================== WDSL-Server: <?php // ab php5.3 deprecated Warnings abschalten ini_set ('error_reporting', E_ALL & ~E_DEPRECATED); // PEAR::SOAP einbinden require_once "SOAP/Server.php"; $skiptrace =& PEAR::getStaticProperty(
               'PEAR_Error', 'skiptrace');
$skiptrace = true; // Service-Klasse programmieren class MeinZeitService { // __dispatch_map definiren public $__dispatch_map = array (); // Ein- und Ausgabeparameter in // __dispatch_map definieren public function __construct() {
    $this->__dispatch_map["jetzt"] =
      array ("in" =>
               array("format" => "string"),
             "out" =>
               array("uhrzeit" => "string"));
} // In Methode __dispatch //__dispatch_map zurück geben public function __dispatch($methodname) {
    if (isset(
         $this->__dispatch_map[$methodname]))
      return
         $this->__dispatch_map[$methodname];
    return NULL;
} // Service Methode mit Parametern function jetzt ($format) {
    // Ist das Format fehlerhaft?
    if (($format == null)||
        (trim($format) == "")) {
      // Fehlermeldung zurückgeben
      return new SOAP_Fault("Kein Parameter angegeben",
                            "0815", "Client");
    }
    date_default_timezone_set('Europe/Berlin');
    $uhrzeit = date ($format);
    // Rückgabe als SOAP_Value Objekt
    return (new SOAP_Value('uhrzeit',
                    'string', $uhrzeit));
} } // Web-Service Klasse ausprägen $service = new MeinZeitService(); // Server ausprägen $ss = new SOAP_Server(); // Service mit Namen zuweisen $ss->addObjectMap ($service,
                   "urn:MeinZeitService");
// Service Starten oder WSDL ausgeben? if (isset($_SERVER["REQUEST_METHOD"])&&
    $_SERVER["REQUEST_METHOD"] == "POST") {
// Einstellung, dass POST-Daten an den // Service weiter gegeben werden $ss->service ($HTTP_RAW_POST_DATA); } else { // Prüfen, dass wsdl als Parameter if (isset($_SERVER['QUERY_STRING']) &&
      strcasecmp($_SERVER['QUERY_STRING'],
                 'wsdl') == 0) {
    // DISCO_Server zum Erzeugen des WSDL
    // auspraegen
    require_once "SOAP/Disco.php";
    $disco = new SOAP_DISCO_Server ($ss,
                      "MeinZeitService",
                      "Mein Zeit Service");
    // HTML-Header setzen
    header("Content-type: text/xml");
    // WSDL-Dokument ausgeben
    print $disco->getWSDL ();
} } ?> ########################################################### WSDL-Client <?php // ab php5.3 deprecated Warnings abschalten ini_set ('error_reporting', E_ALL & ~E_DEPRECATED); require_once "SOAP/Client.php"; // SOAP ueber WSDL auspraegen $sw = new SOAP_WSDL ("http://localhost/cswa/ws/wsdlserver.php?wsdl"); // Proxy-Objekt ermitteln $proxy = $sw->getProxy (); // Web Service Methode aufrufen $ergebnis = $proxy->jetzt ("H:i:s"); // Ergebnis ausgeben print $ergebnis."\n"; ?> =========================================================== SOAP-Fault =========================================================== SOAP-Server: <?php // ab php5.3 deprecated Warnings abschalten ini_set ('error_reporting', E_ALL & ~E_DEPRECATED); // PEAR::SOAP einbinden require_once "SOAP/Server.php"; $skiptrace =& PEAR::getStaticProperty(
               'PEAR_Error', 'skiptrace');
$skiptrace = true; // Service-Klasse programmieren class MeinZeitService { // __dispatch_map definiren public $__dispatch_map = array (); // Ein- und Ausgabeparameter in // __dispatch_map definieren public function __construct() {
    $this->__dispatch_map["jetzt"] =
      array ("in" =>
               array("format" => "string"),
             "out" =>
               array("uhrzeit" => "string"));
} // In Methode __dispatch //__dispatch_map zurück geben public function __dispatch($methodname) {
    if (isset(
         $this->__dispatch_map[$methodname]))
      return
         $this->__dispatch_map[$methodname];
    return NULL;
} // Service Methode mit Parametern function jetzt ($format) {
    // Ist das Format fehlerhaft?
    if (($format == null)||
        (trim($format) == "")) {
      // Fehlermeldung zurückgeben
      return new SOAP_Fault("Kein Parameter angegeben",
                            "0815", "Client");
    }
    date_default_timezone_set('Europe/Berlin');
    $uhrzeit = date ($format);
    // Rückgabe als SOAP_Value Objekt
    return (new SOAP_Value('uhrzeit',
                    'string', $uhrzeit));
} } // Web-Service Klasse ausprägen $service = new MeinZeitService(); // Server ausprägen $ss = new SOAP_Server(); // Service mit Namen zuweisen $ss->addObjectMap ($service,
                   "urn:MeinZeitService");
// Einstellung, dass POST-Daten an den // Service weiter gegeben werden $ss->service ($HTTP_RAW_POST_DATA); ?> ########################################################### Soap-Client <?php // ab php5.3 deprecated Warnings abschalten ini_set ('error_reporting', E_ALL & ~E_DEPRECATED); // Einbinden von SOAP/Client.php require_once "SOAP/Client.php"; // Client ausprägen und URI auf Web Service // übergeben $sc = new SOAP_Client ("http://localhost/cswa/ws/soapserver-fault.php"); // Parameter für Web Service Methode //$parameter = array ("format" => "H:i:s"); $parameter = array ("format" => null); // Methode call aufrufen, um Web Service // Methode zu nutzen $ergebnis = $sc->call ("jetzt", $parameter,
                    "urn:MeinZeitService");
// Auf Fehler prüfen if (is_object($ergebnis)&&
    (get_class($ergebnis) == "SOAP_Fault")) {
// Fehlermeldung ausgeben print "Fehler! ".$ergebnis->message."\n"; } else { // Ergebnis ausgeben print $ergebnis."\n"; } ?> =========================================================== Rest =========================================================== Server: <?php // Wenn GET Methode if($_SERVER['REQUEST_METHOD'] == 'GET'){ // Pfad zerlegen, 1 Element ist b_id $path = $_SERVER['PATH_INFO']; if($path != null){
    $path_params = explode("/", $path);
} echo "Daten von Buch ".$path_params[1]; return; } // Wenn POST Methode if($_SERVER['REQUEST_METHOD'] == 'POST'){ // POST-Body holen $body = file_get_contents("php://input"); // Status setzen header("HTTP/1.0 201 Created"); echo "Daten von neuem Buch: ".$body; return; } // Status setzen header("HTTP/1.0 501 Not Implemented"); ?> ########################################################### Client <?php $url = "http://localhost/cswa/rest/book.php"; // curl initialisieren $ch = curl_init(); // Optionen fuer GET setzen curl_setopt($ch, CURLOPT_URL, $url."/42"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPGET, true); // Anfrage ausfuehren $response = curl_exec($ch); echo "---- GET ----\nStatus-Code: ". curl_getinfo($ch, CURLINFO_HTTP_CODE)."\n"; echo $response."\n----\n"; curl_close($ch); // curl initialisieren $ch = curl_init(); // Optionen fuer POST setzen curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); // Bost-Body setzen $data = "Buch 0815"; curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Anfrage ausfuehren $response = curl_exec($ch); echo "---- POST ----\nStatus-Code: ". curl_getinfo($ch, CURLINFO_HTTP_CODE)."\n"; echo $response."\n----\n"; curl_close($ch); // curl initialisieren $ch = curl_init(); // Optionen fuer DELETE curl_setopt($ch, CURLOPT_URL, $url."/42"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); // Anfrage ausfuehren $response = curl_exec($ch); echo "---- DELETE ----\nStatus-Code: ". curl_getinfo($ch, CURLINFO_HTTP_CODE)."\n"; echo $response."\n----\n"; curl_close($ch); ?> =========================================================== sonstiges =========================================================== <?php // ab php5.3 deprecated Warnings abschalten ini_set ('error_reporting', E_ALL & ~E_DEPRECATED); // PEAR::SOAP einbinden require_once "SOAP/Server.php"; $skiptrace =& PEAR::getStaticProperty(
               'PEAR_Error', 'skiptrace');
$skiptrace = true; // Service-Klasse programmieren class WeinService { private $db; // __dispatch_map definiren public $__dispatch_map = array (); // Ein- und Ausgabeparameter in // __dispatch_map definieren public function __construct() { try { $this->db = new PDO ("mysql:host=localhost;dbname=B5","root",""); } catch (PDOException $e) { throw new Exception ('Verbindung nicht moeglich: ' . $e->getMessage()); }
    $this->__dispatch_map["vollTextSuche"] =
      array ("in" => array("suchmuster" => "string"),
             "out" => array("ergebnis" => "integer"));
    $this->__dispatch_map["holeNamePreis"] =
    	array("in" => array("id" => "integer"),
    			"out" => array("Name" => "string"));
} // In Methode __dispatch //__dispatch_map zurück geben public function __dispatch($methodname) {
    if (isset(
         $this->__dispatch_map[$methodname]))
      return
         $this->__dispatch_map[$methodname];
    return NULL;
} function holeNamePreis ($id) { if (($format == null) || (trim($format) == "")) { // Fehlermeldung zurückgeben return new SOAP_Fault("Kein Parameter angegeben: holeNamePreis",
  	                            "0815", "Client");
} if (!$stmt=$this->db->prepare('SELECT count(*) AS anzahl FROM vhsbenutzer WHERE benutzerid=:benutzerid AND pwd=:pwd')) throw new Exception ('PDOStatement::prepare fehlgeschlagen!'); } // Service Methode mit Parametern function jetzt ($format) {
    // Ist das Format fehlerhaft?
    if (($format == null)||
        (trim($format) == "")) {
      // Fehlermeldung zurückgeben
      return new SOAP_Fault("Kein Parameter angegeben",
                            "0815", "Client");
    }
    date_default_timezone_set('Europe/Berlin');
    $uhrzeit = date ($format);
    // Rückgabe als SOAP_Value Objekt
    return (new SOAP_Value('uhrzeit',
                    'string', $uhrzeit));
} } // Web-Service Klasse ausprägen $service = new MeinZeitService(); // Server ausprägen $ss = new SOAP_Server(); // Service mit Namen zuweisen $ss->addObjectMap ($service,
                   "urn:MeinZeitService");
// Service Starten oder WSDL ausgeben? if (isset($_SERVER["REQUEST_METHOD"])&&
    $_SERVER["REQUEST_METHOD"] == "POST") {
// Einstellung, dass POST-Daten an den // Service weiter gegeben werden $ss->service ($HTTP_RAW_POST_DATA); } else { // Prüfen, dass wsdl als Parameter if (isset($_SERVER['QUERY_STRING']) &&
      strcasecmp($_SERVER['QUERY_STRING'],
                 'wsdl') == 0) {
    // DISCO_Server zum Erzeugen des WSDL
    // auspraegen
    require_once "SOAP/Disco.php";
    $disco = new SOAP_DISCO_Server ($ss,
                      "MeinZeitService",
                      "Mein Zeit Service");
    // HTML-Header setzen
    header("Content-type: text/xml");
    // WSDL-Dokument ausgeben
    print $disco->getWSDL ();
} } ?> =========================================================== Info =========================================================== - Warum ist asynchrone Abhandlung von Anfragen die elegante Variante? Die Anwendung wird während der Abfrage nicht blockiert. Ein Programm das im Hintergrund arbeitet bietet immer mehr Benutzerfreundlichkeit. - Welche vier Fähigkeiten erhält XMLHttpRequest nach einer abgeschlossenen Anfrage? status, responseXML, responseText, getResponseHeader - Welcher Struktur ähneln Ajax Anwendungen? Desktopanwendung, da Ajax Struktur über ähnliche GUI Elemente und ähnlichen, aber simpleren Eventloop verfügt. - Was ist SOA nicht? Produkt, Werkzeug, Framework, Entwicklungstechnologie, Bauplan - Wann setzt man SOA ein? Wann sinnvoll? Hetergenität, verteilte Systeme, unterschiedliche Eigentümer, Interoperabilität - Konzipiere einen Serviceaufruf Fachliche Schnitstelle: bearbeiteKunde(action,id,name,adresse,konto) Technische Schnittstelle: leseKunde(id), ändereKundenAdresse(id,Adresse), löscheKunde(id) Die lose Kopplung – Antworten Die Minimierung der Abhängigkeiten möchte man erreichen. Vorteile: Die Flexibilität des Systems steigt. Der bürokratische Aufwand der System-Koordination wird vergleichsweise geringer. Die Kompetenz der Subsysteme werden optimal genutzt sodass man lokale Lösungen entwickeln kann. Externe Turbulenzen und strategische Fehlentscheidungen im System können weniger durchschlagen als bei einer „enger Kopplung“. Nachteile: Programmlogik des Service-Nutzers wird unüberschaubar. das Funktionieren des Systems ist schwer zu kontrollieren. die strategische Steuerung des Gesamtsystems wird erschwert. die Redundanz im System lässt keine optimale Ressourcennutzung zu. Ein Vertriebsmitarbeiter schließt außerhalb seines Büros einen Vertrag mit seinem Kunden, jedoch ist der Vetriebsmitarbeiter nicht im Firmen-Netz verbunden. Aufgrund der im Vorabend aktualisierten Stammdaten (Bestand und Preis) in dem Firmen-Programm, bestellt der Kunde 10 000 Kugellager zu je 4 Euro. Das macht für den Kunden 40 000 Euro. In der Zwischenzeit erhöht der Vertriebschef die Preise um 15 cent. Als der Vertriebsmitarbeiter wieder in sein Büro kehrt und seine Vertriebsanwendung startet, erkennt die Anwendung einen Konflikt zwischen dem lokal erfassten Auftrag und den globalen Stammdaten. Die Rechnung von dem Kunden beträgt nicht mehr 40 000Euro sondern 41 500 Euro. Ohne die lose Kopplung hätte der Vertriebsmitarbeiter keinen Vertrag abschließen können. Die Asynchrone Kommunikation besagt dass sowohl der Sender als der Empfänger nicht gleichzeitig (synchron) tätig sein müssen. Der Sender und der Empfänger werden zeitlich entkoppelt. Z.B.: System A sendet System B eine Nachricht („Anfrage“). In der Zeit wo System A die Nachricht verschickt muss System B (der Empfänger) nicht anwesend sein. Sobald die Nachricht versendet wurde, kann System A (der Sender) weiter arbeiten. Wenn System B wieder verfügbar ist, wird die Nachricht bearbeitet und wird im Anschluss an System A verschickt. Auch hier muss System A wie System B nicht anwesend sein. Sobald System A wieder verfügbar ist, wird die Antwort bearbeitet, wenn es passend ist. In der Realität ist es so, dass Produktionsprobleme anhand unerwartete Service-Laufzeiten verursacht wurden (sogenannten: Race-Conditions). Man hat die Priorität an die Wartbarkeit der Systeme als wichtiger empfunden, daher möchte man dieses Risiko nach Möglichkeit vermeiden. Dieser Beschluss leitet zu einer engeren Kopplung, dass die Verfügbarkeit an beiden System eine Voraussetzung ist. Unerwünscht ändert sich dadurch die Performance ins Negative.

« previous php.test (#916) next »