2011-03-31 5 views
1

서버 코드 :xmlrpc 클라이언트가 xmlrpc 서버 프로 시저를 통해 액세스 할 수있는 목록에 항목을 추가 할 수없는 이유는 무엇입니까? (파이썬 라이브러리 참조 기준)

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() 

클라이언트 (통역 다른 터미널 창에서 시작) : 나는이 문제를 해결하려면 어떻게

>>> 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") 

? xmlrpc를 부적절하게 사용하고 있습니까?

+0

, 나는 서버가 다운이고 클라이언트가 서버에 요청을 보내는 동안 allow_none가 –

답변

8

XMLRPC 서버가 마샬링 할 수 없어 오류가 발생했습니다 None. 당신은 서버 생성자에 allow_none=True을 추가해야이 문제를 발견 다른 사람에 대한

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

I을 사용하지 않으면, 결과가 없음을 마샬링 할 수 없습니다 발견 또한이'None'은 서버의'append()'함수가 아무 것도 반환하지 않는다는 사실에서 나온 것이라고 지적했습니다; 그러므로'None'을 반환하고 XMLRPC 메커니즘이'None'을 반환 값으로 클라이언트에 마샬링하려고하면 예외가 throw됩니다. – Santa