Change web service url for a suds client on runtime (keeping the wsdl)

patanpatan picture patanpatan · May 14, 2010 · Viewed 9.8k times · Source

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?

Answer

anthonyrisinger picture anthonyrisinger · Feb 13, 2013
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.