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 :

SL3 - Problème d'appel asynchrone


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut SL3 - Problème d'appel asynchrone
    Hello tout le monde
    J'ai un service WCF qui expose 3 méthodes dont 2 retournent qqchose.
    J'ai une appli SL3 dans laquelle un Timer appelle ces 3 méthodes en asynchrone toutes les 3 secondes.

    Un peu 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public void StartTimer()
            {
                var myDispatcherTimer = new System.Windows.Threading.DispatcherTimer();
                myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 3); // 3 sec
                myDispatcherTimer.Tick += new EventHandler(Each_Tick);
                myDispatcherTimer.Start();
            }
     
            public void Each_Tick(object o, EventArgs sender)
            {
                try
                {
                    var client = new ServiceBlotter.ServiceBlotterSLClient();
     
                    client.PublishHeartbeatCompleted += null;
                    client.PublishHeartbeatAsync(app.LoginTrader);
     
                    client.GetIdRfqsAliveCompleted += new EventHandler<BlotterLightCNCE.Silverlight.ServiceBlotter.GetIdRfqsAliveCompletedEventArgs>(client_GetIdRfqsAliveCompleted);
                    client.GetIdRfqsAliveAsync(app.LoginTrader);
     
                    client.GetLastIdRfqDealDoneCompleted += new EventHandler<BlotterLightCNCE.Silverlight.ServiceBlotter.GetLastIdRfqDealDoneCompletedEventArgs>(client_GetLastIdRfqDealDoneCompleted);
                    client.GetLastIdRfqDealDoneAsync();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    J'essaie de simuler un TimeOut lors de l'appel à mon WCF.
    Pour cela, j'ai réglé le TimeOut à 2 secondes dans ma config WCF côté SL et dans ma fonction GetIdRfqsAlive côté service, j'ai mis un Thread.Sleep(5000).

    Mon problème est que l'appel à la fonction GetLastIdRfqDealDone tombe également en TimeOut.

    Une idée?
    Thx

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben oui tu fais un Thread.Sleep dans ton service, et comme tes 3 méthodes doivent probablement utiliser la même instance de ton service tu bloques toutes celles après donc dans ton cas GetLastIdRfqDealDone.

    Alors soit il faut configurer ton WCF pour utiliser une instance par call de méthode ou alors peut-être qu'en new ServiceBlotter.ServiceBlotterSLClient() pour chaque call ça peut passer.

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    Ben oui tu fais un Thread.Sleep dans ton service, et comme tes 3 méthodes doivent probablement utiliser la même instance de ton service tu bloques toutes celles après donc dans ton cas GetLastIdRfqDealDone.
    C'est vraiment comme ça que ça marche ???
    Je suis trop habitué à l'ASP.NET où IIS gère chaque requête dans un thread différent apparemment

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    C'est vraiment comme ça que ça marche ???
    Je suis trop habitué à l'ASP.NET où IIS gère chaque requête dans un thread différent apparemment
    Ben oui quand tu fais ton new de ton proxy ça ouvre un tunnel jusqu'à ton serveur et là toutes tes requêtes utiliseront la même instance derrière donc si tu bloques le retour d'une d'entre elles, tu bloques le tunnel.

    Me rappelle plus du mode par défaut mais essaye en instanciant un nouveau proxy avant chaque call. Si ça marche pas rajoute InstanceContextMode = InstanceContextMode.PerCall dans l'attribut ServiceBehavior de ton service.

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Ok, j'essaierai ça demain

    Merci à toi

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    ou alors peut-être qu'en new ServiceBlotter.ServiceBlotterSLClient() pour chaque call ça peut passer.
    J'ai créé 3 clients, un pour chaque méthode appelée.
    Ca change pas le problème.

    Reste la solution de la config WCF, je vais chercher de ce côté

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    J'ai créé 3 clients, un pour chaque méthode appelée.
    Ca change pas le problème.

    Reste la solution de la config WCF, je vais chercher de ce côté
    Bon ben dans l'attribut ServiceBehavior de ton Service, rajoute
    InstanceContextMode = InstanceContextMode.PerCall
    comme paramètre.

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Pas mieux

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Apres ton timeout, ton channel est pas en faulted?

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Regarde du coté de ConcurrencyMode http://msdn.microsoft.com/en-us/libr...rencymode.aspx
    Essaie de te mettre en ConcurrencyMode.Multiple pour voir

Discussions similaires

  1. [wcf][débutant] Problème d'appel asynchrone et synchone.
    Par volontier dans le forum Windows Communication Foundation
    Réponses: 13
    Dernier message: 11/08/2010, 10h41
  2. Problème appels asynchrones à un WCF avec SilverLight 3
    Par Throna dans le forum Silverlight
    Réponses: 9
    Dernier message: 03/06/2010, 17h03
  3. Autre contexte mais tjs problème d'appel fct interne
    Par Neilos dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/08/2004, 13h51
  4. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

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