Appli distribuée & WebServices sous VisualStudio .NET (2003)

Appli distribuée & WebServices sous VisualStudio .NET (2003) - C#/.NET managed - Programmation

Marsh Posté le 05-08-2003 à 18:23:19    

Bonjour,
 
Dans le cadre de mon stage de fin d'études (il me reste qques semaines, j'ai passé des mois à faire de la théorie/recherche), j'aimerais faire une application multi tier afin d'optimiser les performances: un client final A sur PDA, un "proxy" B sur PC, un WebService C pour du caching qui utlise un webService D sur un autre PC ou internet.
(L'appli est juste une demo afin de mesurer le gain en perf; si dans ce qui suit, vous trouvez mes suggestions saugrenues, merci de faire part de vos idées).
VisualStudio.NET rend l'integration de tout cela plus facile. Les Web Reference creent un proxy WSDL afin que le module appelant puisse utliser des WebServices distants comme un appli locale en invoquant simplement les méthodes.
 
Dans mon cas, C peut accéder à D si D est sur l'intranet. Il semble que je me heurte au firewall qd je veux utiliser un web Service sur internet (googleAPI, ou Xmethods.net babelfish par ex.) puisque j'ai une erreur du type "unable to connect to server". Pourtant, de part leur définition, les WebService sont censé utliser HTTP et le port 80 pour passer à travers les firewall... Quelqu'un a t il déjà expérimenté ce genre de problèmes ?
 
L'acces B-C ne devrait pas poser de probleme. Petite "Web Reference" C dans B et cela devrait etre bon.
 
La ou cela se corse, c'est que je veux appeler B de A mais sans utiliser de WebService puisque le but de B est de transformer le XML/SOAP en un truc plus basique pour accélerer le transfert entre A et B. (des rapports montrent un overhead soap/xml qui triple la durée de transfert des donnés)
J'avais pensé à des sockets TCP, il suffira juste de transmettre des tableaux de string.
Mais du coup, je ne sais pas trop quel type de projet déclarer pour B : Windows App? (bof car pas besoin d'interface) Windows Service? Class ou Control Library ?  
Class library est ptet le plus adaptée, mais peut on s'en servir pour envoyer des donnés via une socket ?
Si j'ajoute une référence de B dans A, cette DLL sera copié sur le PDA donc aucun interet. Je suppose donc qu'il ne faut pas que j'utlise les reference de VisualStudio entre A et B.
En fait, j'sais pas trop par ou commencer pour developper B. Any Ideas?
J'aimerais finir D et C avant en fait, mais comme je bloque sur D, je vais peut etre explorer d'autres voies. Si quelqu'un pouvait me trouver une solution pour D, je lui serait vraiment reconnaissant (j'ai posté un topic la dessus sur le forum asp.net)
 
Merci de vos contributions.

Reply

Marsh Posté le 05-08-2003 à 18:23:19   

Reply

Marsh Posté le 06-08-2003 à 09:55:19    

Rien n'oblige un web-service à ecouter sur le port 80. Tout depends du serveur.
Soit c'est un serveur Web classique qui reconnait les requetes de Web Services et les redirige comme il faut vers le module/l'appli qui sait les traiter, soit c'est un serveur de Web Services a part entière qui utilise son propre port (qui peut tres bien etre le 80, ou pas).
 
Le mieux est donc de vérifier vers quel port sont envoyées tes requetes à l'aide d'un outil de trace reseau.

Reply

Marsh Posté le 06-08-2003 à 10:15:41    

ok.
J'ai partiellement resolu mon pb en demandant les parametres alternatifs du proxy/firewall à l'admin reso.
Je peux donc ajouter la "Web Reference".
Mais qd j'appelle la methode, j'ai encore un pb de "unable to connect to server"
 
Quelqu'un ayant VS.NET 2003 pourrait il creer un projet C# ASP.NET WebService, ajouter la WebReference avec l'URL http://www.xmethods.net/sd/2001/BabelFishService.wsdl
la nommer BabelFish, et ecrire dans le code du WebService la methode suivante ? :
 

Code :
  1. [WebMethod]
  2. public string Translate(string word, string mode)
  3. {
  4.  // call BabelFishWebService
  5.  BabelFish.BabelFishService translator = new BabelFish.BabelFishService();
  6.  string result = translator.BabelFish(mode, word);
  7.  return result;
  8. }


 
Ensuite excecuter le WebService, donner un mot à traduire, et pour le mode, écrire par ex "en_fr" pour passer de l'english vers french.
Merci.  
J'aimerais savoir si ca marche pas à cause de mon code ou à cause du firewall.

Reply

Marsh Posté le 07-08-2003 à 16:33:03    

Le probleme de la WebReference est résolu en modifiant les parametres du proxy de l'entreprise, et en les mettant dans le code directement.
 
WebMethod(CacheDuration=100)]  
public string Translate(string word, string mode)  
{  
WebProxy myProxy = new WebProxy("proxy.mycompany.com:8080",true);  
BabelFish.BabelFishService translator = new BabelFish.BabelFishService();  
translator.Proxy = myProxy;  
string result = translator.BabelFish(mode, word);  
return result;  
}


Message édité par Eric B le 07-08-2003 à 16:33:24
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed