XMLRPC-Dienst mit mehreren Handler-Klassen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
dolle
User
Beiträge: 3
Registriert: Donnerstag 1. März 2007, 14:34
Wohnort: Südtirol
Kontaktdaten:

Montag 16. April 2007, 17:49

Da der XMLRPC-Dienst so ausgezeichnet läuft bekommt er mittlerweile immer mehr Funktionen dazu. :D Ich habe deshalb versucht das ganze in verschiedene Module und Klassen aufzuplitten um die Übersicht zu behalten.
Leider habe ich erst jetzt bemerkt dass man mit "register_instance" nur eine Klasse registrieren kann. Nach lange hin und herprobieren habe ich aber trotzdem keine Lösung gefunden. :(

Gibt es einen Workaround für dieses Problem oder bin ich gezwungen nur mit einer einizgen Klasse zu arbeiten?

bye
Robert
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 16. April 2007, 18:53

Edit: Ich habe ein eigenes Thema daraus gemacht, da die Frage nichts mit Windows-Diensten zu tun hat.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 16. April 2007, 19:03

Du könntest z.B. mit vererbten Klassen arbeiten, so dass im Endeffekt wieder nur eine Klasse, die von den anderen Klassen die Methoden geerbt hat an den XMLRPC-Server übergeben wird.

server.py:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

from SimpleXMLRPCServer import SimpleXMLRPCServer

class XmlrpcHandler1(object):
    def get_hallo(self):
        return "Hallo"

class XmlrpcHandler2(object):
    def get_welt(self):
        return "Welt"

class XmlrpcHandlerAll(XmlrpcHandler1, XmlrpcHandler2):
    pass

server = SimpleXMLRPCServer(("localhost", 50505))
server.register_instance(XmlrpcHandlerAll())

print "Der XMLRPC-Server horcht auf http://localhost:50505."
print "Er kann mit STRG+C oder STRG+Pause beendet werden."
server.serve_forever()
client.py:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import socket
socket.setdefaulttimeout(3) # Timeout auf 3 sec. setzen
import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:50505")
print server.get_hallo(), 
print server.get_welt()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
dolle
User
Beiträge: 3
Registriert: Donnerstag 1. März 2007, 14:34
Wohnort: Südtirol
Kontaktdaten:

Dienstag 17. April 2007, 10:09

Das funktioniert perfekt!! Danke für die Hilfe.
Python rocks!!
Antworten