Der Request-Dispatcher ist der Bestandteil des Service, der direkt mit dem Aufrufer des Web Service in Verbindung tritt. Er befindet sich auf Ihrem Webserver und wird ebenfalls als CGI-Skript aufgerufen. Das folgende Beispiel zeigt die Implementierung eines ganz einfachen Request-Dispatchers:
1 #!/usr/bin/perl -w 2 # Dateiname: echo.cgi 3 # Echo-Web Service - dieser Web Service gibt jeden Input 4 # als Echo in seiner Antwort zurück. 5 # Autor: Byrne Reese 6 use Echo; 7 use SOAP::Transport::HTTP; 8 SOAP::Transport::HTTP::CGI 9 ->dispatch_to('Echo') 10 ->handle;
Wie man sieht, macht das SOAP::Transport::HTTP::CGI-Package das Weiterleiten von SOAP-Requests an ein Perl-Modul zu einer einfachen Sache.
In Zeile 6 importieren wir den Request-Handler für unseren Service. Dies ist das Perl-Modul, das die Subroutinen für eingehende SOAP-Meldungen enthält. In Zeile 7 importieren wir das SOAP::Lite-Package, welches den gesamten notwendigen Programmcode für die Bearbeitung von eingehenden SOAP-Requests enthält. In Zeile 9 wird das Perl-Modul für die Bearbeitung eingehender Requests festgelegt. In unserem Beispiel sollte der an dispatch_to übergebene Wert mit dem Namen des Moduls in Zeile 6 übereinstimmen. Und schließlich wird in Zeile 10 SOAP::Lite aufgerufen, um den Request zu bearbeiten.
SOAP::Lite ist in der Lage, eingehende Requests an mehrere Module weiterzuleiten. Diese Fähigkeit erlaubt es, alle eingehenden SOAP-Anfragen an einer einzigen Stelle entgegenzunehmen. Dafür muss man nur jedes Modul mit seinem vollständig qualifizierten Namen als Argument an dispatch_to übergeben. Für noch mehr Flexibilität kann man den Pfad zu einem Verzeichnis angeben, das eine Reihe von Perl-Modulen enthält, an die SOAP::Lite Requests weitergeleitet werden. Das folgende Beispiel kann Requests an die Perl-Module My::Module::Name und My::Other::Module weiterleiten – sowie an jedes Perl-Modul, das im Verzeichnis /Your/Path/To/Deployed/Modules installiert ist:
SOAP::Transport::HTTP::CGI ->dispatch_to('/Ihr/Pfad/zu/verwendeten/Modulen', 'My::Module::Name', 'My::Other::Module') ->handle;
Um zusammenzufassen, wie das funktioniert, wollen wir einen Blick auf etwas XML werfen. Wenn SOAP::Transport::HTTP::CGI->handle() aufgerufen wird, ruft SOAP::Lite die Subroutine mit demselben Namen wie das Root-Element des SOAP-Body auf. Es sucht nach dieser Subroutine in dem Perl-Modul, das durch den Namensraum des Root-Elements des SOAP-Body bestimmt ist. Der folgende SOAP-Request führt z.B. dazu, dass SOAP::Lite den Request an die Subroutine mit dem Namen myMethod weiterleitet, die im Perl-Modul MyWebService.pm zu finden ist:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Body> <namesp1:myMethod xmlns:namesp1="urn:MyWebService"> <foo>bar</foo> </namesp1:echo> </SOAP-ENV:Body>
Neueste Kommentare
Noch keine Kommentare zu Ein Web Service mit SOAP::Lite
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.