Прежде всего, мой вопрос похож на этот
Но это немного по-другому.
То, что у нас есть, это ряд сред с одинаковым набором услуг.
Для некоторых сред (локальных) мы можем получить доступ к 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()
Это дает мне это исключение:
Сообщение с действием 'http://tempuri.org/IMyService/IsHealthy' не может быть обработано в получателе из-за несовпадения ContractFilter в EndpointDispatcher. Это может быть связано либо с несоответствием контракта (несоответствующие действия между отправителем и получателем), либо с несоответствием привязки / безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют одинаковый контракт и одну и ту же привязку (включая требования безопасности, например, Сообщение, Транспорт, Нет).
Дело в том, что если я устанавливаю клиента непосредственно на хост, он работает нормально:
client = suds.client.Client (host)
Как видите, я пытался клонировать клиента, но с тем же исключением. Я даже попробовал это:
baseclient = suds.client.Client(host)
client = baseclient.clone()
client.options.location = otherhost
....
И получил то же исключение.
Кто-нибудь может мне помочь?