First of all, my question is similar to this one
But it's a little bit different. What we have is a series of environments, with the same set of services. For some environments (the local ones) we can get access to the wsdl, and thus generating the suds client. For external environment, we cannot access the wsdl. But being the same, I was hoping I can change just the URL without regenerating the client. I've tried cloning the client, but it doesn't work.
Edit: adding code:
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()
That gives me this exception:
The message with Action 'http://tempuri.org/IMyService/IsHealthy' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
The thing is, if I set the client directly to the host, it works fine: client = suds.client.Client(host)
As you can see, I've tried cloning the client, but with the same exception. I even tried this:
baseclient = suds.client.Client(host)
client = baseclient.clone()
client.options.location = otherhost
....
And got the same exception.
Anyone can help me?
client.sd[0].service.setlocation(new_url)
...is the "manual" way, ie. per service-description.
client.set_option(new_url)
...should also work, per the author.
options
is a wrapped/protected attr -- direct edits may very well be ignored.