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

ASP.NET Discussion :

Appel Asynchrone et WCF


Sujet :

ASP.NET

  1. #1
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut Appel Asynchrone et WCF
    Bonjour,

    J'ai un site Web qui va consommer un service WCF en mode asynchrone.

    Au moment de rajouter un service référence, 'jai coché la case Asychrone pour générer la classe proxy.

    ensuite, sur la page

    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
     
     protected void Button1_Click(object sender, EventArgs e)
            {
                PageAsyncTask pat = new PageAsyncTask(BeginFileRetrieveAsync, EndFileRetrieveAsync, null, null);
                Page.RegisterAsyncTask(pat);
            }
     
            IAsyncResult BeginFileRetrieveAsync(object sender, EventArgs e, AsyncCallback acb, object extraData)
            {
     
                ServiceProxy<PoleWebService.TestFileAsync.IFileTransfert> service = new ServiceProxy<PoleWebService.TestFileAsync.IFileTransfert>("WSHttpBinding_IFileTransfert1");
               Request request = new Request();
                IAsyncResult result = service.Proxy.BeginDownload(request, acb, extraData);
                return result;
     
            }
     
            private void EndFileRetrieveAsync(IAsyncResult ar)
            {
                 Service pw = new Service();
                Request request = new Request();
                FileResponse result = pw.Download(request);
                Label1.Text = "non fini";  
            }
    Mon probleme est le suivant : j'aimerais que, au moment d'appuyer sur le bouton click, il lance la méthode du web service sans pour autant bloquer l'utilisateur. à savoir qu'il ne doit pas voir le chargement de la page.
    ensuite, pouvoir checker si la méthode a fini d'être exécuter.
    comment feriez vous? dosi je faire une modification coté service WCF ou je peux tout faire côté client?

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Met le bouton click et l'appel au web service dans un control updatepanel. Et pas besoin d'appel asynchrone à ce moment là.

    Tu as un tuto ici: http://dotnet.developpez.com/ajax/aj...panel-trigger/

  3. #3
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    merci

  4. #4
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je remets ce post à jour.
    Je pense être obligé de faire un appel asynchrone.
    Les traitements des fichiers peuvent être très longs. Il faudrait en fait que l'utilisateur lance l'appel de la méthode du web service WCF, qu'il puisse faire ce qu'il veut ensuite (changer de page, prendre son cafe), alors que le traitement continue.

    Est ce possible? si oui comment? Dois je aussi faire un changement coté service WCF pour que ce soit possible?

    Merci

  5. #5
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Avec de l'aspx, non (surtout si il change de page). Finalement dans ce scénario, le client du webservice (le serveur web) qui pourrait éventuellement être rappellé par le serveur du webservice ne peut pas rappeller le client (qui est le navigateur de l'utilisateur).
    Tu peux si tu fais un client riche (comme du silverlight par exemple).

  6. #6
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je ne comprends pas trop l'intérêt des appels WCF asynchrone à ce moment la
    Je pensais que justement, ca permettait de lancer un appel au WS et apres faire ce que l'on voulait.
    Typiquement, je voudrais lancer un traitement en base au click d'un utilisateur et que qd il revient le lendemain ce soit fini

  7. #7
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Une fois que tu a fais ton appel asynchrone qui va récupérer la réponse du serveur une fois l'appel terminé ? Ta page ? Si l'utilisateur change de page tu fais comment ? ....

  8. #8
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    En gros, ce qui se passe c'est :
    - la page fait appel à un WS
    - le ws va faire un traitement en base et créer un fichier sur un file system

    L'utilisateur va juste cliquer pour lancer le traitement.
    Si l'utilisateur reste sur la page, avec le update panel, je pourrais savoir si le traitement est encore en cours ou pas.

    Si l'utilisateur revient sur cette page plus tard, il suffira que je vérifie l'existance du fichier sur le serveur pour savoir si le traitement est terminé ou pas

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

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Voilà comment je ferais ça:

    Coté WS:
    Tu crées ta WebMethod qui va lancer ta tâche dans un thread à part et qui va te retourner un taskID
    Tu crées une autre WebMethod qui prend en paramètre un Int qui correspond à un taskID et qui retourne l'état de la tâche

    Coté site:
    Tu appelles cette méthode en synchrone et tu vas stocker ce taskID en session.
    La prochaine fois que tu retournes sur cette page, tu appelles la 2ème WebMethod en lui passant en paramètre le taskID que t'as en session

  10. #10
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je vais tenter cela je m'attendais à ce que cela soit plus simple de le faire coté client mais bon je vais tenter coté ws alors.

    Merci !

  11. #11
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Les services asynchrones WCF ne sont pas trop conçus pour fonctionner avec de l'asp finalement. Il ne faut pas oublier que finalement, ton objet page aspx ne vit que quelques millisecondes! Ce que l'utilisateur voit n'est qu'une représentation graphique de cet objet. Comme l'objet page n'existera certainement plus au retour de la fonction asynchrone, effectivement y'a pas d'interet ici

  12. #12
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Bonjour,

    Je dois très mal regardé mais je ne trouve pas une maniere de rechercher un thread par son id. Quelqu'un a une idée?
    Je pensais que l'id du thread était contenu dans ManagedThreadId mais visiblement ce n'est pas le même que l'id utilisé !
    j'ai essayé de mettre un nom au thread mais qd je parcours les thread en cours dans un process je ne vois pas le nom du thread que j'ai donné (mais bien l'identifiant qui n'est pas ManagedThreadId)

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

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Pourquoi tu veux le ThreadId?

  14. #14
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je cherche une maniere de savoir si le traitement lancé est terminé ou pas.

    Pour replacer le contexte :
    - une page asp qui fait appel à un WS WCF qui va lancé un traitement en base.
    - cote WS, je lance le traitement via un thread (ou une autre maniere si vous connaissez...)
    - faudrait que l'utilisateur puisse savoir à n'importe quel moment si le traitement est terminé ou pas, qu'il reste sur la page ou pas.

  15. #15
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Si tu configures ton WS WCF de telle manière à ce que ca soit un par client, alors je pense que tu peux t'en sortir.

  16. #16
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je comprends pas trop ce que tu veux dire PitMaverick78

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

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par trihanhcie Voir le message
    Je cherche une maniere de savoir si le traitement lancé est terminé ou pas.

    Pour replacer le contexte :
    - une page asp qui fait appel à un WS WCF qui va lancé un traitement en base.
    - cote WS, je lance le traitement via un thread (ou une autre maniere si vous connaissez...)
    - faudrait que l'utilisateur puisse savoir à n'importe quel moment si le traitement est terminé ou pas, qu'il reste sur la page ou pas.
    Bah tu stockes en base l'état du traitement, et le tour est joué

  18. #18
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Un collègue a fait une page web pour "monitorer" le planificateur de tâche de windows. Ca peut te donner des idées.

    A+

  19. #19
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Lorsque tu heberges un service, tu peux configurer le comportement de l'instance du service: est-ce une instance partagée pour tout le monde, une par personne ou une par appel.
    Je te conseille de mettre une par personne et apres dans ta classe qui est service tu peux avoir un membre de type thread qui fait le traitement.

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. Appel asynchrone de service WCF
    Par trihanhcie dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/04/2010, 20h03
  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