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

Web & réseau Delphi Discussion :

[D7+Isapi] Faire une page HTML de progression de traitement


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Par défaut [D7+Isapi] Faire une page HTML de progression de traitement
    Salut à tous,

    Sur un site web fait avec une DLL Isapi, et j'ai une procédure d'envoi de mail directement depuis le site. Et comme le traitement peut être relativement long, j'aimerais afficher une page qui se rafraichit au fur et à mesure de l'avancement des envois.

    En résumé, voici la procédure d'envoi :
    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
     
    procedure TWBM.WBMenvoiAction(Sender: TObject; Request: TWebRequest;
      Response: TWebResponse; var Handled: Boolean);
    begin
     
        // On procéde à un envoi de message pour chaque ligne du fichier CSV
        for lig:=0 to length(RecLigne)-1 do
        begin
     
            // Création de la page HTML avec le compteur de progression
            Genere_Page_Wait('Envoi des mails en cours : '+IntToStr(lig+1)+' / '+IntToStr(length(RecLigne)),True);
     
           // Envoi du message
          Envoi_Mail;
     
        end;
    end;
    et voici le code de la page wait.html qui est généré par la DLL

    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
     
    <HTML>
    <HEAD>
    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
    </HEAD>
    <BODY>
    <META HTTP-EQUIV="REFRESH" CONTENT="1; URL=http://fcsm.devoci.fr/wait.html">
    <font face="arial">
    <CENTER>
    <BR><BR>
    Envoi des mails en cours : 13 / 84
    </CENTER>
    </font>
    </BODY>
    </HTML>
    Pour afficher cette page Wait, j'ai essayé tout un tas de formules différentes, et aucune ne fonctionne proprement.

    J'ai essayé tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        response.SendResponse;
        response.SendRedirect(VGL_Domaine+'/wait.html');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Request.WriteString('<META HTTP-EQUIV="refresh" CONTENT="0; URL='+VGL_Domaine+'/wait.html">');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        response.Content:=VGL_Domaine+'/wait.html';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Request.WriteString('Envoi des mails en cours : '+IntToStr(lig+1)+' / '+IntToStr(length(RecLigne))+'<BR>');
    avant la boucle for, et dans la boucle for

    J'ai même essayé de passer desTstrings dans des Streams.


    La seule syntaxe qui fonctionne à peu près, c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.SendRedirect(VGL_Domaine+'/wait.html');
    avant la boucle for

    Mais ce qui s'affiche au lancement, c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HTTP/1.1 302 Object Moved Connection: close Date: Thu, 21 Aug 2008 09:52:38 GMT Content-Length: 160 Content-Type: text/html Location: http://fcsm.devoci.fr/wait.html Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-Powered-By: ASP.NET 
    Objet déplacé
    Ce document peut être consulté ici
    Ce qui d'une part est trés moche, et d'autre part oblige l'utilisateur à cliquer sur le lien pour voir le compteur s'afficher et se rafraichir tout seul.

    Bref, je cherche un moyen propre d'afficher une page de progression pendant un traitement long coté serveur.

    Merci pour voter aide.

    Fred

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si tu veux vraiment faire ça, je penses qu'il faut que tu implémentes une solution de type COMET.

    Alors qu'est-ce que c'est que ce truc qui fait peur, en fait l'idée c'est de faire en sorte d'envoyer le contenu de la page HTML sans pour autant fermer la connexion TCP de sorte à pouvoir continuer à envoyer d'autres informations à l'utilisateur final après que la page se soit affiché chez lui.

    Donc l'idée ici ce serait d'envoyer la page complète à l'état 0 (Response.Content + Response.SendResponse je dirais) puis à chaque tour de boucle tu envoies un une balise script où dedans tu fais exécuter un JavaScript qui fait changer le nombre de mail envoyé.

    Après je te dirais que je n'ai jamais essayé ce système, en fait je ne fais même pas du traitement ISAPI mais dans l'idée c'est comme ça qu'il faudrait faire.

  3. #3
    Membre très actif Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Par défaut
    Dans la théorie, ça a l'air sympa, mais dans la pratique, je ne vois pas bien comment faire.

    C'est un peu ce que j'avais réussi à faire en envoyant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Request.WriteString('Envoi des mails en cours : '+IntToStr(lig+1)+' / '+IntToStr(length(RecLigne))+'<BR>');
    à chaque passage dans la boucle, mais le texte s'ajoutait en bas de page, au lieu de remplacer le texte existant, et en plus le texte était précédé de tout un tas de messages du serveur genre "HTTP Request ....", ce qui au final rendait le résultat illisible.

Discussions similaires

  1. Comment faire une page html animée de ce genre ?
    Par gilles54350 dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 01/04/2014, 17h21
  2. Faire tourner un flash dans une page html
    Par aaakii dans le forum Intégration
    Réponses: 9
    Dernier message: 06/02/2008, 11h14
  3. Réponses: 2
    Dernier message: 27/04/2007, 15h13
  4. Réponses: 6
    Dernier message: 12/04/2006, 16h46

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