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>
Sie befürchten einen Missbrauch der Identitäten von Verstorbenen. 60 Prozent befürworten deswegen eine Klärung des…
In einigen Unternehmensbereichen sind angeblich bis zu 30 Prozent der Beschäftigten betroffen. Samsung spricht in…
Sie erlauben eine Remotecodeausführung. Betroffen sind alle unterstützten Versionen von Adobe Reader und Acrobat für…
Betroffen sind Chrome für Windows, macOS und Linux. Das von den Anfälligkeiten ausgehende Risiko stuft…
Der Gerichtshof der Europäischen Union entscheidet „endgültig“ über den Rechtsstreit. Dem Urteil zufolge sind von…
Sie betrifft ältere Versionen von Windows 10. Ein weiterer kritischer Bug steckt aber auch in…