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 :

[ASP.NET, C#] Lancer un process asynchrone et attendre le résultat


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut [ASP.NET, C#] Lancer un process asynchrone et attendre le résultat (edit ajax)
    Bonjour,

    J'ai une question concernant un process asynchrone qui doit être lancer via une application ASP.NET.

    J'exécute le process et mon seul moyen de savoir s'il est terminé (succès ou échec) c'est de faire un SELECT d'un champ qui contient 3 valeurs possibles : "en cours", "succès" ou "erreur".

    Pendant que ma boucle tourne (avec un timeout que je définis par exemple à 30 secondes); j'aimerai avoir une espèce d'écran d'attente avec soit un message "process en cours" soit un gif animé qui montre un chargement.

    Voici le contexte:
    - Un popup (window.showModalDialog()) s'ouvre
    - Dans le Page_Load je lance le process via mon backgroundworker
    - La page ne s'affiche QUE lorsque le process est terminé : timeout, succès ou erreur

    Sur une application C# aucun soucis de faire ce genre de chose, mais sur une application web ASP.NET c'est totalement différent, la page reste blanche ou ne s'affiche que lorsque le process est terminé. D'un autre côté c'est compréhensible, le process est lancé, le client attend la réponse du serveur... Mais existe-t'il une solution qui puisse satisfaire ma demande ? Sans entrer dans les techno AJAX & co, je suis un peu pressé par le temps en fait.

  2. #2
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Citation Envoyé par dinbougre Voir le message
    Bonjour,
    Sans entrer dans les techno AJAX & co, je suis un peu pressé par le temps en fait.
    Je pense que tu ne vas pas avoir le choix et devoir utiliser l'AJAX.
    Tu verras l'Ajax en ASP.NET, c'est pas trop compliqué.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Ok

    Bon pour l'instant (j'ai annoncé que ce serait prêt pour demain) je m'oriente vers une solution "bricolage" en ayant un popup qui se rafraichit toutes les secondes et qui fait la vérif... J'ai trouvé ça sur le forum

    Ensuite faut je regarderai pour Ajax (j'en ai aussi besoin dans un autre projet)


    Merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    UP !

    Bon alors j'ai laissé tombé ma méthode de bourrin (refresh par META-refresh toutes les 1 seconde).
    Je suis en train de tenter avec AJAX.

    Quelqu'un peut m'éclairer à ce sujet ?
    Voilà ce que j'ai fais (après avoir lu quelques docs)

    Defaut.aspx
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    function getXhr()
    {
    	var xhr = null;
     
    	if(window.XMLHttpRequest) 
    	{
    		xhr = new XMLHttpRequest();
    	}
    	else if(window.ActiveXObject)
    	{ 
    		try 
    		{
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} 
    		catch (e) 
    		{
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else 
    	{ 
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
    	}
     
    	return xhr
    }
     
    function go()
    {
    	var xhr = getXhr();
     
    	xhr.onreadystatechange = function()
    	{			
    		if(xhr.readyState == 4 && xhr.status == 200)
    		{
    			alert("OK");
    		}
    	}
    	xhr.open("GET", "Script.aspx", true);
    	xhr.send(null);
    }
    Sctip.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        protected void Page_Load(object sender, EventArgs e)
        {
    		System.Threading.Thread.Sleep(1000);
        }
    Dans mon Defaut.aspx, j'ai un bouton ASP qui exécute ma fonction go().
    Si j'ai bien compris AJAx, je peux via mon click sur bouton, envoyer une requête au serveur, et le temps que celui ci réponde (mais comment ?), je passe ma page Defaut.aspx en mode "wait" avec une icone par exemple. Et quand Script.aspx répond favorablement, hop il reprend la main et process terminé ?

    Mais je dois faire quoi exactement dans mon Script.aspx, dans mon cas ?

  5. #5
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    salut

    je pense que tu ne devrais pas tant te compliquer la tache en créant tes objets XML.

    Essaie de regarder du coté des composants UpdatePanel et co.

    Avant j'avais un bon tuto dessus mais je ne le retrouve pas, mais commence deja a regarder ca. Ca te permettre a de faire de l'ajax beaucoup plus simplement.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Ok merci

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Faire du AJAX à la mano alors que MS nous a fournit un magnifique framework tout de même

    N'oublis pas d'installer le VS2005 SP1 (je prévois je prévois....)

    Et ensuite installe ASP.NET AJAX : http://asp.net/ajax/

    Mais ca ne résoudra pas tout pour ton besoin, qui est assez délicat...

  8. #8
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Citation Envoyé par bizet Voir le message

    Avant j'avais un bon tuto dessus mais je ne le retrouve pas, mais commence deja a regarder ca. Ca te permettre a de faire de l'ajax beaucoup plus simplement.
    le "ca" correspondait au tuto que j'ai oublié de joindre!! Mea Culpa

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Oui j'ai installé ce framework à l'instant et je vais de ce pas installer le SP1 que j'avais DL vendredi.
    J'ai fais un rapide essai, ça marche exactement comme je veux en 2 temps 3 mouvements
    Sauf que, question d'esthétique, quand je click sur mon bouton qui lance mon trigger, existe-t'il un moyen de masquer ce bouton tant que le process tourne ?

    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
            <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
                <ContentTemplate> 
                    <%= DateTime.Now %>                 
    				<br /><asp:Button ID="Button1" runat="server" Text="Click Me!" OnClick="sleep" /> 
                </ContentTemplate> 
                <Triggers> 
                    <asp:AsyncPostBackTrigger ControlID="Button1" /> 
                </Triggers> 
            </asp:UpdatePanel>         
            <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"> 
                <ProgressTemplate> 
                    Working... 
                </ProgressTemplate> 
            </asp:UpdateProgress>

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Oui, il suffit de changer son style en hidden en javascript...

    Mate du coté d'AjaxControlToolkit si tu veux appuyer ton truc avec des effets sympas et pas prise de tête à mettre en place (enfin, tout est relatif pour le pas prise de tête)
    Je me rapelle aussi d'un truc qui affichait un "Patientez svp" animé plus "ergo" (cool)...
    A si je l'ai retrouvé :
    http://www.codeproject.com/KB/ajax/M...eProgress.aspx


    Par contre, il faut installer le sp1 avant le framework
    Si tu n'as pas de problème tant mieux, mais peut être n'as tu pas de master page...
    En tout cas désinstalle / install sp1 / réinstalle ajax, c'est pas long, et ca évite beaucoup de perte de temps ensuite...

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Erf ok j'arrête mon install du SP1.
    Ca prend une plombe, je ne sais pas pourquoi

    Je ne peux pas dire qu'à la fin de mon process, tu me fais ceci et rafraichis la page ? Parce qu'en fait j'ai plusieurs choses qui vont changer, et je ne suis pas un grand fana du javascript... Enfin on va dire que j'ai plutôt du mal

  12. #12
    Membre averti Avatar de npuzin
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 265
    Points : 423
    Points
    423
    Par défaut
    ASP.NET Ajax permet d'appeller facilement un web service de maniere asynchrone.

    http://www.asp.net/learn/ajax-videos/video-79.aspx

    C'est peut etre une piste.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    ok je vais voir ça.
    pffffffff depuis mon dernier message, je suis à peine au 1/3 de l'install du SP1...

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Bon voilà, ayé j'ai pu faire ce que je voulez avec ajax, en effet c'est pas très compliqué avec le framework à MS

    En revanche, pour le déploiement sur un serveur, je dois installer le même toolkit ? Ou bien il y a un runtime destiner uniquement au client ?

  15. #15
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Citation Envoyé par dinbougre Voir le message
    Bon voilà, ayé j'ai pu faire ce que je voulez avec ajax, en effet c'est pas très compliqué avec le framework à MS

    En revanche, pour le déploiement sur un serveur, je dois installer le même toolkit ? Ou bien il y a un runtime destiner uniquement au client ?
    non tu dois installer le meme.
    Bon courage

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Tu peux mettre les dll System.Web.Extension.dll et System.Web.Extension.Design.dll dans le GAC du serveur (ne changeront jamais)

    Si tu utilises AjAxControlToolkit laisse la dll AjAXControl...dll dans le bin de ton Site, car les versions change souvent.

    Evidemment si tu places toutes tes dll dans le bin ca marche parfaitement... Mais tu devra le faire a chaque fois..

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Ok merci pour votre aide,
    J'avais lancé l'install du toolkit sur le serveur avant de voir ton message donc pour l'instant ça marche, on va déjà laisser ça comme ça en test

    Merci à vous 2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lancer un autre thread depuis une page ASP.net
    Par Arthis dans le forum ASP.NET
    Réponses: 9
    Dernier message: 11/12/2009, 14h24
  2. Je ne peux plus lancer mes projets ASP.NET
    Par webworker dans le forum Visual Studio
    Réponses: 0
    Dernier message: 21/03/2009, 18h21
  3. Réponses: 7
    Dernier message: 16/04/2008, 16h42
  4. Lancer une application asp.net
    Par mikawell3000 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/08/2007, 09h23
  5. WebService Asynchrone et ASP.NET
    Par ostenhard dans le forum Services Web
    Réponses: 17
    Dernier message: 27/07/2007, 17h03

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