Why can't xmlrpc client append item to list accessable via xmlrpc server procedure?

不打扰是莪最后的温柔 提交于 2019-12-22 00:50:48

问题


Server code (based on Python library reference):

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler

class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ()

server = SimpleXMLRPCServer(("127.0.0.1", 8000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

l = list()

def say_hi():
    return 'hi !'

def append(event):
    l.append(event)

server.register_function(say_hi)
server.register_function(append)

server.serve_forever()

Client (interpreter started from another terminal window):

>>> from xmlrpc.client import ServerProxy
>>> s = ServerProxy('http://127.0.0.1', allow_none=True)
>>> s.say_hi()
'hi !'
>>> s.append(1)
Traceback (most recent call last):
...
xmlrpc.client.Fault(Fault 1: "<class 'TypeError'>:cannot
                    marshal None unless allow_none is enabled")

How do I fix this? Am I using xmlrpc improperly?


回答1:


Your XMLRPC server is raising a fault since it cannot marshal None. You need to add allow_none=True to the server constructor:

server = SimpleXMLRPCServer(("127.0.0.1", 8000),
                        requestHandler=RequestHandler, 
                        allow_none=True)



回答2:


The error message is self-speaking.

append() returns None which can not be marshalled unless you specify allow_none.

Reading error messages and the API documentation

http://docs.python.org/library/simplexmlrpcserver.html

is your friend.



来源:https://stackoverflow.com/questions/5503445/why-cant-xmlrpc-client-append-item-to-list-accessable-via-xmlrpc-server-procedu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!