next up previous contents index
Search Next: GUI-Programmierung Up: SOAP Previous: Ein SOAP-Client   Contents   Index

Ein einfacher SOAP-Server

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



(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20