8
votes

Modifier l'URL du service Web pour un client SUDS sur Runtime (Garder le WSDL)

Tout d'abord, ma question est similaire à Celui-ci

Mais c'est un peu différent. Ce que nous avons est une série d'environnements, avec le même ensemble de services. Pour certains environnements (les locaux), nous pouvons avoir accès au WSDL et générer ainsi le client SUDS. Pour un environnement externe, nous ne pouvons pas accéder au WSDL. Mais étant la même chose, j'espérais que je puisse changer juste l'URL sans régénérer le client. J'ai essayé de cloner le client, mais cela ne fonctionne pas. P>


Edit: Ajout de code: P>

    baseclient = suds.client.Client(host)

    client = baseclient.clone()

    client.options.location = otherhost
    ....


0 commentaires

3 Réponses :


0
votes

Vous pourriez être capable de le faire en spécifiant l'emplacement du service. En supposant que vous avez un objet appelé Client , vous pouvez modifier l'emplacement de service en mettant à jour l'URL dans client.Option.Location .

En outre, vous pouvez utiliser une copie locale d'un fichier WSDL comme URL lors de la construction du client à l'aide d'un fichier fichier: // schéma de l'URL, par exemple. fichier: ///path/to/service.wsdl . Donc, cela pourrait être une autre option pour vous. Bien sûr, vous devrez également spécifier l'emplacement de sorte que l'emplacement par défaut de la WSDL soit remplacé.


2 commentaires

J'ai essayé beaucoup de choses mais je ne peux pas comprendre ce que je fais mal. Je vais ajouter du code à la question initiale, ce serait génial si vous pouviez le vérifier


Mon problème est que le fournisseur de services vous donne un fichier. Pour le mode test, vous devez modifier le fichier WSDL manuellement avec l'URL de test. Je voulais apporter le changement de manière dynamique après avoir chargé le fichier et mettre à jour l'emplacement de l'adresse de service. Je ne pense pas que ce soit possible.



3
votes

Je l'ai !. Je ne sais même pas comment je l'ai compris, mais avec un peu de deviner et une bonne chance, je me suis retrouvé avec ceci: xxx

et ça marche! Je ne trouve aucune documentation sur cette propriété (client.wsdl.url), mais cela fonctionne, alors je le pose au cas où quelqu'un ait le même problème.


2 commentaires

Argh! Il venait de recevoir l'URL du dossier. Le paramètre Client.WSDL.URL est modifié, mais il continue à aller au service d'origine.


Alors ça marche? Sinon, peut-être une combinaison de client.wsdl.url et client.option.location ? Cela commence à se sentir hacky, peut-être que la liste de diffusion SUDS serait plus utile?



6
votes
client.set_option(new_url)

1 commentaires

Certaines explications ou un lien vers la documentation rendraient votre réponse beaucoup plus précieuse.