Se connecter / S'enregistrer

Résolu C# : Accès dynamique à un web service

Solutions (18)
Tags :
  • Demarrage
  • Programmation
, Légende |
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: 
Contenus similaires
Meilleure solution
partage
, 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 ?
  • Commenter cette solution |
Score
0
òh
òi
, Légende |
Ben tu leur diras que Service reference c'est mieux :o 
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Ok :)  Moi c'est utilisé comme ça dans le logiciel de ma boîte donc bah...
  • Commenter cette réponse |
Score
0
òh
òi
, Légende |
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 
  • Commenter cette réponse |
Score
0
òh
òi
, Légende |
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 
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
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>
  • Commenter cette réponse |
Score
0
òh
òi
, Légende |
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 
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
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.
  • Commenter cette réponse |
Score
0
òh
òi
|
  • Commenter cette réponse |
Score
0
òh
òi
, Légende |
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.
  • Commenter cette réponse |
Score
0
òh
òi
|
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.


  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
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 
  • Commenter cette réponse |
Score
0
òh
òi
|
:mmmfff: 


  • Commenter cette réponse |
Score
0
òh
òi
, Membre fresh'n'hype |
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: 
  • Commenter cette réponse |
Score
0
òh
òi
|
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à...
  • Commenter cette réponse |
Score
0
òh
òi
, Freeposteur |
Kenelm a dit :
Kikoo :dawa: 

[texte chiant]

Merci :hello: 

Salut.

De rien.

Spoiler
J'ai bon ? [:el marco:2]
  • Commenter cette réponse |
Score
0
òh
òi
|
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é)
  • Commenter cette réponse |
Score
0
òh
òi
, Membre fresh'n'hype |
Pas lu, trop long.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS