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 :

probleme asynchrone lors d'appel serveur


Sujet :

Silverlight

  1. #1
    Membre régulier
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Points : 114
    Points
    114
    Par défaut probleme asynchrone lors d'appel serveur
    Bonjour,
    je ne comprends pas pourquoi j'ai un truc qui cloche dans cette partie de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     private void DeleteBttn_Click(object sender, RoutedEventArgs eo)
            {
                ressources.ServiceAgent.DeleteProduct(_currentProduct, (s, e) =>
                {
                    if (e.Result == true)
                    {
                        _messageService = new MsgBoxService();
                        _messageService.ShowNotification("Product has been deleted"); 
                        _ressources.Products.Remove(_currentProduct);//remove _currentProduct from the list
                        _currentProduct = null;
                        _ressources.RaiseMyEvent();
                    }
                    else
                    {
                        // do something else
                    }
                });
               }
    Je vous explique un peu ce qui est cense se passer:
    Dans ma vue j'ai un boutton delete, lorsque je clique dessus, j'active cette portion de code.
    Je creer une liaison avec un service WCF pour suprimer un objet de la base de donnee.
    Jusque la tout va bien....

    Lorsque je suprime un objet, je recois bien une petite boite de dialogue me disant que l'objet a ete suprime.
    Mais si je suprime un autre objet, j'ai 2 boite de dialogue qui s'ouvrent, et si j'en suprime un troisieme, j'en ai 3 qui s'ouvre, et ainsi de suite...

    Quelqu'un pourrai m'aider??

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    On dirait un event registré plusieurs fois.
    Tu registres DeleteBttn_Click dans le code?
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    D'où vient la classe MsgBoxService et que contient-elle ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Membre régulier
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Points : 114
    Points
    114
    Par défaut
    Voila pour messageBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MsgBoxService : IMsgBoxService
        {
            public void ShowNotification(string message)
            {
                MessageBox.Show(message, "Notification", MessageBoxButton.OK);
            }
            public bool AskForConfirmation(string message)
            {
                MessageBoxResult result = MessageBox.Show(message, "Are you sure?", MessageBoxButton.OKCancel);
                return result.HasFlag(MessageBoxResult.OK);
            }
        }
    Et puis non, je ne registre pas dans le code.

  5. #5
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Si tu mets un breakpoint sur la ligne _messageService.ShowNotification("Product has been deleted");
    Tu peux voir, dans le stacktrace, d'ou viennent les appels supplémentaires ?

    Est-ce que le service est aussi appelé plusieurs fois?
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  6. #6
    Membre régulier
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Points : 114
    Points
    114
    Par défaut
    oui.
    Le service est apelle autant de fois que je l'ai mentione plus haut.
    Ca n'est pas un probleme au niveau de la boite de dialogue. Il semblerai que ce soit un probleme au niveau de la reponse serveur, celle ci m'est rendu plusieurs fois. Pourtant rien de tres special cote serveur. Je ne comprend vraiment pas.
    C me fait la meme chose avec Update ou bien Add.

  7. #7
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu utilises le même serveur proxy ?

    C'est probablement le problème. Il garde la référence de ton callback. A chaque fois que tu refait un appel, il rajoute de nouveau le callback.

    Essaye en recréant le proxy avant chaque appel.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  8. #8
    Membre régulier
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Points : 114
    Points
    114
    Par défaut
    Merci pour ta reponse, il semblerai vraiment que ca soit la solution au probleme.

    Mais voila, pourrais tu pour regler ce probleme me donner un petit conseil de conception.
    Je m'explique:
    J'ai un projet qui s'appel ClientSilverlight, dans lequel j'utilise le proxy et dans lequel sont implementes les fonctions de mon service.
    Ensuite, dans mon application Silverlight (PL), jái crée une classe appelée Cache , cette classe creer un singleton contenant toutes les donnees de mon application, c'est par cette meme classe que je fais appel au proxy.
    Je ne vois donc vraiment pas comment recreer le proxy a chaque fois.
    Car si je dois a chaque fois detruire et recreer Cache, je perds tout les avantages du Singleton.
    As tu une idée.

    Merci bcp

  9. #9
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu peux peut-être garder ton cache pour tous les autres objets mis à part le proxy ?

    Ou alors quelque part, dans le code, il doit y avoir un appel style :

    wcfproxyclient.DeleteCompleted += ....

    Ou il registre ton callback sur l’évènement DeleteCompleted.

    Tu dois alors quelquepart (dans ta méthode callback, par exemple) faire un :
    wcfproxyclient.DeleteCompleted -= ....

    pour "déregistrer" ta méthode.

    Mais attention ! Tu utilises une méthode anonyme (le (e,s) => ....). Tu dois la changer en méthode "normale" (private MonCallback(.... )) sinon la "déregistration" va poser problème. (En gros, 2 méthodes anonymes avec syntaxe identiques ne sont pas considérés comme identiques pour le compilateur)
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 38
    Points
    38
    Par défaut
    Peut t’ont voir le code de DeleteProduct stp.
    A mon avis c'est la que tu enregistre a chaque ton evenement Completed
    Cordialement

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2007, 20h54
  2. [interbase5] problem au connexion via le serveur
    Par inconu dans le forum InterBase
    Réponses: 1
    Dernier message: 31/07/2005, 01h24
  3. Evènement lors l'appel à distance
    Par Endy dans le forum CORBA
    Réponses: 2
    Dernier message: 18/02/2005, 20h34
  4. [apache] probleme d'accès à mon propre serveur
    Par sunfunfree dans le forum Apache
    Réponses: 6
    Dernier message: 15/02/2005, 17h16

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