Bei der etwas aufwändigeren Erstellung eines SOAP-Servers muss man zwischen zwei verschiedenen Servertypen unterscheiden:
Während die Stand-alone-Variante als eigenständige Applikation läuft, wird bei der zweiten Variante ein Webserver (Apache, IIS) als CGI-Server eingeschaltet, der dann zum Beispiel Zugriffskontrollen übernehmen kann.
Das folgende Beispiel zeigt einen Stand-alone-SOAP-Server,
der die Methode isPrimeNumber zur Verfügung stellt:
require "soap/standaloneServer"
class PrimzahlServer < SOAP::StandaloneServer
MAX_PRIME = 10_000
def initialize(*a)
super
# Primzahlen initialisieren
# (Sieb des Erathosthenes)
@primes = 0 # Bit-Array
k = 2
while k < Math.sqrt(MAX_PRIME)
if @primes[k] == 0
j = 2*k
while j <= MAX_PRIME
@primes |= (1 << j)
j += k
end
end
k += 1
end
end
def methodDef
addMethod(self, 'isPrimeNumber', 'number')
end
def isPrimeNumber(number)
if number > MAX_PRIME
raise "Zu grosse Primzahl"
else
@primes[number] == 0
end
end
end
if __FILE__ == $0
# SOAP-Server starten
PrimzahlServer.new('Primzahl-Server',
'urn:ruby:primzahl', 'localhost', 8080).start
end
Für einen CGI-Server ersetzt man die Zeilen
require "soap/standaloneServer" # und class PrimzahlServer < SOAP::StandaloneServer
durch
require "soap/cgiStub" #und class PrimzahlServer < SOAP::CGIStub
und lässt beim Aufruf des Konstruktors die beiden letzten Argumente weg:
PrimzahlServer.new('Primzahl-Server',
'urn:ruby:primzahl').start