Vergleichstabelle der übersetzten Namen im folgenden Text:
Nutzlast: Konversationsinhalt
Objekt: Instanz
Funktion: Funktion
PHP verwenden, um Netzwerkdienste zu implementieren
Framework verwenden: WSO2 WSF/ PHP
Installationsumgebung: Windows oder Linux
(Ich bin angewidert, dass Computerartikel jetzt mit unzähligen schwer verständlichen Übersetzungen und Terminologie gefüllt sind, deshalb versuche ich hier gesprochene Sprache und Chinesisch zu verwenden.)
WSMessages-Klasse:
Beim Aufrufen von Netzwerkdiensten sind zwei Nachrichten erforderlich, die gesendete Nachricht und die empfangene Nachricht, und diese müssen kommen und gehen, bevor sie kommunizieren können. Die WSMessages-Klasse wird verwendet, um diese beiden Nachrichten im Open-Source-Framework Web Services Framework für PHP (kurz WSF) zu kapseln.
WSMessages verfügt über eine sehr wichtige Variable str zum Speichern des Nachrichteninhalts und zum Speichern der „Payload“ im XML-Format (sie nennen diese Payload, ich habe im englischen Wörterbuch nachgesehen, das bedeutet es, aber es erscheint immer wieder hin und her Das jetzt angezeigte Erscheinungsbild ist der Inhalt der Konversation, der tatsächlich diese Definitionen von XML und einige andere sogenannte „Namespace“->Namespace-Definitionen entfernt. Um herauszufinden, was ein Namespace ist, schauen Sie sich bitte die W3C-Definition von XML an ). Die Nutzlast ist so verwirrend, dass ich sie im Folgenden als „Konversationsinhalt“ bezeichnen werde.
Wenn Sie eine Anfrage über das Client-Programm senden, müssen Sie eine Instanz von WSMessage erstellen und die Instanz mit dem Konversationsinhalt im XML-Format füllen. Die Antwort auf die Anfrage ist immer noch ein „Konversationsinhalt“, der über Ihr Programm zurückgegeben wird, und was zurückgegeben wird, ist immer noch eine WSMessage-Instanz.
Mit anderen Worten: Wenn Ihre Clientfunktion auf einen Netzwerkdienst antwortet, ist ihr Rückgabewert auch eine WSMessage-Instanz.
Sie können eine Anfrage in einer Funktion senden, das Netzwerkdienstprogramm aufrufen, den zurückgegebenen Inhalt in die WSMessage-Instanz einfügen und die Funktion diese WSMessage-Instanz zurückgeben lassen.
WSMessage neigt eher dazu, komplexere Inhalte wie Anhänge zu senden und zu empfangen. Lassen Sie uns im Detail erklären, wie Sie WSMessage für die Kommunikation zwischen dem Client und dem Server verwenden.
Verarbeitung des Gesprächsinhalts:
Ich habe bereits erklärt, wie man PHP zum Erstellen von Netzwerkdiensten verwendet, und habe ein einfaches Client-Server-Programm erstellt, um den Arbeitsablauf zu veranschaulichen. Diese Programme erklären jedoch nicht im Detail, wie wir „Gesprächsinhalte“ verarbeiten. Mit anderen Worten, wir haben den Gesprächsinhalt lediglich im XML-Format an den Server gesendet, aber nicht daran gedacht, ihn zu verarbeiten. Hier erklären wir ausführlich, wie man Gesprächsinhalte verarbeitet und in Computerprogrammen verwendet.
Bei dem Konversationsinhalt handelt es sich um Inhalte, die durch die Geschäftslogik definiert und mithilfe von SOAP (Simple Object Access Protocol) gekapselt sind (siehe SOAP w3c-Artikel). Lassen Sie uns anhand eines Beispiels veranschaulichen, wie eine Fakultät berechnet wird.
Konversationsinhalt, den der Client senden muss:
function getFactorial ( $message ) {
$simplexml = new SimpleXMLElement ( $message -> str ) ;
$value = $simplexml ->
$result = Factorial ( $value ) ;
$responsePayloadString = <<
< ; /getFactorialResponse>
XML;return $responsePayloadString;}
In Zeile 3 erstellen wir eine Instanz von simpleXmlElement mit der Eingabe „conversation content“. Sie können sehen, dass der eingegebene Konversationsinhalt in der str-Variablen von $message der über den Funktionsparameter übergebenen WSMessage-Instanz gespeichert wird. Hinweis: SimpleXml ist eine PHP-Erweiterung zur Verarbeitung von XML-Dateien oder Strings. WSO2 WSF/PHP gibt nicht an, welche PHP-Erweiterung wir zum Verarbeiten von XML verwenden müssen. Sie können Ihre bevorzugten XML- und PHP-Erweiterungen verwenden, um damit umzugehen, z. B. Domdocument, Saxdom und dergleichen.
Zeile 4 extrahiert die Parameterwerte aus dem Konversationsinhalt, was bedeutet, dass das Dienstprogramm wissen muss, wie es diese Parameter, wie Parametertypen und dergleichen, versteht. (Normalerweise muss der Typ dieses Parameters im Gesprächsinhalt angegeben werden). Der Rest der Funktion ist die normale Handhabung von Fakultäten. In Zeile 6 wird die Fakultät durch den Aufruf anderer Funktionen berechnet. Von den Zeilen 8 bis 12 wird auch der Inhalt der Antwortkonversation geschrieben und muss zurückgegeben werden. In Zeile 14 geben wir den Konversationsinhalt der Antwort zurück.
Der Inhalt der Antwortkonversation sollte ungefähr so aussehen:
$response = $client ->$simplexml = new SimpleXMLElement ( $response -> str ) ; eine SimpleXMLElement-Instanz mit dem Konversationsinhalt der Antwort. Ebenso ist $response auch eine Instanz von WSMessage. Wir können auf seine Mitgliedsvariable str zugreifen, die den Konversationsinhalt der Antwort im XML-Format speichert. Wir übergeben es an einen SimpleXMLElement-Konstruktor und erstellen so eine Instanz von SimpleXMLElement. Dann können wir auf das Ergebniselement zugreifen (oder Knoten? Element, es kann in XML als Element bezeichnet werden, aber für eine Baumstruktur ist ein Knoten nicht zu viel?)
Jetzt sollten Sie lernen, wie man Chat-Informationsinhalte verarbeitet. ob es sich um die Anwendung des Clients oder die Antwort des Servers handelt.
Hinweis: In der serverseitigen getFactorial-Funktion (Zeile 14) können Sie eine WSmessage anstelle eines Antwortkonversationsinhalts zurückgeben. Sie können das folgende kurze Programm verwenden, um diese Funktion zu erreichen.
$outMessage = new WSMessage( $responsePayloadString );
return $outMessage ;
Dies bedeutet tatsächlich, dass das Serverprogramm den Konversationsinhalt im XML-Format zurückgeben und auch eine Instanz von WSMessage
Complete zurückgeben kann Das Programm finden Sie am Ende dieses Artikels.
Nachrichten verfolgen
Über das WSO2-Webdienst-Framework für PHP können Sie vom Client gesendete SOAP-Nachrichten verfolgen, und dann empfängt der Client die Nachricht vom Server (d. h. den Inhalt seiner Konversation). Die Netzwerk-Client-Dienstklasse WSClient verfügt über zwei Funktionen, um diesen Zweck zu erreichen: getLastReauest() und getLastResponse(). Nachdem der Client die Funktion request() verwendet hat, können Sie die Konversationsinformationen über diese beiden Funktionen abrufen.
$response = $client -> request ( $reqestPayloadString ) ;
printf ( "
Request = %s " ,
htmlspecialchars ( $client -> getLastRequest ())) ;
printf ("
Response = %s ",
htmlspecialchars ( $client -> getLastResponse ())) ; Das Programmfragment zeigt den Inhalt der von der Funktion request() implementierten Anfrage und Antwort an.
Eigentlich gibt dieses Programm etwa Folgendes aus:
Request =
Das Verfolgen von SOAP-Nachrichten ist sehr nützlich, um die aufgerufenen Dienste zu untersuchen, insbesondere um Dienste und Client-Fehler zu finden. Sie können beispielsweise alle vom Client gesendeten Nachrichten und die vom Server beantworteten Nachrichten bestätigen und das Format des Konversationsinhalts (Client und Server) bestätigen.
Debuggen (dieses Wort ist so häufig, dann ich Ich werde es hier nicht übersetzen, obwohl mein Traum ist, dass das Programm eines Tages auf Chinesisch geschrieben wird, ist es offensichtlich, dass dieser Traum immer weiter von uns entfernt ist)
Benutzer stoßen manchmal auf zwei Probleme, wenn sie PHP WSF verwenden. Frage:
WSF installieren. Wie können Sie sicher sein, dass diese WSF ordnungsgemäß funktioniert? Nun, zunächst können Sie es über die Funktion phpinfo() überprüfen. (Wenn Sie diese Funktion nicht kennen und nicht wissen, wie man sie verwendet, schauen Sie im PHP-Handbuch nach.) Sie müssen nur eine PHP-Datei erstellen und diese herunterladen Sätze und öffnen Sie sie in einem Browser.
phpinfo () ;
?>>Wenn alle Erweiterungen korrekt installiert sind, sollten Sie dort ein Element namens wsf mit dem Titel wsf finden Wörter wie „WSF-Unterstützung“. Dieses Zeug ist in php.ini definiert (oder ich habe es beispielsweise nicht in php.ini definiert, sondern eine neue Datei namens wsf.ini in /etc/php5/conf.d/ geschrieben. Eigentlich alle Dateien darin Der Ordner wird später in php.ini zusammengeführt. Wenn Sie also die entsprechenden Einstellungen in php.ini nicht finden, Ihre wsf-Datei aber nicht verfügbar ist, können Sie genauso gut hierher kommen, um einen Blick darauf zu werfen)
Wenn diese Erweiterung nicht verfügbar ist in phpinfo angezeigt wird, müssen Sie die Installationsanleitung finden, um sie sorgfältig zu studieren. Wenn Sie sie nicht finden können, können Sie mir eine E-Mail senden: ferdinandfly@yahoo.ca
Nachdem Sie es erfolgreich installiert haben, besteht das zweite Problem darin, dass Sie das Beispiel scheinbar nicht richtig ausführen können. Ebenso müssen Sie überprüfen, ob einige Einstellungen korrekt sind. Der erste ist, dass im php.ini-Datensatz häufig der Pfad zu einigen Protokolldateien festgelegt ist. Möglicherweise ist dieser nicht vorhanden oder der festgelegte Pfad kann von php5 nicht gelesen und geschrieben werden. Außerdem sollten Sie sicherstellen, dass php.ini einige Skriptdateien enthält und dass diese Skriptdateien lesbar sind.
Wenn das oben Gesagte korrekt ist, WSF jedoch nicht funktioniert, können Sie die Protokolldatei überprüfen. Die Protokolldatei wird in den Pfad geschrieben, der durch den Datensatz wsf.log_path bestimmt wird. Dieses Zeug wird in php.ini eingestellt. Wenn es nicht festgelegt ist, befindet sich das Protokoll in /tmp (Linux). Sie müssen wissen, dass auf der Windows-Plattform der Standardpfad möglicherweise nicht vorhanden ist und Sie daher einen Protokollpfad dafür angeben müssen. Protokolle, die sich auf den Dienst beziehen, werden in wsf_php_server.log aufgezeichnet, und diejenigen, die sich auf den Client beziehen, werden in wsf_php_client.log gespeichert. Wenn Ihr Client und Ihr Diensthost nicht derselbe Computer sind, befinden sich beide Dateien auf dem Server. Sie können Protokolldateien mit unterschiedlichem Detaillierungsgrad erhalten, indem Sie den Protokollierungslevel anpassen. Wenn es sich um ein Debugging handelt, können Sie es auf Stufe 4 setzen. Wenn es sich um ausgereifte Software handelt, können Sie es natürlich auf 0 (nur schwerwiegende Fehler) oder 1 (Fehler) setzen.
Wenn Sie bestätigen möchten, dass der Austauschinhalt (SOAP) im gewünschten Format vorliegt, können Sie die SOAP-Nachrichtenverfolgung zum Debuggen verwenden, wie bereits erwähnt.
Zusammenfassung:
In diesem Artikel habe ich die WSMessage-Klasse erklärt und erklärt, wie der Konversationsinhalt verarbeitet und verwendet wird. Entweder der Client oder der Server können den Konversationsinhalt durch Aufrufen der str-Mitgliedsvariablen von WSMessage (xml) abrufen. . Normalerweise wird das Format des Konversationsinhalts über WSDL definiert, daher ist es für uns sinnvoll, von Client und Server zu verlangen, dass sie demselben Format entsprechen. Im nächsten Kapitel besprechen wir die Zusammenarbeit mit WSF/PHP und WSDL über WSO2.
Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!