Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
975 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [.NET] WebService : Comment les exploiter convenablement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[.NET] WebService : Comment les exploiter convenablement

n°1354655
Arjuna
Aircraft Ident.: F-MBSD
Posté le 26-04-2006 à 19:14:59  profilanswer
 

Salut,
 
Je reviens à la charge à propos des WebServices.
 
Plateforme :
Serveur de base de données Oracle 8i hébergé sur Windows 2000 Server (d'ici deux mois, 10g sous Windows 2003 Server)
WebService hébergé sur un serveur Windows 2003 Server, écrit en C# .NET 2.0
Application cliente tournant sur Windows 2000 Pro/XP Pro, écrite en C# .NET 2.0
 
Architecture :
Je suis en train d'écrire une application Windows, qui attaque une base de données qui doit rester inaccessible aux utilisateurs. Mais l'appli doit être utilisable de n'importe où, y compris depuis Internet.
J'ai donc choisi d'utiliser des WebServices simples découpés en métiers afin d'interroger la base depuis mon appli.
Pour le moment, j'ai deux WebServices :
- Agent : Permet à l'utilisateur de s'authentifier et de charger son profile dans l'application
- Customer : Permet d'interroger la base de données à propos des clients et la mettre à jours depuis l'application
 
Problèmes :
Premier problème. (En fait, je viens de me rendre compte qu'un autre bug faisait planter... Il ne doit pas y avoir de problème, mais on ne sait jamais...)
J'ai une méthode :

Code :
  1. [WebMethod]
  2. public string LoadCustomer(decimal codsoc, string sigtie)
  3. {
  4.    ...
  5. }


Appel :

Code :
  1. string ret = MonService.LoadCustomer(2, "toto" );


Est-ce que ça marche ? J'ai obtenu pendant une heure une erreur de cast, et j'ai changé le "codsoc" en "string", puis fait un "decimal.Parse()" dans la méthode. Mais je me suis rendu compte que j'avais aussi un problème de cast dans la méthode plus loin, et du coup j'ai pas retesté... (putain que c'est relou cette histoire de debuger qui marche pas :gun:)
 
Second problème (celui-là, c'est un vrai)
Vous vous en doutez, un client, c'est loin d'être une simple string. Pour le moment, je recopie le résultat de mon "DataReader" dans un document "XmlDocument", et je retourne un "dom.InnerXml". Depuis l'appli, je fais alors un "dom.LoadXml(ret)". Ca marche, mais je trouve ça un peu lourd pour pas grand chose.
Est-ce qu'il n'y a pas moyen par exemple de retourner un "struct", qui serait alors aisément encodable par le WebService en Xml, que je pourrais alors recharger simplement ? Même si au final, c'est le même flux qui circule entre les deux, ce serait plus propre... Ou tout autre moyen ?
 
Merci !

mood
Publicité
Posté le 26-04-2006 à 19:14:59  profilanswer
 

n°1354699
moi23372
Posté le 26-04-2006 à 20:22:28  profilanswer
 

Les dataset de .NET c'est vraiment bien. Faut pas t'en priver ça marche très bien. Par contre, n'essaye pas une datatable seule. ça ne marchera pas, mais le dataset ça fonctionne nikel... Ton exemple doit fonctionner normalement. Franchement les Web Services .NET il n'y a rien de plus facile quan dje vois les Web Services JAVA offre bcp moins de flexibilité quand même...

n°1354799
alien_nan
Posté le 26-04-2006 à 22:52:53  profilanswer
 

le dataset semble etre la structure qui te conviendrait le mieux. J'utilise aussi des hashtables.
Par contre, le pb recurent est que je garde toujours une colonne pour gerer un code d'erreur. genre si le webservice a reussi a faire ce que je demandais, si j'ai reelement des données, tout ca pour eviter de caster des nulls ou des trucs du genre.

n°1354898
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-04-2006 à 09:34:40  profilanswer
 

:??: tu peux faire un return d'un dataset dans un webservice ?

n°1354939
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-04-2006 à 10:29:49  profilanswer
 

Ah ben en effet, en mettant des DataSet, ça fait vachement de lignes en moins :o

n°1355082
alien_nan
Posté le 27-04-2006 à 13:03:19  profilanswer
 

Arjuna a écrit :

Ah ben en effet, en mettant des DataSet, ça fait vachement de lignes en moins :o


;)
par contre, tu ne peux pas remonter de datatables directement car pas serializable :). Il y avait un article de la kb Microsoft a ce sujet, mais je l'ai pas sous la main. si je le retrouve, je t'envoie
l'autre interet de ton dataset est qu'il est "representable" en xml, tu le vois si tu appelles ton webservice via IE  
 
edit : on comprend alors la portabilité inter langage, car si en .net tu peux caster directement en dataset, tu peux aussi bien le caster en domdocument dans un autre langage !


Message édité par alien_nan le 27-04-2006 à 13:06:04
n°1355326
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-04-2006 à 16:47:09  profilanswer
 

ben en fait, c'est ce qu'il se passe : le webservice retourne de toute façon un flux xml. le ds est encodé en xml, avec une propriété en amont que .NET reconnait afin de comprendre qu'il sait d'un ds. de la même façon, en Java ou autre, on peut retourner un flux compatible dataset de .NET si on s'y prends bien.
 
en fait, ils ont automatisé ce que j'avais fait à la main (recopie de mes données dans un dom, retour d'un string représentant mon dom, puis loadxml du résultat :)
 
sinon, c'est même mieu qu'on ne puisse pas faire de dt, mais des ds. parcequ'un ds contiens des dt, et du coup je peux retourner le résultat de plusieurs requêtes d'un coup, et les identifier par un tablename différent dans mon ds :) et en plus ça marche :bounce:

n°1355886
moi23372
Posté le 28-04-2006 à 13:00:05  profilanswer
 

convernant la création d'un objet JAVA compatible avec .NET laisse tombé. J'ai essayé, à moins de lui fournir un document xml directement, il n'y a pas moyen et c'est vraiment chiant. Quand on voit la sérialisation d'un dataset, c'est full propriétaire. Donc pour construire un ensemble de liste coté java pour que ce soit compatible avec .NET :s laisse tomber... :s

n°1356043
Arjuna
Aircraft Ident.: F-MBSD
Posté le 28-04-2006 à 15:39:51  profilanswer
 

Ben ça va, moi je trouve ça plutôt lisible ce que génère un DS...
T'as le XSD suivit des données formattées selon ce XSL, c'est pas bien compliqué à automatiser pour relire la chose :

Code :
  1. <?xml version="1.0" standalone="yes"?>
  2. <tie>
  3.   <xs:schema id="tie" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  4.     <xs:element name="tie" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
  5.       <xs:complexType>
  6.         <xs:choice minOccurs="0" maxOccurs="unbounded">
  7.           <xs:element name="alerte1">
  8.             <xs:complexType>
  9.               <xs:sequence>
  10.                 <xs:element name="SIGTIE" type="xs:string" minOccurs="0" />
  11.                 <xs:element name="NOMTIE" type="xs:string" minOccurs="0" />
  12.                 <xs:element name="LOCALI" type="xs:string" minOccurs="0" />
  13.                 <xs:element name="CODPOS" type="xs:string" minOccurs="0" />
  14.                 <xs:element name="DATSIG1" type="xs:string" minOccurs="0" />
  15.                 <xs:element name="DATSIG2" type="xs:string" minOccurs="0" />
  16.                 <xs:element name="DATVIG" type="xs:string" minOccurs="0" />
  17.                 <xs:element name="ECHEANCE1" type="xs:string" minOccurs="0" />
  18.                 <xs:element name="ECHEANCE2" type="xs:string" minOccurs="0" />
  19.                 <xs:element name="PREAVIS" type="xs:decimal" minOccurs="0" />
  20.                 <xs:element name="DATPREAVIS1" type="xs:string" minOccurs="0" />
  21.                 <xs:element name="DATPREAVIS2" type="xs:string" minOccurs="0" />
  22.                 <xs:element name="DUREE" type="xs:decimal" minOccurs="0" />
  23.                 <xs:element name="OBSERVATIONS" type="xs:string" minOccurs="0" />
  24.                 <xs:element name="RETOUR" type="xs:string" minOccurs="0" />
  25.                 <xs:element name="RETDIP" type="xs:string" minOccurs="0" />
  26.                 <xs:element name="DATENVDIP" type="xs:string" minOccurs="0" />
  27.                 <xs:element name="DATENVCNT" type="xs:string" minOccurs="0" />
  28.               </xs:sequence>
  29.             </xs:complexType>
  30.           </xs:element>
  31.           <xs:element name="alerte2">
  32.             <xs:complexType>
  33.               <xs:sequence>
  34.                 <xs:element name="SIGTIE" type="xs:string" minOccurs="0" />
  35.                 <xs:element name="NOMTIE" type="xs:string" minOccurs="0" />
  36.                 <xs:element name="LOCALI" type="xs:string" minOccurs="0" />
  37.                 <xs:element name="CODPOS" type="xs:string" minOccurs="0" />
  38.                 <xs:element name="DATSIG1" type="xs:string" minOccurs="0" />
  39.                 <xs:element name="DATSIG2" type="xs:string" minOccurs="0" />
  40.                 <xs:element name="DATVIG" type="xs:string" minOccurs="0" />
  41.                 <xs:element name="ECHEANCE1" type="xs:string" minOccurs="0" />
  42.                 <xs:element name="ECHEANCE2" type="xs:string" minOccurs="0" />
  43.                 <xs:element name="PREAVIS" type="xs:decimal" minOccurs="0" />
  44.                 <xs:element name="DATPREAVIS1" type="xs:string" minOccurs="0" />
  45.                 <xs:element name="DATPREAVIS2" type="xs:string" minOccurs="0" />
  46.                 <xs:element name="DUREE" type="xs:decimal" minOccurs="0" />
  47.                 <xs:element name="OBSERVATIONS" type="xs:string" minOccurs="0" />
  48.                 <xs:element name="RETOUR" type="xs:string" minOccurs="0" />
  49.                 <xs:element name="RETDIP" type="xs:string" minOccurs="0" />
  50.                 <xs:element name="DATENVDIP" type="xs:string" minOccurs="0" />
  51.                 <xs:element name="DATENVCNT" type="xs:string" minOccurs="0" />
  52.               </xs:sequence>
  53.             </xs:complexType>
  54.           </xs:element>
  55.           <xs:element name="alerte3">
  56.             <xs:complexType>
  57.               <xs:sequence>
  58.                 <xs:element name="SIGTIE" type="xs:string" minOccurs="0" />
  59.                 <xs:element name="NOMTIE" type="xs:string" minOccurs="0" />
  60.                 <xs:element name="LOCALI" type="xs:string" minOccurs="0" />
  61.                 <xs:element name="CODPOS" type="xs:string" minOccurs="0" />
  62.                 <xs:element name="DATSIG1" type="xs:string" minOccurs="0" />
  63.                 <xs:element name="DATSIG2" type="xs:string" minOccurs="0" />
  64.                 <xs:element name="DATVIG" type="xs:string" minOccurs="0" />
  65.                 <xs:element name="ECHEANCE1" type="xs:string" minOccurs="0" />
  66.                 <xs:element name="ECHEANCE2" type="xs:string" minOccurs="0" />
  67.                 <xs:element name="PREAVIS" type="xs:decimal" minOccurs="0" />
  68.                 <xs:element name="DATPREAVIS1" type="xs:string" minOccurs="0" />
  69.                 <xs:element name="DATPREAVIS2" type="xs:string" minOccurs="0" />
  70.                 <xs:element name="DUREE" type="xs:decimal" minOccurs="0" />
  71.                 <xs:element name="OBSERVATIONS" type="xs:string" minOccurs="0" />
  72.                 <xs:element name="RETOUR" type="xs:string" minOccurs="0" />
  73.                 <xs:element name="RETDIP" type="xs:string" minOccurs="0" />
  74.                 <xs:element name="DATENVDIP" type="xs:string" minOccurs="0" />
  75.                 <xs:element name="DATENVCNT" type="xs:string" minOccurs="0" />
  76.               </xs:sequence>
  77.             </xs:complexType>
  78.           </xs:element>
  79.         </xs:choice>
  80.       </xs:complexType>
  81.     </xs:element>
  82.   </xs:schema>
  83.   <alerte1>
  84.     <SIGTIE>AGEN</SIGTIE>
  85.     <NOMTIE>BERNIMA B&amp;C</NOMTIE>
  86.     <LOCALI>AGEN</LOCALI>
  87.     <CODPOS>47000</CODPOS>
  88.     <DATSIG1 xml:space="preserve"> </DATSIG1>
  89.     <DATSIG2 xml:space="preserve"> </DATSIG2>
  90.     <DATVIG xml:space="preserve"> </DATVIG>
  91.     <ECHEANCE1 xml:space="preserve"> </ECHEANCE1>
  92.     <ECHEANCE2 xml:space="preserve"> </ECHEANCE2>
  93.     <PREAVIS>0</PREAVIS>
  94.     <DATPREAVIS1 xml:space="preserve"> </DATPREAVIS1>
  95.     <DATPREAVIS2 xml:space="preserve"> </DATPREAVIS2>
  96.     <DUREE>0</DUREE>
  97.     <OBSERVATIONS xml:space="preserve"> </OBSERVATIONS>
  98.     <RETOUR>N</RETOUR>
  99.     <RETDIP>N</RETDIP>
  100.     <DATENVDIP xml:space="preserve"> </DATENVDIP>
  101.     <DATENVCNT xml:space="preserve"> </DATENVCNT>
  102.   </alerte1>
  103.   <alerte1>
  104.     <SIGTIE>ALBA</SIGTIE>
  105.     <NOMTIE>TRANSPORTS ALBA</NOMTIE>
  106.     <LOCALI>BRESSOLS</LOCALI>
  107.     <CODPOS>82710</CODPOS>
  108.     <DATSIG1 xml:space="preserve"> </DATSIG1>
  109.     <DATSIG2 xml:space="preserve"> </DATSIG2>
  110.     <DATVIG xml:space="preserve"> </DATVIG>
  111.     <ECHEANCE1 xml:space="preserve"> </ECHEANCE1>
  112.     <ECHEANCE2 xml:space="preserve"> </ECHEANCE2>
  113.     <PREAVIS>0</PREAVIS>
  114.     <DATPREAVIS1 xml:space="preserve"> </DATPREAVIS1>
  115.     <DATPREAVIS2 xml:space="preserve"> </DATPREAVIS2>
  116.     <DUREE>0</DUREE>
  117.     <OBSERVATIONS xml:space="preserve"> </OBSERVATIONS>
  118.     <RETOUR>N</RETOUR>
  119.     <RETDIP>N</RETDIP>
  120.     <DATENVDIP xml:space="preserve"> </DATENVDIP>
  121.     <DATENVCNT xml:space="preserve"> </DATENVCNT>
  122.   </alerte1>
  123. </tie>


Message édité par Arjuna le 28-04-2006 à 15:41:15
n°1356393
moi23372
Posté le 29-04-2006 à 10:19:42  profilanswer
 

je ne dis pas que son xml est compliqué à comprendre. Mais plutot compliqué à généré sans passer par de l'xml pure en JAVA par exemple. Rien qu'au niveau des namespaces c'est déjà le bordel pour concevoir un objet non xml en JAVA compatible avec le DS.

mood
Publicité
Posté le 29-04-2006 à 10:19:42  profilanswer
 

n°1356404
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-04-2006 à 10:59:42  profilanswer
 

ha ben ouais, mais après si java ils sont pas foutus d'avoir un objet avec une méthode "loadxml" qui pourrait reprendre ton xml modifié, forcément tu vas pas pouvoir t'en servir. mais à ce moment, c'est plutôt java qui pèche. .NET offre le saveXml et loadXml, à java de faire pareil en face :spamafote:

n°1356407
moi23372
Posté le 29-04-2006 à 11:07:00  profilanswer
 

si les deux arrivait à se foutre d'accord, ça m'arrangerait bcp :D

n°1357600
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-05-2006 à 10:42:23  profilanswer
 

c'est sûr :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [.NET] WebService : Comment les exploiter convenablement

 

Sujets relatifs
[C# ASP.NET][Probleme] Affecter un CSSCLASS dynamiquement ?[VB.NET CF2.0] Sql server CE
Balise div dans le code .NET[.NET] [En partie résolu] debug appli web
[VB.NET] Passage de valeurs entre fenêtres fille/mère[ASP.Net]Liés deux controls par une fleche
[.NET] Appli windows, pocketpc etc. avec 1 seul source ?Probleme de sérialisation XML de collection d'objets VB .Net
Incompatibilités frameworks .NET 1 et 2 sur IIS ? [pt-e resolu]Comment créer un webservice en ASP
Plus de sujets relatifs à : [.NET] WebService : Comment les exploiter convenablement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR