IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Service WCF et Silverlight


Sujet :

Silverlight

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut Service WCF et Silverlight
    Bonjour,
    Mon problème est le suivant :
    j'ai un service WCF qui permet de lister des contrats à partir des Id d'un partenaire, je m'explique chaque partenaire est identifié par un Id et il a plusieurs contrats ,
    ces IdPartenaires sont stockés dans une liste qui passe en paramètre du service , voici l'exemple des contrats listés par IdPartenaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      void rechercherContrat()
            {
     sr.LoadContratResumeListByPartenaireListCompleted += new EventHandler<LoadContratResumeListByPartenaireListCompletedEventArgs>(sr_LoadContratResumeListByPartenaireListCompleted);
                sr.LoadContratResumeListByPartenaireListAsync(lstIdPartenaire);
            }
    Ces id de partenaires sont listés dans une listBox et leurs contrats correspondants sont stockés dans un Datagrid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      void sr_LoadContratResumeListByPartenaireListCompleted(object sender, LoadContratResumeListByPartenaireListCompletedEventArgs e)
            {
                lstContrat = e.Result;
                gridContrat.ItemsSource = lstContrat;
              }
    ce que je veux faire , c'est que dans la liste qui contient les partenaires , je veux selectionner un partenaire et avoir dans le datagrid juste les contrats correspondant au partenaire selectionné dans la listBox
    Comment je peux résoudre ce problème ?
    SVP aidez moi
    j'ai essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (PartenaireResume p in lstParContrats.SelectedItems)
                {
                              sr.LoadContratResumeListByContactAsync(lstParContrats.SelectedItems.IndexOf(p.Id));
     
                }
    Mais je pense pas qu'il est fonctionnel
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Déjà ta fonction WCF une fois exécutée te permet de savoir à quel partenaire appartient tel ou tel contrat vu e que tu fais tu fous tes contrats dans une liste de façon indépendant du partenaire.

    Si j'étais la signature de ta fonction ne changerai pas mais par contre je renverrai une liste d'objet Partenaire et pour chaque instance de cet objet j'aurai une propriété type collection qui contiendra la liste de ses contrats.

    Une fois cela fait, dans ton code tu te crées un objet de type ICollectionView qui aura pour source le résultat de du retour de ta fonction WCF. Tu bindes cet objet à ton ListBox et tu mettras la propriété IsSynchronizedWithCurrentItem à true. Puis tu bindes la propriété ItemsSource de ta DataGrid que tu biendes à SelectedItem.Contrats de ta ListBox.

    Désolé j'ai pas d'exemple de code à te donner mais je pense avoir bien expliqué.

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    Bonjour,
    Tou d'abord je vous remercie pour votre réponse , mais je n'ai compris comment je dois procéder , déjà vous m'avez dit de binder les resultas de mon service WCF à la listBox alors que les résultats sont chargés dans le dataGrid et la listeBox contient leurs partenaires , autre chose la propriété IsSynchronizedWithCurrentItem sert à quoi?
    et si vous avez un exemple SVP donnez le moi
    P.S : les partenaires sont dans la listBox et les contrats dans le Datagrid , et tous les deux sont bindés à des champs des résultats obtenus
    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'aurais bien aimé te fournir un exemple mais pas pour le moment peut-être le soir

    Tes éléments sont bindés à des résultats récupérés à partir de l'appel de plusieurs appels WCF. Ce qui entraîne que tes partenaires et tes contrats n'ont aucune relations en mémoire.

    Ma méthode (que je t'ai proposée dans mon post précédent) te permet de faire un seul et unique appel WCF qui te chargerait les partenaires et pour chacun d'eux te charger aussi la liste de ces contrats. Ce post est bien explicite pour continuer ensuite.

    La propriété IsSynchronizedWithCurrentItem te permet en fait de synchroniser l'élément séléctionné dans ta ListBox avec la propriété CurrentItem de ton objet ICollectionView. Ainsi tout autre élément qui se binde sur cette propriété sera mis à jour automatiquement si la séléction de ta ListBox change. Dans ton cas à toi, la liste des contrats associés au partenaire sélectionné dans ta ListBox sera automatiquement mis à jour dans ta DataGrid.

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    Au fait les service WCF sont déjà développé et je ne dois pas les toucher , dans ma partie d'application je consomme juste les services déjà developpés.
    Autre chose dans une autre interface j'ai besoin juste des partenaires , donc j'ai intéret à avoir 2 services chacun à charger des données
    est ce qu'il n'y a pas une méthode pour parcourir la listBox des partenaires et avoir l'idPartenaire qui est selectionné et remplir le dataGrid par ses contrats correspondants sans utiliser les services WCF, vu que j'ai les 2 collections , une contenant les partenaires et l'autre les contrats , juste en comparant les idPartenaires et ceux qui ont les mêmes seront listés.
    est ce que vous m'avez compris ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je vois.

    Donc tu restes sur ta méthode en bindant ta ListBox sur tes partenaires. Tu t'abonnes à l'évènement SelectionChanged de ta ListBox et dans le code-behind tu récupères la liste des contrats associés au partenaire sélectionné grâce à un appel WCF (j'espère que ça existe). Le résultat obtenu tu l'assignes à la propriété ItemsSource de ta DataGrid

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    si le service existe j'allais pas poser la question , c'est dans cela que je suis bloquée , le service charge les contrats de tous les partenaires.
    Or moi je veux avoir juste les contrats du partenaire selectionné dans ma listeBox
    j'ai fait un évenement ListBox_SelectionChanged mais je ne sais pas quoi mettre dedans
    Merci de m'aider

  8. #8
    Invité
    Invité(e)
    Par défaut
    Dans la liste des contrats qui te sont envoyés n'y a-t-il pas une propriété qui te permet de déterminer à quel partenaire appartient tel contrat ?

    Si oui alors tu te base sur cette propriété qui doit forcément être l'Id du partenaire pour avoir uniquement ses contrats en faisant une jointure (en utilisant Linq bien sûr)

    Si non alors là procures toi une boule de cristal

  9. #9
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    le service que j'ai permet de lister les contrats de tous les partenaires
    sr.LoadContratResumeListByPartenaireListAsync(lstIdPartenaire); sachant que lstIdPartenaire est la liste des Id partenaires à qui on va lister les contrats

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par israe2010 Voir le message
    sr.LoadContratResumeListByPartenaireListAsync(lstIdPartenaire);sachant que lstIdPartenaire est la liste des Id partenaires à qui on va lister les contrats
    Tu t'es trompé dans tes propos.
    Normalement cette fonction te permet de lister la liste des contrats d'une liste d'ID de partenaires qui tu lui passes. Hors rien ne t'empêche de lui passer une liste avec uniquement un seul ID partenaire qui sera forcément celui sélectionné dans ta ListBox.

    Dans ton ListBox_SelectionChanged tu mets ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Partenaire partenaire = (sender as ListBox).SelectedItem as Partenaire;
    sr.LoadContratResumeListByPartenaireListAsync(new List<string>  { partenaire.Id });
    Vu que c'est un appel asynchrone tu récupères le résultat quelque part dans une fonction callback.

  11. #11
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    ça donne une erreur sur la deuxième ligne
    la méthode ou l'opération n'est pas implémentée , et quand je passe en mode debbug , il fait passer l'id selectionné en paramètre , et puis ca bloque

  12. #12
    Invité
    Invité(e)
    Par défaut
    Si tu ne mets le message de l'exception générée je ne pense qu'on avance

  13. #13
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    C'est tout ce qu'il me génère comme exception
    La méthode ou l'opération n'est pas implémentée
    je vous remercie pour votre aide

  14. #14
    Invité
    Invité(e)
    Par défaut
    Aparemment le message d'erreur renvoyée ne t'arrange pas du tout et c'est louche. ça sous-entend que la méthode qui te permet de récupérer la liste des contrats n'est pas implémentée ce que je trouve très bizarre comme erreur remontée de la part de WCF.

    Sinon mets-nous le code qui le contenu de ton gestionnaire pour voir

  15. #15
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    c'est comme ca que je parviens à remplir mon dataGrid avec les résultas obtenus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     void rechercherContrat()
            {
                sr.LoadContratResumeListByPartenaireListCompleted += new EventHandler<LoadContratResumeListByPartenaireListCompletedEventArgs>(sr_LoadContratResumeListByPartenaireListCompleted);
                sr.LoadContratResumeListByPartenaireListAsync(lstIdPartenaire);
            }
     
            void sr_LoadContratResumeListByPartenaireListCompleted(object sender, LoadContratResumeListByPartenaireListCompletedEventArgs e)
            {
                lstContrat = e.Result;
     
                gridContrat.ItemsSource = lstContrat;
                nbrContrats.Content = lstContrat.Count.ToString() + " Contrats ";
     
            }

  16. #16
    Invité
    Invité(e)
    Par défaut
    lstIdPartenaire est de type ListBox ?

    De quel type est le paramètre lstIdPartenaire ?

  17. #17
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    c'est une Collection<int>
    et pour l'appel du service je lui ai passé directement le partenaire.id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     PartenaireResume partenaire = (sender as ListBox).SelectedItem as PartenaireResume;
    sr.LoadContratResumeListByPartenaireListAsync(partenaire.Id);

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par israe2010 Voir le message
    c'est une Collection<int>
    Pas compris.

    Sinon essaie avec un tableau simple de type int comme suit :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     PartenaireResume partenaire = (sender as ListBox).SelectedItem as PartenaireResume;
    int[] ids = new int[] { partenaire.Id };
    sr.LoadContratResumeListByPartenaireListAsync( ids );

  19. #19
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    toujours la même erreur

  20. #20
    Invité
    Invité(e)
    Par défaut

    Je suis plus que perdu moi.
    T'as l'erreur de l'appel de la méthode ...Async ?
    Peux-tu regarder le contenu le contenu du message de l'exception contenue dans la méthode InnerException ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Partage de services WCF application Silverlight
    Par Bakura dans le forum Silverlight
    Réponses: 0
    Dernier message: 10/03/2012, 21h40
  2. Réponses: 6
    Dernier message: 04/08/2010, 15h21
  3. Service WCF et silverlight
    Par gatinamed dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 30/06/2010, 17h58
  4. Réponses: 1
    Dernier message: 01/02/2010, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo