打开 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 的单个实例运行,但单独不共享数据。
顺便说一句,当我在此之后退出()空闲时,它会询问我是否要终止正在运行的进程,所以我假设创建客户端会触发线程是否正确?
我得到的错误是:
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
每次请求某个文件时,响应的大小都是相同的。