XML-RPC

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Ben

    XML-RPC

    Hi all,

    I think this is a very simple problem.. I'm trying to run an xml-rpc
    server given in SimpleXMLRPCSer ver.py file that comes with Python and
    wrote a very simple client to interact with it but it's giving me
    errors.

    The server code is as follows:

    #!/usr/local/bin/python2.2

    from SimpleXMLRPCSer ver import *

    # Install an instance with custom dispatch method:

    class Math:
    def _dispatch(self, method, params):
    if method == 'pow':
    return apply(pow, params)
    elif method == 'add':
    return params[0] + params[1]
    else:
    raise 'bad method'
    server = SimpleXMLRPCSer ver(("localhost ", 8000))
    server.register _instance(Math( ))
    server.serve_fo rever()

    Client code:
    #!/usr/local/bin/python2.2

    import xmlrpclib
    myserver = xmlrpclib.Serve r("http://localhost:8000" )

    p= [2,2]
    print myserver._dispa tch("add",p)

    The error I get:
    .......
    .......
    xmlrpclib.Fault : <Fault 1: 'bad method:None'>

    What have I done wrong?

    Thanks
    Ben
  • Alex Martelli

    #2
    Re: XML-RPC

    Ben wrote:
    ...[color=blue]
    > def _dispatch(self, method, params):
    > if method == 'pow':
    > return apply(pow, params)
    > elif method == 'add':
    > return params[0] + params[1]
    > else:
    > raise 'bad method'[/color]
    ...[color=blue]
    > p= [2,2]
    > print myserver._dispa tch("add",p)[/color]

    the way you've coded your server, the client should call myserver.add(2, 2)
    and NOT what you've coded on the client side.

    To see why add a simple print of method and params as the first line
    of _dispatch and you'll see:

    for the call to .add(2,2):
    dispatching 'add' (2, 2)

    for the call to ._dispatch('add ', [2,2]):
    dispatching '_dispatch' ('add', [2, 2])

    i.e. the way you call it string '_dispatch' becomes the method and the tuple
    of args that ends in params isn't what you apparently think it should be.


    Alex

    Comment

    Working...