Przede wszystkim, moje pytanie jest podobna do this oneZmień URL serwis internetowy dla klienta mydlin na starcie (utrzymanie WSDL)
Ale to trochę inaczej. Mamy szereg środowisk z tym samym zestawem usług. Dla niektórych środowisk (lokalnych) możemy uzyskać dostęp do pliku wsdl, a tym samym wygenerować klienta suds. W przypadku środowiska zewnętrznego nie możemy uzyskać dostępu do pliku wsdl. Ale będąc tym samym, miałem nadzieję, że mogę zmienić tylko URL bez regeneracji klienta. Próbowałem już klonowania klienta, ale to nie działa.
Edycja: Kod dodając:
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()
To daje mi ten wyjątek:
Komunikat z działania „http://tempuri.org/IMyService/IsHealthy” nie mogą być przetwarzane w odbiorniku ze względu na niedopasowanie ContractFilter Pod EndpointDispatcher. Może to być spowodowane niedopasowaniem umowy (niedopasowane działania między nadawcą a odbiorcą) lub niedopasowaniem powiązania/bezpieczeństwa między nadawcą a odbiorcą. Sprawdź, czy nadawca i odbiorca mają tę samą umowę i to samo wiązanie (w tym wymogi bezpieczeństwa, np. Wiadomość, transport, brak).
Rzeczą jest, jeśli ustawić klienta bezpośrednio do hosta, to działa dobrze: client = suds.client.Client (host)
Jak widać, próbowałem klonowania klienta, ale z tym samym wyjątkiem. Próbowałem nawet tego:
baseclient = suds.client.Client(host)
client = baseclient.clone()
client.options.location = otherhost
....
I dostałem ten sam wyjątek.
Ktoś może mi pomóc?
Próbowałem wielu rzeczy, ale nie mogę zrozumieć, co robię źle. Dodam kod do oryginalnego pytania. Byłoby wspaniale, gdybyś mógł to sprawdzić. – patanpatan
Mój problem polega na tym, że usługodawca daje ci plik. W trybie testowym należy ręcznie zmodyfikować plik WSDL za pomocą testowego adresu URL. Chciałem dokonać zmiany dynamicznie po załadowaniu pliku i aktualizacji lokalizacji adresu usługi. Nie sądzę, że to możliwe. – radtek