[C#] Communication WCF entre Silverlight 2 et LinqToSQL

Communication WCF entre Silverlight 2 et LinqToSQL [C#] - C#/.NET managed - Programmation

Marsh Posté le 02-06-2009 à 13:32:16    

Bonjour,
 
J'ai un soucis :
 
Le contexte :
Je travaille sous Visual Studio 2008, en C# avec le FrameWork 3.5, Silverlight 2 et SQL Server 2005.
 
Je tente d'utiliser le composant "DataGrid" de Silverlight pour afficher des données d'une base.
L'accés à la base se fait via LinqToSQL.
Pour celà il faut créer un service WCF.
 
Le problème :
J'ai crée une fontion du service WCF qui interroge la base. Elle marche.
Le soucis c'est que la fonction renvoie une List<NomTable>, et que de l'autre Silverlight ne retrouve pas ses petits.
Si ma fonction retourne une List<string> ça marche très bien.
 
J'ai déjà changer la sérialisation de la classe générée par LINQToSQL à Unidirectionnal.
Mais ça ne change rien. Que faire ?

Reply

Marsh Posté le 02-06-2009 à 13:32:16   

Reply

Marsh Posté le 02-06-2009 à 13:41:01    

Normalement les requêtes LINQ retournent une collection IEnumerable<> (interface implémentée notamment par List<> ), ça ne devrait pas poser de souci normalement.
Poste du code stp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-06-2009 à 13:45:21    

Voici le code de mon service (où LANGUE est la classe crée par LinqToSQL) :
 

Code :
  1. namespace SilverlightApplication2.Web
  2. {
  3.     [ServiceContract(Namespace = "" )]
  4.     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  5.     public class LanguesService
  6.     {
  7.         [OperationContract]
  8.         public List<LANGUE> DoWork()
  9.         {
  10.             DataClasses1DataContext db = new DataClasses1DataContext();
  11.             List<LANGUE> tmp = db.LANGUE.Select(l => l).ToList();
  12.             return tmp;
  13.         }
  14.     }
  15. }

Reply

Marsh Posté le 02-06-2009 à 15:44:54    

Et pourquoi Silverlight ne retrouve pas ses petits ? Pourquoi retourner une List<> et pas un IEnumerable<> ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-06-2009 à 15:59:48    

Car IEnumerable, la requête n'est pas encore faite.
Là avec ToList() il fait vraiment a ce moment précis la requête.
Chose que je vérifie en consultant avec le debugger ce qu'a renvoyé la requête. Il n'y a pas de pb de ce côté.
 
Par contre côté Silverlight ... le result est absent, alors que quand je renoive des List<string> à la place de List<LANGUE>, Silverlight retrouve bien les résultats.

Reply

Marsh Posté le 02-06-2009 à 16:13:47    

Tu peux poster le code client stp ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-06-2009 à 08:08:40    

Code :
  1. public void btnSearch_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             lsc.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(lsc_DoWorkCompleted);
  4.             lsc.DoWorkAsync();
  5.         }
  6.         void lsc_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e)
  7.         {
  8.             dg.ItemsSource = e.Result;
  9.         }

Reply

Marsh Posté le 03-06-2009 à 10:45:29    

Ca m'aide pas ça...
Y'a plusieurs trucs bizarres :
- "Car IEnumerable, la requête n'est pas encore faite"  => [:alfone] ?
La requête est faite au moment du Select(), le ToList ne fait que convertir le résultat en List, ça n'a rien à voir avec le fait que la requête soit faite ou pas.
- Quand tu dis que Silverlight ne retrouve pas ses petits, que veux tu dire exactement ? A quel endroit ? Quel est l'effet produit ?

 

edit: oublie ce que j'ai écrit sur le Select(), effectivement la requête n'est pas forcément faite à ce moment là avec LinqToSql (l'habitude de bosser avec LinqToDataset)


Message édité par Harkonnen le 03-06-2009 à 10:51:26

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-06-2009 à 10:52:05    

Non la requête n'est pas faite au moment du select, elle est réalisée quand tu lis les résultat. Mais là n'est pas le sujet.

 

Silverlight ne vois aucun résultat dans e.Result, alors que quand mon service renvoie une List<string> au lieu d'une List<LANGUE>, ça marche très bien. Tu es en quel mode de Serialisation ?

Message cité 1 fois
Message édité par Harkonnen le 03-06-2009 à 10:54:48
Reply

Marsh Posté le 03-06-2009 à 10:57:20    

Cololi2 a écrit :

Non la requête n'est pas faite au moment du select, elle est réalisée quand tu lis les résultat. Mais là n'est pas le sujet.


Oui oui, j'ai édité, y'a certains trucs venus d'ailleurs avec LinqToSql :D

Cololi2 a écrit :


Silverlight ne vois aucun résultat dans e.Result, alors que quand mon service renvoie une List<string> au lieu d'une List<LANGUE>, ça marche très bien.


tu es en quel mode de sérialisation ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-06-2009 à 10:57:20   

Reply

Marsh Posté le 03-06-2009 à 11:03:55    

Unidirectionnal.
Mais je t'avoue que je ne sais pas à quoi ça correspond ^^
J'ai juste vu sur le net qu'il fallait mettre à Unidirectionnal ^^

Reply

Marsh Posté le 04-06-2009 à 13:54:27    

Solution trouvée (enfin) :
 
Problème très vicieux : La référence au service est STATIQUE.
Qu'est ce que je veux dire par là ?
 
Si tu changes par exemple le type de retour de ta fonction (ce qui était mon cas) ... la référence reste avec l'ancien type de valeur de retour.
Résultat ... tu n'as plus de valeur de retour.
 
Il faut alors supprimer la référence au service, et la regénérer.

Reply

Marsh Posté le 05-06-2009 à 08:16:28    

Ok, merci, effectivement j'avais pas vu mais il y a dans le menu contextuel une fonction Mettre à jour.
Tout ça est totalement nouveau pour moi, je fais ça sans bouquin, sans tuto ^^.
Je savais même pas ce qu'étais WCF ^^.
 
Tu as du recul sur ces techno ? En particuliers en terme de perf à la fois côté client (donc les perf de Silverlight), et côté serveur (donc l'accés à la base via WCF + LinqToSQL) ?
Bref que penses tu de ces technos ?
 
Questions sups :  
1 / Sais tu si on peut faire de la pagination avec les DataGrid ?
2 / Je n'arrive pas à trouver le composant, qui permet d'afficher une liste d'objets (par exemple une liste d'image avec un texte dessous) et la possibilité de sélectionner.
3 / As tu entendu parler de Silverlight 3 ?

Reply

Marsh Posté le 08-06-2009 à 06:52:40    

Je travaille aussi avec ces mêmes technologies (mais Linq to SQL ;)) en stage chez..MS !
 
J'apprends donc petit à petit à utiliser Silverlight qui est nouveau pour moi.  
 
Je voulais juste apporter mes observations pour les 3 questions ci-dessus:
 
1. Tu retournes une "fenêtre" de ta liste en utilisant la méthode Skip() sur ta liste pour la borne inférieure, et pour la borne supérieure je ne suis pas sûr.
 
3. Le run-time public pour SL3 sort le 10 juillet. Ça promet, la technologie grandit vite. Au menu on ne retrouve pas du vrai 3D contrairement à ce qui a été dit, mais la possibilité pour le plug-in d'utiliser l'accélération matérielle. Avec ça tu peux avoir de bien meilleures performances dans tes simulations 3D.
 
Il y a aussi un système de navigation élaboré, tu peux désormais avoir des pages et conserver l'utilisation des boutons précédent/suivant du navigateur à travers l'application Silverlight. Je crois aussi que chaque contrôle pourra avoir en quelque sorte une version "texte" utilisée pour le référencement.
 
Beaucoup d'autres changements au menu, en ce qui me concerne le plus intéressant est la gestion des styles. En SL2 on peut seulement assigner une fois un style à un contrôle (si on veut le changer après un mouseover event par exemple, ça crash!) et c'est assez frustrant quand on veut réaliser des effets qui seraient si faciles à réaliser en css.
 

Reply

Marsh Posté le 09-06-2009 à 08:22:31    

Ok, merci de vos commentaires.
 
Il serait bon de faire un topic SilverLight 2 ^^

Reply

Marsh Posté le 11-06-2009 à 11:41:16    

Le composant ListBox me parait bien ...
Mais pour me personnaliser ... bien chaud :/
Suis sous Visual 2008, pas Blend ...

Reply

Marsh Posté le 11-06-2009 à 12:13:59    

C'est simple : je veux une ListBox comme celle ci :
 
http://silverlight.net/samples/sl2 [...] fault.html
 
Va sur Theme Browser : il y a une liste en haut pour sélectionner les thème : beh c'est celle là qui m'interesse

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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