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

Delphi Discussion :

Problème pour développer un service


Sujet :

Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut Problème pour développer un service
    Bonjour,
    Je tente de transposer un code vers un service.
    J'observe que je dois modifier certains algorithmes comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    renamefile('ok.ini','nok.ini');
    renamefile(PChar(ExtractFilePath(ParamStr(0)))+'ok.ini',PChar(ExtractFilePath(ParamStr(0)))+'nok.ini');
    J'ai par contre encore un problème avec une tentative d'envoi d'email:
    Ce code n'est pas accepté:
    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
    var
      //FileNames : string;
      Result : boolean;
    begin
      try
        Result := False;
        //Setup SMTP smtphost, emailport, mailfrom, mailto, mailsubj, mailbody
        SMTP := TIdSMTP.Create(nil);
        SMTP.Host := smtphost;
        SMTP.Port := StrToInt(emailport); //Default email port
        MailMessage.From.Address := mailfrom;
        MailMessage.Recipients.EMailAddresses := mailto+','+mailcc;
        MailMessage.Subject := mailsubj;
        MailMessage.Body.Text := mailbody;
     
        //Send email
        try
          try
            SMTP.Connect;
            SMTP.Send(MailMessage);
            Result := True;
          except
            on E:Exception do
            begin
              ShowMessage('Cannot send E-Mail: ' + E.Message);
              Result := False;
            end;
          end;
        finally
          if SMTP.Connected then SMTP.Disconnect;
      end;
      except
        on E : Exception do
        begin
          ShowMessage('Error in the function SendEmailDelphi: ' + E.Message);
          Result := False;
        end;
      end;
    J'ai tenté l'appel de cette procédure dans le service:
    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
    var
        SMTP: TIdSMTP;
        MailMessage: TIdMessage;
      //FileNames : string;
      Result : boolean;
    begin
      try
        Result := False;
        //Setup SMTP smtphost, emailport, mailfrom, mailto, mailsubj, mailbody
        SMTP := TIdSMTP.Create(nil);
        SMTP.Host := smtphost;
        SMTP.Port := StrToInt(emailport); //Default email port
        MailMessage.From.Address := mailfrom;
        MailMessage.Recipients.EMailAddresses := mailto+','+mailcc;
        MailMessage.Subject := mailsubj;
        MailMessage.Body.Text := mailbody;
     
        //Send email
        try
          try
            SMTP.Connect;
            SMTP.Send(MailMessage);
            Result := True;
          except
            on E:Exception do
            begin
              ShowMessage('Cannot send E-Mail: ' + E.Message);
              Result := False;
            end;
          end;
        finally
          if SMTP.Connected then SMTP.Disconnect;
      end;
      except
        on E : Exception do
        begin
          ShowMessage('Error in the function SendEmailDelphi: ' + E.Message);
          Result := False;
        end;
      end;
    mais sans résultat :-(
    Je ne sais pas non plus comment déboguer un service, sauf en l'installant pour le tester... si vous avez des suggestions...
    Merci d'avance ;-)
    PhilLu



  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par PhilLU Voir le message
    Ce code n'est pas accepté
    J'ai tenté l'appel de cette procédure dans le service (...) mais sans résultat :-(
    Et si tu énumérais les erreurs retournées, peut être que ça aiderait

  3. #3
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Salut AndNotOr,
    Je n'ai aucun message d'erreur
    Malheureusement l'email n'est pas envoyé.
    Le même code dans un exe fonctionne parfaitement
    Pour le reste du service j'ai du modifier du code (voir exemple dans mon post précédent)
    Merci pour tes idées...

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Un ShowMessage dans un service, ça ne va pas le faire.
    Écris dans un fichier ou génère un événement Service1.LogMessage().

  5. #5
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,
    Oui, j'y ai pensé, mais en supprimant ces messages, pas mieux :-(

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Écris dans un fichier ou génère un événement Service1.LogMessage().

  7. #7
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    comme je te l'ai déjà dit sur l'autre forum ... ton TIdMessage n'est pas créé
    de ce fait ton message ne peut pas être envoyé

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Yop !

    Citation Envoyé par Cirec Voir le message
    comme je te l'ai déjà dit sur l'autre forum ... ton TIdMessage n'est pas créé
    de ce fait ton message ne peut pas être envoyé
    Citation Envoyé par PhilLU Voir le message
    Le même code dans un exe fonctionne parfaitement
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    oui j'ai lu ...

    si les objets sont déposés sur une fiche alors oui ça fonctionne mais là ce n'est pas le cas !
    un objet déclaré localement qui n'est pas créé ne peut pas fonctionner c'est la base.

    regarde le code qui est appelé dans le service et dit moi comment et ou le TIdMessage est créé ?

  10. #10
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    De fait Cirec a parfaitement raison.
    Ce code fonctionne maintenant parfaitement:
    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
    procedure emailSend(Sender: TObject);
    begin
        //Setup SMTP smtphost, emailport, mailfrom, mailto, mailsubj, mailbody
        SMTP := TIdSMTP.Create(nil);
        SMTP.Host := smtphost;
        SMTP.Port := StrToInt(emailport);
        MailMessage := TIdMessage.Create(nil);
        MailMessage.From.Address := mailfrom;
        MailMessage.Recipients.EMailAddresses := mailto+','+mailcc;
        MailMessage.Subject := mailsubj;
        MailMessage.Body.Text := mailbody;
        //Send email
          try
            SMTP.Connect;
            SMTP.Send(MailMessage);
          except
             // Log blabla
          end;
          if SMTP.Connected then
          begin
          SMTP.Disconnect;
        MailMessage.free;
        SMTP.free;
          end;
    end;
    Merci pour vos réponses ;-)

    PhilLu

  11. #11
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,
    Et bien voilà, le service fonctionne parfaitement sur ma machine (Windows 7 SP1). (installation via /INSTALL)
    Losque je tente de l'installer sur Win server 2008, je reçois un message application CRASH avec le code d'erreur 0eedfade.

    J'ai trouvé à ce sujet des montagnes de posts dans tous les sens, même un bug de XE2 sp4!!!
    Le problème est que je ne possède pas de serveur 2008 pour tester
    Si quelqu'un à une piste...
    Merci pour vos suggestions

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par PhilLU Voir le message
    Et bien voilà, le service fonctionne parfaitement sur ma machine (Windows 7 SP1). (installation via /INSTALL)
    Citation Envoyé par PhilLU Voir le message
    De fait Cirec a parfaitement raison.
    Ce code fonctionne maintenant parfaitement:
    Donc quand tu écrivais le 15 à 10 h 14
    Citation Envoyé par PhilLU Voir le message
    Le même code dans un exe fonctionne parfaitement
    ce n'était pas vrai, c'est bien ça ?


    Citation Envoyé par PhilLU Voir le message
    Si quelqu'un à a (du verbe avoir -- sans accent) une piste...
    Ouais : tu fais comment pour l'installer, alors ? Elle vient d'où, cette erreur ? Relis-toi :
    Citation Envoyé par PhilLU Voir le message
    Lorsque je tente de l'installer sur Win server 2008, je reçois un message application CRASH avec le code d'erreur 0eedfade.
    [...]
    Le problème est que je ne possède pas de serveur 2008 pour tester
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Bonjour,

    Citation Envoyé par PhilLU Voir le message
    Bonsoir,
    Losque je tente de l'installer sur Win server 2008, je reçois un message application CRASH avec le code d'erreur 0eedfade.
    Une différence qu'il peut y avoir entre ton PC et un serveur c'est les droits surement bien plus stricts sur le serveur. Regarde éventuellement le code que tu exécute au démarrage si il n'y aurait pas une ou des opérations qui pourraient avoir besoin de droits élevés ou qui tentent d'écrire là où ce n'est pas permis. Essaye d'attribuer un compte d'exécution ayant le maximum de droits pour voir si le message persiste.

    @++
    Dany

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je bute sur un problème similaire ou presque (aucun message d'erreur) sur un serveur windows 2012 R2
    pour moi il s'agit d'un problème de configuration SMTP ou du pare feu du dit serveur. Pour écarter la piste d'une erreur de programmation de mon service, j'ai repris le même code dans un exe et l'envoi échoue sans lever aucune erreur
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    je bute sur un problème similaire ou presque (aucun message d'erreur) sur un serveur windows 2012 R2
    pour moi il s'agit d'un problème de configuration SMTP ou du pare feu du dit serveur. Pour écarter la piste d'une erreur de programmation de mon service, j'ai repris le même code dans un exe et l'envoi échoue sans lever aucune erreur
    Salut SergioMaster,
    Dans mon cas, l'envoi d'un email est occasionnel, hors le crash à lieu à l'installation, ou enfin quasi directement...
    dès son lancement, le service scanne des adresse IP pour récupérer des données de la première ligne de la page web trouvée... et boucle avec un intervalle de 1 minute.
    (IPProbe étant l'adresse IP)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     for I := 1 to NProbe do
      begin
           Fs := TFileStream.Create(ExtractFilePath(ParamStr(0))+'temp.log', fmCreate);
            try
              DownloadHTTP('http://'+IPProbe[i-1], TStream(Fs));    //
               except
              end;
              Fs.Free;
              assignfile(Mem1, ExtractFilePath(ParamStr(0))+'temp.log');
              reset(mem1);
              readln(mem1,S1);
              closefile(Mem1);
    //...ici j'exploite S1...
    end;
    ...avec l'exe, aucun problème???
    Comme c'est un service, je n'ai pas envie d'exploiter "except"...
    Aussi le service marche sur ma machine à merveille

    Toujours sur la piste d'une solution...
    Merci pour ton aide...
    Phil

  16. #16
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut MonObjet.create try finally
    Bonjour

    Par principe chaque fois que c'est possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MonObjet :=TMonObjet.create
    try
       //mon code de la mort
    finally
       MonObjet.free
    end;
    Ainsi quoi qu'il arrive mon objet est libéré, c'est d'autant plus important qu'on travaille sur du mail en réseau qui peux ne pas aboutir pour tout un tat de bonnes et mauvais raisons.

    Crldt


    Citation Envoyé par PhilLU Voir le message
    De fait Cirec a parfaitement raison.
    Ce code fonctionne maintenant parfaitement:
    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
    procedure emailSend(Sender: TObject);
    begin
        //Setup SMTP smtphost, emailport, mailfrom, mailto, mailsubj, mailbody
        SMTP := TIdSMTP.Create(nil);
        SMTP.Host := smtphost;
        SMTP.Port := StrToInt(emailport);
        MailMessage := TIdMessage.Create(nil);
        MailMessage.From.Address := mailfrom;
        MailMessage.Recipients.EMailAddresses := mailto+','+mailcc;
        MailMessage.Subject := mailsubj;
        MailMessage.Body.Text := mailbody;
        //Send email
          try
            SMTP.Connect;
            SMTP.Send(MailMessage);
          except
             // Log blabla
          end;
          if SMTP.Connected then
          begin
          SMTP.Disconnect;
        MailMessage.free;
        SMTP.free;
          end;
    end;
    Merci pour vos réponses ;-)

    PhilLu

Discussions similaires

  1. Problème pour accèder à un service WEB
    Par Je_Debute dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 07/06/2011, 21h14
  2. Problème pour développer
    Par gotque dans le forum Développement Sharepoint
    Réponses: 4
    Dernier message: 08/09/2010, 15h23
  3. Réponses: 2
    Dernier message: 13/07/2010, 16h30
  4. Réponses: 1
    Dernier message: 25/04/2009, 17h35
  5. Réponses: 2
    Dernier message: 14/12/2007, 10h43

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