Tom's Guide > Forum > Programmation > [Résolu] C# : Accès dynamique à un web service

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

Forum Programmation : [Résolu] C# : Accès dynamique à un web service

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !

Lire la meilleure réponse, apportée par OmaR.

Mot :    Pseudo :           
 

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:

Message cité 2 fois
Message édité par Kenelm le 07-07-2009 à 22:27:49
------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
Donnez votre avis sur la question !
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 ?

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Pas lu, trop long.

------------------------------ Reste en colère Princesse, reste en vie.
Répondre à LaMoufetteEnColere

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é)

------------------------------ Continuez vous me passionnez. La seule vue des sots me fascine.

 

Répondre à Jack-Cassidy

Kenelm a écrit :

Kikoo :dawa:

[texte chiant]

Merci :hello:


Salut.

De rien.

Spoiler :

J'ai bon ? [:el marco:2]

------------------------------ Barman officiel du FLCCF

Yama nue en vidéo !
Répondre à El Marco

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à...

------------------------------ Continuez vous me passionnez. La seule vue des sots me fascine.

 

Répondre à Jack-Cassidy

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:

------------------------------ Reste en colère Princesse, reste en vie.
Répondre à LaMoufetteEnColere

:mmmfff:


SWF file

------------------------------ Continuez vous me passionnez. La seule vue des sots me fascine.

 

Répondre à Jack-Cassidy

Kenelm a écrit :

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:

Code :
  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


Message édité par OmaR le 07-07-2009 à 23:09:08
------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

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.


------------------------------ Les Tutos
choississez votre CG
Choisir sa RAM
Répondre à Dafen@BoM

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.

Message cité 1 fois
Message édité par Kenelm le 07-07-2009 à 23:38:49
------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
Donnez votre avis sur la question !
Répondre à Kenelm

SWF file

------------------------------ Continuez vous me passionnez. La seule vue des sots me fascine.

 

Répondre à Jack-Cassidy

Kenelm a écrit :

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.


Message édité par OmaR le 07-07-2009 à 23:40:15
------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

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


Message édité par Kenelm le 07-07-2009 à 23:39:05
------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
Donnez votre avis sur la question !
Répondre à Kenelm

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>


Message édité par OmaR le 07-07-2009 à 23:47:19
------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

Ouais y'a bien un truc.

 

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

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

Moi il me génère ça :

 
Code :
  1. public interface SBMLServices
 

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

 
Code :
  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


Message édité par Kenelm le 07-07-2009 à 23:46:36
------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
Donnez votre avis sur la question !
Répondre à Kenelm
Meilleure réponse

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 ?


Message édité par OmaR le 07-07-2009 à 23:52:10
------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

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 :

 

http://i27.tinypic.com/4ik7pz.png

 

Pas grand chose en apparence, mais beaucoup quand on voit la classe qu'on se récupère au final :o


Message édité par Kenelm le 08-07-2009 à 00:08:54
------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
Donnez votre avis sur la question !
Répondre à Kenelm

Ok :) Moi c'est utilisé comme ça dans le logiciel de ma boîte donc bah...

------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR
Tom's Guide > Forum > Programmation > [Résolu] C# : Accès dynamique à un web service
Aller à :

Il y a 459 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens