Prima di tutto, la mia domanda è simile a this oneCambia servizio web url per un cliente schiuma sul runtime (mantenendo il WSDL)
Ma è un po 'diverso. Quello che abbiamo è una serie di ambienti, con lo stesso insieme di servizi. Per alcuni ambienti (quelli locali) possiamo accedere a wsdl e quindi generare il client suds. Per l'ambiente esterno, non è possibile accedere a wsdl. Ma essendo lo stesso, speravo di poter modificare solo l'URL senza rigenerare il client. Ho provato a clonare il client, ma non funziona.
Edit: Codice aggiungendo:
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()
che mi dà questa eccezione:
il messaggio con azione 'http://tempuri.org/IMyService/IsHealthy' non possono essere trattati presso il ricevitore, a causa di una mancata corrispondenza ContractFilter al EndpointDispatcher. Ciò può essere dovuto a una mancata corrispondenza contrattuale (azioni non corrispondenti tra il mittente e il destinatario) o una mancata corrispondenza tra il mittente e il destinatario. Verifica che mittente e destinatario abbiano lo stesso contratto e lo stesso legame (inclusi i requisiti di sicurezza, ad esempio Messaggio, Trasporto, Nessuno).
Il fatto è che, se ho impostato il cliente direttamente all'host, funziona benissimo: client = suds.client.Client (host)
Come potete vedere, ho provato clonazione del cliente, ma con la stessa eccezione. Ho anche provato questo:
baseclient = suds.client.Client(host)
client = baseclient.clone()
client.options.location = otherhost
....
E ha ottenuto la stessa eccezione.
Chiunque può aiutarmi?
Ho provato un sacco di cose ma non riesco a capire cosa sto facendo male. Aggiungo un po 'di codice alla domanda originale, Sarebbe bello se potesse controllarlo – patanpatan
Il mio problema è che il fornitore di servizi ti dà un file. Per la modalità test, devi modificare manualmente il file wsdl con l'url test. Volevo apportare la modifica in modo dinamico dopo aver caricato il file e aggiornato il percorso dell'indirizzo del servizio. Non penso sia possibile. – radtek