Se connecter avec
S'enregistrer | Connectez-vous
Votre question

Question

Kenelm http://m.bestofmedia.com/sfp/design/usr/fr/avatars/72/1c/92462.gif
Modérateur
| dans Programmation

C# : Accès dynamique à un web service

Kikoo :dawa: 

J'ai un t'cho problème avec une appli qui utilise des web services, web services qui ont la particularité de changer d'adresse assez souvent.

Bien évidemment, ajouter un web service en référence je connais sur VS2008, mais ça c'est uniquement si l'adresse est fixe. Quand elle change régulièrement, et qu'il est donc nécessaire de devoir la rentrer manuellement au démarrage de l'application, sans pour autant que ça demande de devoir recompiler ça à chaque fois, ben ça se complique.

Mes recherches m'ont indiqué plein d'astuces, mais aucune ne fonctionne. Apparemment, certains arrivent tout simplement à accéder à un membre "Url" du web service, qui est hérité de la classe "Service" je crois, et qui permet de définir l'url de celui-ci, sauf que moi, pas de membre de ce nom sur mon web service... D'autres font des bidouilles bizarres avec le app.config qui est généré, sauf que app.config ou pas, l'adresse du web service est de toute façon rentrée en dur dans l'interface générée automatiquement par VS2008 (Reference.cs), et dans le WSDL qui est téléchargé et stocké de façon locale, et changer le app.config signifie de toute façon recompiler l'appli.

Du coup, ce qu'il me faut ben c'est simplement de pouvoir changer l'url au cours de l'application, voire carrément un moyen de charger intégralement le web service soi-même en code pur à partir du WSDL qui peut donc être récupéré comme on veut, sans utiliser l'ajout de référence de VS2008.

Si quelqu'un a une solution, ou comprend ne serait-ce qu'une des phrases que je raconte, je suis preneur.

Merci :hello: 
0
Vous devez être inscrit pour voter pour une question
  • Partagez
  • Etre averti des réponses
  • Ajouter aux favoris
Lassé par la pub ? Créez un compte
Ces contenus peuvent également vous intéresser
Solutions (18)
Meilleure solution
OmaR http://m.bestofmedia.com/sfp/design/usr/fr/avatars/5f/30/68307.gif
Expert Programmation
Modérateur
No no, j'utilise VS2008.

Allez, on va refaire les étapes:
1) Créé un nouveau projet
2) Click droit sur ton projet, "Add Web Reference"
3) Met l'URL de ton web service telle que tu me l'as donné. Tu vas avoir une seule méthode dans la liste et un "Web Reference Name" égal au nom du serveur à l'envers.
4) Edite le nom du "Web Reference Name" pour mettre quelque chose de plus facile d'accès (WebReference1 dans mon projet) et fais "Add Reference"
5) Il te créé un dossier WebReference1 dans ton projet avec les fichiers qui vont bien.
6) Tu peux accéder à ta classe SBMLServicesService depuis ton projet


Au passage, tu as un SBMLServicesClient toi... tu devrais avoir un SBMLServicesService plutôt. Tu as ajouté la bonne URL à tes web références ?
  • Partagez
Autres solutions (17)
Trier par
Kenelm http://m.bestofmedia.com/sfp/design/usr/fr/avatars/72/1c/92462.gif
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Ben tu leur diras que Service reference c'est mieux :o 
OmaR http://m.bestofmedia.com/sfp/design/usr/fr/avatars/5f/30/68307.gif
Expert Programmation
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Ok :)  Moi c'est utilisé comme ça dans le logiciel de ma boîte donc bah...
Kenelm http://m.bestofmedia.com/sfp/design/usr/fr/avatars/72/1c/92462.gif
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Nan mais oh tu m'as pris pour un noob ou quoi :o 

En fait je viens tout juste de trouver le problème, en voyant ton dossier "Web reference".

Toi tu utilises "Add web reference", et moi "Add service reference".
"Add web reference" est un wrapper de wsdl.exe dédié à l'ASMX qui utilise le XmlSerializer qui te génère des membres additionnels obligatoires foireux, et "Add service reference" c'est du WCF consumé only par du 3.0+.

Du coup, le résultat est pas le même, toi tu choppes un accès Soap, moi une interface client.

'fin bref. C'est juste que moi j'ajoutais le web service correctement depuis le début, et que tous les autres m'incitaient à faire ça mal avec des trucs deprecated.
Ça confirme ce que je disais, c'est du VS2005 trans-3.0 :o 

'fin bref, t'as essayé de m'aider, tu mérites 40 points :dawa: 

EDIT : Vla la différence :



Pas grand chose en apparence, mais beaucoup quand on voit la classe qu'on se récupère au final :o 
Kenelm http://m.bestofmedia.com/sfp/design/usr/fr/avatars/72/1c/92462.gif
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Ouais y'a bien un truc.

Toi il te génère ça dans ton Reference.cs :

  1. public partial class SBMLServicesService : System.Web.Services.Protocols.SoapHttpClientProtocol


Moi il me génère ça :

  1. public interface SBMLServices


Et pour le gérer, un dérivé de ClientBase :

  1. public partial class SBMLServicesClient : System.ServiceModel.ClientBase<BMLtests.SBMLwebService.SBMLServices>, BMLtests.SBMLwebService.SBMLServices


Par curiosité, t'aurais pas VS2005 ? Parce que tous les trucs d'aide que j'ai trouvé à base de "utilise la propriété Url" datent d'avant la sortie de VS2008... :o 

Et tu peux delete :o 
OmaR http://m.bestofmedia.com/sfp/design/usr/fr/avatars/5f/30/68307.gif
Expert Programmation
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Tiens une appli vite fait:
<cancel>

Dis moi quand je peux delete

Edit: euh j'ai du oublier de sauvegarder un fichier entre temps, je réupload:
<cancel>
Kenelm http://m.bestofmedia.com/sfp/design/usr/fr/avatars/72/1c/92462.gif
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Après farfouillage, je viens de me rendre compte que tout le bordel hérite de System.ServiceModel.ClientBase, alors que tout ce que je voyais ailleurs héritait de SoapHttpClientProtocol. Je sais pas ce que ces web services ont de particulier, je m'y connais pas plus, mais bon.

SoapHttpClientProtocol a bien une propriété Url, mais pas ClientBase. En revanche, ClientBase inclut dans ses constructeurs un (string endpointConfigurationName, string remoteAddress), le premier étant le nom du web service visiblement, et le second l'adresse.

J'ai pas d'autre serveur pour tester pour le moment, je pourrais voir ça demain au boulot en le définissant par défaut sur le WSDL du serveur distant et en le switchant sur le serveur local pour voir si ça marche bien. En tout cas, en les redéfinissant à la main, il arrive à se connecter, et si je mets n'importe quoi ça marche plus. Donc bon... suite demain :o 

EDIT : Pense à éditer ton post avec la citation pour virer l'adresse :o 
OmaR http://m.bestofmedia.com/sfp/design/usr/fr/avatars/5f/30/68307.gif
Expert Programmation
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Kenelm a dit :
C'est marqué dans le titre que c'est en C# :aha:

'fin bon, si tu veux tu veux tester, le webservice est dispo ici :

...


Vire les "[BLABLABLA]" :dawa: 
C'est juste qu'il vaut mieux éviter de laisser trop traîner st'adresse :o 

Et non, ça peut être sur le net ou en réseau local, on peut pas se reposer sur un dns.


Dans la fenêtre de réponse classique, on voit plus le titre du sujet, c'est pour ça que j'ai pas vu le C#

J'ai noté l'adresse, si tu veux supprimer, tu peux. Je regarde ça et je te dis.
Jack-Cassidy http://m.bestofmedia.com/sfp/design/usr/fr/avatars/a2/fb/110526.gif
Initié
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Kenelm http://m.bestofmedia.com/sfp/design/usr/fr/avatars/72/1c/92462.gif
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
C'est marqué dans le titre que c'est en C# :aha:

'fin bon, si tu veux tu veux tester, le webservice est dispo ici :

************


Et non, ça peut être sur le net ou en réseau local, on peut pas se reposer sur un dns.
Dafen@BoM http://m.bestofmedia.com/sfp/design/usr/fr/avatars/f1/49/532381.jpg
Débutant
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Ce sont des services en ligne ou integre a un ensemble de logiciels a telecharger (une suite quoi) ?

Parce que si c'est en ligne, il y a toujours des systeme de redirection automatique qui existent comme DYN DNS.


OmaR http://m.bestofmedia.com/sfp/design/usr/fr/avatars/5f/30/68307.gif
Expert Programmation
Modérateur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Kenelm a dit :
Kikoo :dawa: 

J'ai un t'cho problème avec une appli qui utilise des web services, web services qui ont la particularité de changer d'adresse assez souvent.

Bien évidemment, ajouter un web service en référence je connais sur VS2008, mais ça c'est uniquement si l'adresse est fixe. Quand elle change régulièrement, et qu'il est donc nécessaire de devoir la rentrer manuellement au démarrage de l'application, sans pour autant que ça demande de devoir recompiler ça à chaque fois, ben ça se complique.

Mes recherches m'ont indiqué plein d'astuces, mais aucune ne fonctionne. Apparemment, certains arrivent tout simplement à accéder à un membre "Url" du web service, qui est hérité de la classe "Service" je crois, et qui permet de définir l'url de celui-ci, sauf que moi, pas de membre de ce nom sur mon web service... D'autres font des bidouilles bizarres avec le app.config qui est généré, sauf que app.config ou pas, l'adresse du web service est de toute façon rentrée en dur dans l'interface générée automatiquement par VS2008 (Reference.cs), et dans le WSDL qui est téléchargé et stocké de façon locale, et changer le app.config signifie de toute façon recompiler l'appli.

Du coup, ce qu'il me faut ben c'est simplement de pouvoir changer l'url au cours de l'application, voire carrément un moyen de charger intégralement le web service soi-même en code pur à partir du WSDL qui peut donc être récupéré comme on veut, sans utiliser l'ajout de référence de VS2008.

Si quelqu'un a une solution, ou comprend ne serait-ce qu'une des phrases que je raconte, je suis preneur.

Merci :hello: 


Hello !

En fait, tu n'a pas forcément une classe "Service" il me semble, mais ça peut être n'importe quelle classe. Si je prend les Web Services de SharePoint, pour le Lists.asmx, tu as une classe Lists, pour Webs.asmx tu as une classe Webs, etc...

Tu n'as pas dit avec quel langage tu bossais, je te montre en C#, mais bon à toi d'arranger :) 
Si ma Web Reference s'appelle "WssLists", je fais:
  1. WssLists.Lists listsWS = new WssLists.Lists();
  2. listsWS.Url = "http://monserver/_vti_bin/Lists.asmx";


Le plus simple, si tu fais ça en C#, c'est de voir ce que VS te propose lorsque tu fais "Ctrl+Entrée" après avoir entré le nom de ta Web Reference

Edit: @LMEC: bah non c'est que moi :p 
Jack-Cassidy http://m.bestofmedia.com/sfp/design/usr/fr/avatars/a2/fb/110526.gif
Initié
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
:mmmfff: 


LaMoufetteEnColere http://m.bestofmedia.com/sfp/design/usr/fr/avatars/b9/4c/275829.gif
Membre fresh'n'hype
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Moi je reste un peu, on va faire connaissance avec des geeks, des vrais, des bouffeurs de pizzas et amateurs de japanese massive bouncing boobs :dawa: 

Salut les gars :dawa: 
Jack-Cassidy http://m.bestofmedia.com/sfp/design/usr/fr/avatars/a2/fb/110526.gif
Initié
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Ouch, je viens de réaliser que je suis en section "programmation" après avoir suivi un fourbe lien.

J'en suis tout emoustillé là...
El Marco http://m.bestofmedia.com/sfp/design/usr/fr/avatars/5f/a5/310236.png
Freeposteur
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Kenelm a dit :
Kikoo :dawa: 

[texte chiant]

Merci :hello: 

Salut.

De rien.

Spoiler
J'ai bon ? [:el marco:2]
Jack-Cassidy http://m.bestofmedia.com/sfp/design/usr/fr/avatars/a2/fb/110526.gif
Initié
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Il faut tout simplement signaler ces changement d'adresse au facteur qui fera suivre.



(Bah je voulais des points, donc j'ai tenté. Désolé)
LaMoufetteEnColere http://m.bestofmedia.com/sfp/design/usr/fr/avatars/b9/4c/275829.gif
Membre fresh'n'hype
Voter contre
Vous devez avoir un badge bronze dans cette catégorie pour votre contre une solution.
Score 0
Voter pour
Ce score indique à quel point cette solution est soutenue par la communauté. Vous devez être inscrit pour voter pour une solution. Créez votre compte ou identifiez-vous.
Pas lu, trop long.
Lassé par la pub ? Créez un compte
non identifié
Vous n'êtes pas identifié. Se connecter ou S'enregistrer
Tom's guide dans le monde