代码之家  ›  专栏  ›  技术社区  ›  gruszczy

在Twisted XML-RPC服务器中允许“无”

  •  6
  • gruszczy  · 技术社区  · 14 年前

    我正在使用Twisted构建XML RPC服务,我希望不使用任何服务,就像在标准的python lib中一样。如何将allow \none传递给xmlrpc服务器的扭曲版本?

    编辑

    In [28]: sock = rpc.ServerProxy('http://localhost:7080',allow_none=True)
    
    In [29]: sock
    Out[29]: <ServerProxy for localhost:7080/RPC2>
    
    In [30]: sock.list_reports()
    Out[30]: ['example']
    
    In [31]: sock.run_report('example')
    ---------------------------------------------------------------------------
    Fault                                     Traceback (most recent call last)
    
    reports/<ipython console> in <module>()
    
    /usr/lib/python2.6/xmlrpclib.pyc in __call__(self, *args)
       1197         return _Method(self.__send, "%s.%s" % (self.__name, name))
       1198     def __call__(self, *args):
    -> 1199         return self.__send(self.__name, args)
       1200 
       1201 ##
    
    
    /usr/lib/python2.6/xmlrpclib.pyc in __request(self, methodname, params)
       1487             self.__handler,
       1488             request,
    -> 1489             verbose=self.__verbose
       1490             )
       1491 
    
    /usr/lib/python2.6/xmlrpclib.pyc in request(self, host, handler, request_body, verbose)
       1251             sock = None
       1252 
    -> 1253         return self._parse_response(h.getfile(), sock)
       1254 
       1255     ##
    
    
    /usr/lib/python2.6/xmlrpclib.pyc in _parse_response(self, file, sock)
       1390         p.close()
       1391 
    -> 1392         return u.close()
       1393 
       1394 ##
    
    
    /usr/lib/python2.6/xmlrpclib.pyc in close(self)
        836             raise ResponseError()
        837         if self._type == "fault":
    --> 838             raise Fault(**self._stack[0])
        839         return tuple(self._stack)
        840 
    
    Fault: <Fault 8002: "Can't serialize output: cannot marshal None unless allow_none is enabled">
    
    2 回复  |  直到 14 年前
        1
  •  8
  •   Jean-Paul Calderone    14 年前

    XMLRPC 接受 allowNone 作为初始值设定项的参数。所以,通过 True 如果要支持,则在实例化资源时 None .

    from twisted.web.xmlrpc import XMLRPC
    resource = XMLRPC(allowNone=True)
    
        2
  •  0
  •   shahjapan    14 年前

    我认为应该在客户方指定…

    当您从xmlrpc客户机创建代理时-您可以为python xmlrpclib模块传递关键字参数allow_none=true,如下所示…

    In [184]: import xmlrpclib as rpc
    
    In [185]: sock = rpc.ServerProxy('http://localhost/xmlrpc/object',allow_none=True)
    

    编辑:

    from twisted.web.xmlrpc import Proxy
    proxy = Proxy('http://localhost/xmlrpc', allowNone=True)