打开IDLE并导入suds客户端,我可以通过以下方式创建客户端:
c = Client('http://blah/Core.svc?wsdl')
随后致电:
c2 = Client('http://blah/Core.svc?wsdl')
会引发TypeNotFound
错误,在wsdl文件中命名一个类。
我试过了:
timeout = 5 # and then waiting
cache = None
但是同样的错误发生了。我不介意我是否不能使用第一个实例,但我如何抓住第二个?
我正在编写测试,这些测试将由PySys的单个实例运行,但它们不会共享数据。
顺便说一下,当我在此之后退出()IDLE时,它会询问我是否要终止正在运行的进程,所以我在假设创建一个客户端触发一个线程时是否正确?
我得到的错误是:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
c1 = Client('http://localhost:8090/Service/Core.svc?wsdl')
File "build\bdist.win-amd64\egg\suds\client.py", line 119, in __init__
sd = ServiceDefinition(self.wsdl, s)
File "build\bdist.win-amd64\egg\suds\servicedefinition.py", line 58, in __init__
self.paramtypes()
File "build\bdist.win-amd64\egg\suds\servicedefinition.py", line 137, in paramtypes
item = (pd[1], pd[1].resolve())
File "build\bdist.win-amd64\egg\suds\xsd\sxbasic.py", line 63, in resolve
raise TypeNotFound(qref)
TypeNotFound: Type not found: '(ClassName, http://schemas.datacontract.org/4004/07/Class.Namespace, )'
c.last_received()和c.last_sent()都是空的。
更进一步,我查看了我的IIS日志,发现每当我第一次在python实例中调用Client(url)时,我得到:
GET /Service/Core.svc wsdl 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd0 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
但是来自同一个python实例的后续调用给了我:
GET /Service/Core.svc wsdl 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd0 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6
每次请求某个文件时,响应的大小都相同。
答案 0 :(得分:1)
这可能是其他地方的问题(即提供WSDL的服务),因为我在使用SOAP服务时无法在IDLE或python命令shell或脚本(我正在使用Windows)中重现。
你能提供确切的错误,suds的版本和有问题的WSDL的实际URL吗?
无论我如何尝试,以下输出都是相同的。
>>> from suds.client import Client
>>> c1 = Client('http://vocab.nerc.ac.uk/vocab2.wsdl')
>>> c2 = Client('http://vocab.nerc.ac.uk/vocab2.wsdl')
>>> c1
<suds.client.Client object at 0x022AE230>
>>> c2
<suds.client.Client object at 0x022CCDB0>
>>>
编辑:
关于退出IDLE的通知,即使您在IDLE中没有运行代码,然后键入quit()
以关闭
编辑2:
尝试使用here提到的一些技术(last_sent和logging)来调试它
答案 1 :(得分:0)
suds默认值中不会出现此错误。 这在以下this patch后面显示:
recurselevel-schema.py.patch
https://github.com/sandersnewmedia/suds/blob/master/suds/xsd/recurselevel-schema.py.patch
在文件中
/suds/xsd/schema.py
此补丁解决了“递归级别架构错误”,但是当您需要使用指向同一个wsdl的多个suds客户端时会导致错误。