首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用soaplib (服务器端)和suds (客户端)的Python soap

使用soaplib (服务器端)和suds (客户端)的Python soap
EN

Stack Overflow用户
提问于 2010-01-03 01:51:55
回答 2查看 21.3K关注 0票数 11

此问题与:Python SOAP server / client相关

在使用soap和python的情况下,建议使用soaplib (http://wiki.github.com/jkp/soaplib)作为soap服务器,使用suds (https://fedorahosted.org/suds/)作为soap客户端。我的目标是用python创建可供多个客户端(java等)使用的soap服务。我尝试了来自soaplib (http://trac.optio.webfactional.com/wiki/HelloWorld)的HelloWorld示例。当客户端也在使用soaplib时,它工作得很好。

然后,我尝试使用suds作为使用HelloWorld服务的客户端,但失败了。-Why这是怎么回事?soaplib服务器在不同的客户端使用时会出现问题吗?

下面是服务器的代码:

代码语言:javascript
复制
from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers.primitive import String, Integer, Arraycode
class HelloWorldService(SimpleWSGISoapApp):
@soapmethod(String,Integer,_returns=Array(String))
def say_hello(self,name,times):
    results = []
    for i in range(0,times):
        results.append('Hello, %s'%name)
    return results

if __name__=='__main__':
from cherrypy.wsgiserver import CherryPyWSGIServer
#from cherrypy._cpwsgiserver import CherryPyWSGIServer
# this example uses CherryPy2.2, use cherrypy.wsgiserver.CherryPyWSGIServer for CherryPy 3.0
server = CherryPyWSGIServer(('localhost',7789),HelloWorldService())
server.start()

这是soaplib客户端:

代码语言:javascript
复制
from soaplib.client import make_service_client
from SoapServerTest_1 import HelloWorldService
client = make_service_client('http://localhost:7789/',HelloWorldService())
print client.say_hello("Dave",5)

结果:

代码语言:javascript
复制
>>> ['Hello, Dave', 'Hello, Dave', 'Hello, Dave', 'Hello, Dave', 'Hello, Dave']

这是suds客户端:

代码语言:javascript
复制
from suds.client import Client
url = 'http://localhost:7789/HelloWordService?wsdl'
client1 = Client(url)
client1.service.say_hello("Dave",5)

结果:

代码语言:javascript
复制
    >>> Unhandled exception while debugging...
Traceback (most recent call last):
  File "C:\Python25\Lib\site-packages\RTEP\Sequencing\SoapClientTest_1.py", line 10, in <module>
    client1.service.say_hello("Dave",5)
  File "c:\python25\lib\site-packages\suds\client.py", line 537, in __call__
    return client.invoke(args, kwargs)
  File "c:\python25\lib\site-packages\suds\client.py", line 597, in invoke
    result = self.send(msg)
  File "c:\python25\lib\site-packages\suds\client.py", line 626, in send
    result = self.succeeded(binding, reply.message)
  File "c:\python25\lib\site-packages\suds\client.py", line 658, in succeeded
    r, p = binding.get_reply(self.method, reply)
  File "c:\python25\lib\site-packages\suds\bindings\binding.py", line 158, in get_reply
    result = unmarshaller.process(nodes[0], resolved)
  File "c:\python25\lib\site-packages\suds\umx\typed.py", line 66, in process
    return Core.process(self, content)
  File "c:\python25\lib\site-packages\suds\umx\core.py", line 48, in process
    return self.append(content)
  File "c:\python25\lib\site-packages\suds\umx\core.py", line 63, in append
    self.append_children(content)
  File "c:\python25\lib\site-packages\suds\umx\core.py", line 140, in append_children
    cval = self.append(cont)
  File "c:\python25\lib\site-packages\suds\umx\core.py", line 61, in append
    self.start(content)
  File "c:\python25\lib\site-packages\suds\umx\typed.py", line 77, in start
    found = self.resolver.find(content.node)
  File "c:\python25\lib\site-packages\suds\resolver.py", line 341, in find
    frame = Frame(result, resolved=known, ancestry=ancestry)
  File "c:\python25\lib\site-packages\suds\resolver.py", line 473, in __init__
    resolved = type.resolve()
  File "c:\python25\lib\site-packages\suds\xsd\sxbasic.py", line 63, in resolve
    raise TypeNotFound(qref)
TypeNotFound: Type not found: '(string, HelloWorldService.HelloWorldService, )'
EN

回答 2

Stack Overflow用户

发布于 2010-01-03 09:32:04

尝试将原语导入到类中:

代码语言:javascript
复制
class HelloWorldService(SimpleWSGISoapApp):
    from soaplib.serializers.primitive import String, Integer, Arraycode
    @soapmethod(String,Integer,_returns=Array(String))
票数 2
EN

Stack Overflow用户

发布于 2010-04-13 04:52:55

如果您从主干获取最新的源代码,则可以修复此错误,有关详细信息,请参阅https://github.com/soaplib/soaplib/pull/12

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1992239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档