2011-03-31 58 views
1

Server代碼:爲什麼xmlrpc客戶端無法通過xmlrpc服務器過程追加項目以便列出可訪問? (基於Python庫參考)

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啓用 – 2017-04-23 13:28:44

回答

8

您的XMLRPC服務器正在引發故障,因爲它無法編組None。您需要添加allow_none=True服務器構造:

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

我名帥無'd還指出這個'None'來自於你的服務器上的append()函數不返回任何東西;因此它返回'None',並且當XMLRPC機制嘗試將那個'None'封送回客戶端作爲返回值時,則拋出所述異常。 – Santa 2011-03-31 17:51:20

相關問題