首先,我的问题和这个类似
但这有点不同。我们拥有的是一系列环境,具有相同的服务集。对于某些环境(本地环境),我们可以访问 wsdl,从而生成 suds 客户端。对于外部环境,我们无法访问 wsdl。但同样,我希望我可以只更改 URL 而无需重新生成客户端。我试过克隆客户端,但它不起作用。
编辑:添加代码:
host='http://.../MyService.svc'
wsdl_file = 'file://..../wsdl/MyService.wsdl'
client = suds.client.Client(wsdl_file, location=host, cache=None)
#client = baseclient.clone()
#client.options.location = otherhost
client.set_options(port='BasicHttpBinding_IMyService')
result = client.service.IsHealthy()
这给了我这个例外:
由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action ' http://tempuri.org/IMyService/IsHealthy '的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。
问题是,如果我将客户端直接设置为主机,它可以正常工作:client = suds.client.Client(host)
如您所见,我尝试克隆客户端,但有同样的例外。我什至试过这个:
baseclient = suds.client.Client(host)
client = baseclient.clone()
client.options.location = otherhost
....
并得到了同样的例外。
任何人都可以帮助我吗?