One of the nice things about SOAP is the WDSL that gives you information about the methods the service supports. I recently discovered that you can do the same thing with XML-RPC. The trick is to document your methods properly, like you should be doing anyways. Lets say I have the following controller:
@service.xmlrpc @service.jsonrpc def add(num1, num2): """ Adds two numbers together. add(num1, num2) -> number Arguments: num1 First number num2 Second number Returns: The sum of the two numbers. Examples: add(2, 2) -> 4 add(2.5, 2.5) -> 5.0 """ return num1 + num2 @service.xmlrpc @service.jsonrpc def concat(str1, str2, str3=''): """ Concatenates two or three strings. concat(str1, str2, str3='') -> string Arguments: str1 First string str2 Second string str3 (Optional) Third string Returns: The concatenated string. Examples: concat('hello', ' world') -> 'hello world' concat('hello', ' world', ' !!!') -> 'hello world !!! """ return str1 + str2 + str3 @service.xmlrpc @service.jsonrpc def date(): """ Returns the server's current date and time. """ return datetime.datetime.now() Now let's connect using xmlrpclib: >>> import xmlrpclib >>> x = xmlrpclib.ServerProxy('http://127.0.0.1:8000/rpc_test/default/call/xmlrpc') Now, we could start calling the methods as usual, or we could do a little introspection to see what methods are available, and even get the docstrings of those methods: >>> print x.system.listMethods() ['add', 'concat', 'date', 'system.listMethods', 'system.methodHelp', 'system.methodSignature'] >>> print x.system.methodHelp('concat') Concatenates two or three strings. concat(str1, str2, str3='') -> string Arguments: str1 First string str2 Second string str3 (Optional) Third string Returns: The concatenated string. Examples: concat('hello', ' world') -> 'hello world' concat('hello', ' world', ' !!!') -> 'hello world !!!' >>> x.concat('hello', 'web2py') 'helloweb2py' Very cool! However, you will notice that there is another method in there: system.methodSignature(). This would show the signature of the method (i.e. concat(str1, str2, str3=''), however, it seems that web2py's XMLRPC server implementation (or SimpleXMLRPCServer.py) doesn't support this, as it returns 'signatures not supported' whenever you try to call this method. I hope that someone finds this useful!