我使用Spyne创建简单的webservie,当我调用该示例服务时出现以下错误:
class ServiceWsTest(ServiceBase):
__namespace__ = "appname"
@rpc(Unicode, _returns=Unicode)
def testMethod(self, name):
return "Hello {}" .format(name)
ws_test = csrf_exempt(DjangoApplication(Application([ServiceWsTest],
'appname',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11(cleanup_namespaces=True),
#interface=Wsdl11(),
)))
url(r'^sample/service', DjangoView.as_view(
services=[ServiceWsTest], tns='appname',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11(cleanup_namespaces=True))),
from SOAPpy import WSDL, SOAPProxy
server = SOAPProxy('http://IP ADDRESS/sandbox/sample/service/')
server.testMethod('john')
client = suds.client.Client("http://IP ADDRESS/sandbox/sample/service.wsdl", cache=None)
client.service.testMethod('jane')
Hello jane
如果我使用肥皂水,一切都运转正常。
preg_replace
请告知
答案 0 :(得分:0)
Soappy的请求有两个问题:
它没有使用正确的命名空间。 testMethod
代码必须位于" appname"命名空间。由于文档中没有空名称空间声明(xmlns="appname"
),标记的实际名称空间是未定义的。
它使用rpc编码样式(有xsi:type
个属性),而在Spyne生成的WSDL中,它明确表示要使用文档编码。
不要使用soappy,只需使用肥皂水。据我所知,soappy还没有维持多年。