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

Windows Communication Foundation .NET Discussion :

[wcf][débutant] Problème d'appel asynchrone et synchone.


Sujet :

Windows Communication Foundation .NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 39
    Points
    39
    Par défaut [wcf][débutant] Problème d'appel asynchrone et synchone.
    Bonjour à tous.

    Je sollicite votre aide car j'ai un petit soucis avec les appels synchrones et asynchrones.

    Dans le cadre d'un projet dans notre société, nous avons un service WCF. Nous avons un client de test qui appel une procédure du service wcf en asynchrone. L'exécution de cette procédure étant assez longue, nous avons créé une seconde procédure qui renvoi une chaine de caractère.

    Lorsque nous appelons la procédure asynchrone puis la procédure synchrone cela fonctionne bien: la procédure asynchrone est exécuté en arrière plan, j'appelle ensuite la procédure synchrone qui s'exécute et nous renvoi la réponse instantanément. Lorsque la procédure asynchrone a fini de s'exécuter, du coté client la procédure de callback (associé à la procédure asynchrone) s'exécute et affiche bien les résultats.

    Jusque là, cela s'exécute comme nous l'attendions.

    Le problème est le suivant: lorsque l'on relance ce déroulement, la deuxième fois, on se retrouve bloqué sur la procédure synchrone jusqu'a ce que la procédure asynchrone ai fini de s'exécuter. Auriez vous une idée du changement de comportement?

    voici les différents appels que nous avons vers notre serveur wcf:

    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 TourplannerServiceClient ts = new TourplannerServiceClient("basicContextOverHttp");
     
     
    private void btnBuiltTourii_Click(object sender, EventArgs e)
            {
                BuildtourInput bti;
                bti = new BuildtourInput();
                ... //mise à jour des valeurs des paramètres de notre variable bti.
                this.ts.BeginBuildTour(bti, new AsyncCallback(this.BuildTourAsync), bti);//Appel asynchrone
                this.txtBoxResponses.AppendText(this.ts.GetBuildProgress() + Environment.NewLine);//appel synchrone
                }
    private void BuildTourAsync(IAsyncResult iar)
            {
                BuildtourResult br;
                StringBuilder sb;
                br = this.ts.EndBuildTour(iar);
                sb = new System.Text.StringBuilder();
                sb.Append(....);// création du résultat et affichage de celui-ci.
                }
    D'avance je vous remercie pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    Comment avez vous configurer l'instanciation et la concurrence d'accès à votre service ? Je veux dire par là, vos appels sont asynchrones, mais si votre service est unique et ne gère qu'une requête à la fois, cela peut expliquer le problème...

    Je vous renvoie vers le lien intéressant http://msdn.microsoft.com/en-us/library/ms731193.aspx

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Merci pour ta réponce.

    Voici les infos:
    Pour ServiceBehavior:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
        internal class TourplannerService : ITourplannerService{
       ....
    }
     
    pour la session
    [ServiceContract( SessionMode = SessionMode.NotAllowed)]
        public interface ITourplannerService{
        ....
    }
    Pour le paramètre ConcurrencyMode, rien n'est paramétrer.

    Ce que je ne comprends pas c'est avec ces même valeurs, dans un autre projet (bidon mais qui me sert de test), je n'ai pas ce problème. Y a peut-être quelque chose qui m'échappe. Si oui, peux-tu peut-être éclairer ma lenterne?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Suite à ta réponse cybermaxs, j'ai vérifier avec un autre projet.

    Dans cet autre projet, avec les même valeurs que celle de ce projets ci (pour contextMode=percall, sessionmode=notallowed et concurencymode n'est pas spécifier). Dans cet autre projet, je n'ai pas de souci. Mais ici le problème ne change pas, même si je mets concurencymode à multiple.

    Quelqu'un aurait-il une idée du blocage (qui, dans ce cas, semble spécifique à un projet)?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    Il faudrait dans ce cas identifier la source du blocage. J'ai supposé que c'était le server, mais ça peut bien venir du client aussi. As tu visualiser les traces WCF ?

    J'ai peut être une idée, mais elle reste à vérifier. Il ne faut pas confondre appel asynchrone avec multiples requêtes en même temps. Il est possible que WCF bloque restreint le proxy client a faire une requête à la fois. Dans ton cas, si le temps de traitement coté serveur est long, alors ça devient gênant. Il faudrait tester avec une requête par proxy. Si j'ai un peu de temps, je le ferai.

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 220
    Points
    220
    Par défaut
    Le problème est le suivant: lorsque l'on relance ce déroulement, la deuxième fois, on se retrouve bloqué sur la procédure synchrone jusqu'a ce que la procédure asynchrone ai fini de s'exécuter. Auriez vous une idée du changement de comportement?
    Comment tu fais pour relancer le déroulement la deuxième fois ? Est-ce que tu le relances automatiquement dans la fonction de callback ?

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 220
    Points
    220

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par matdur Voir le message
    J'ai pas vu de référence au Duplex dans le post. volontier l'utilises tu ?

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 220
    Points
    220
    Par défaut
    J'ai pas vu de référence au Duplex dans le post
    Ben si .... le titre de l'article est "WCF Duplex Reentrant Services", est tout le long il parle des callbacks

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 220
    Points
    220
    Par défaut
    Coté client il faut définir le ConcurrencyMode et UseSynchronizationContext

    Regardes le billet intitulé How to : Une petite application client / serveur avec WCF sur le blog de Flavien Charlon

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par matdur Voir le message
    Ben si .... le titre de l'article est "WCF Duplex Reentrant Services", est tout le long il parle des callbacks
    Ben non, callbacks ça ne veut pas forcément dire Duplex. Dans son cas, c'est le callback de la méthode asynchrone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.ts.BeginBuildTour(bti, new AsyncCallback(this.BuildTourAsync), bti);//Appel asynchrone

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 220
    Points
    220
    Par défaut
    Ben non, callbacks ça ne veut pas forcément dire Duplex. Dans son cas, c'est le callback de la méthode asynchrone
    Oups ... autant pour moi, j'ai répondu au peu vite, il faut dire que les problèmes de blocage WCF que j'ai rencontré étaient liées aux callbacks en duplex par le serveur.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    du nouveau volontier ?

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut @ matdur
    vous pouvez me dire comment vous avez résolu les problèmes des callback et le blocage entre le client et le serveur? j'ai utilisé la prop UseSynchronizationContext:=False), tout fonctionne très bien! par contre je n'ai plus le droit d'accéder aux composant utilisateurs de mon client? avez vous une idée?!

Discussions similaires

  1. Problème appels asynchrones à un WCF avec SilverLight 3
    Par Throna dans le forum Silverlight
    Réponses: 9
    Dernier message: 03/06/2010, 17h03
  2. SL3 - Problème d'appel asynchrone
    Par lutecefalco dans le forum Silverlight
    Réponses: 18
    Dernier message: 30/04/2010, 17h24
  3. Réponses: 6
    Dernier message: 24/03/2009, 16h17
  4. Réponses: 7
    Dernier message: 16/04/2008, 16h42
  5. Appel Asynchrone WCF & Client Web
    Par gufra dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 31/03/2008, 16h13

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