Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [DELPHI] Debug di un servizio che fa uso di TCP

    Ciao a tutti,
    Ho creato un servizio che include due componenti :
    • TTCPClient
    • TTCPServer


    (Il servizio è derivato da un' applicazione che funziona perfettamente)

    Il servizio quando si avvia si mette in ascolto su una determinata porta, in questa porta un client invia una "determinata" stringa; al ricevimento della stringa, invio (servizio) un ACK (#6) al client.

    Il mio problema è che ricevo la stringa dal client perfettamente, ma quando devo mandare il mio "consenso" (ACK) al client ... quest' ultimo mi risulta DISCONNESSO.

    Ripeto il progetto a livello programma funziona perfettamente a livello Servizio ho il problema succitata.

    Qualcuno sa se si può fare un debug su un servizio ?

    se si ... mi spiegate come fare ?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Debuggare un servizio non è la cosa più facile: devi usare il comando [Run|Attach to Process] per agganciarti dall'IDE al processo in esecuzione che rappresenta il servizio, avendo l'accortezza di lanciare Delphi usando un livello di autorizzazione (es. come Amministratore) sufficiente a pareggiare quello del servizio.

    A mio avviso, conviene sempre agire diversamente in questi casi, ossia isolare la logica che viene eseguita nel contesto del servizio, in un package o una libreria, con la possibilità di testarla a parte, lasciando al Service l'unico compito di fornire una "shell" di esecuzione di quella logica che non fa uso di interfacce grafiche e non interagisce con il desktop, dirottando tutte le chiamate al contenitore della logica, che dovrebbe essere già stato testato separatamente, tipo da un Console Application oppure (meglio) da una serie di Unit/Integration Test, in pratica togliendo qualsiasi pezzo di logica effettiva dal codice del Service.

    Nello specifico, bisognerebbe avere accesso alla macchina o vedere tutto il codice per capire cosa va effettivamente in errore, ma potresti partire dal suggerimento sopra per applicare un primo refactoring che semplificherebbe di molto la diagnostica.

    Infine, non dimenticare che esistono anche dei tool e librerie per il logging di informazioni durante l'esecuzione del programma: se ben utilizzati, risultano quasi più efficaci e semplici di un debug (quando si parla di servizi).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Grazie alka (alias Marco)
    ti ringrazio per il consiglio metodo di debug [RUN....]

    Tramite log interni al servizio, ho appurato che il problema è dato dal componente Delphi TTCpClient.
    Il servizio si comporta bene in ricezione dati (TTCpServer) ... ma ha problemi sull invio (TTCpClient) ... devo riuscire a capire se è un problema di security (Windows) o è proprio un problema del componente !
    Grazie mille per l'aiuto.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Quote Originariamente inviata da filippo_260367 Visualizza il messaggio
    Il servizio si comporta bene in ricezione dati (TTCpServer) ... ma ha problemi sull invio (TTCpClient) ... devo riuscire a capire se è un problema di security (Windows) o è proprio un problema del componente !
    Che io sappia, né il componente né la libreria hanno problemi particolari, perché leggendo anche altrove vi sono in molti a usarli (compresi i discendenti che implementano protocolli specifici, es. POP3, SMTP, ecc.) all'interno di propri servizi.

    Si tratta di operazioni che non richiedono l'uso di una interfaccia grafica e l'impiego di socket è forse l'azione più frequentemente svolta dai servizi Windows.

    Controlla bene che non vi siano punti in cui un eventuale errore venga loggato a video.

    Per sicurezza, controlla anche l'Event Viewer (o cosiddetto Visualizzatore Eventi) che potrebbe contenere delle "tracce" dei problemi che si potrebbero essere verificati durante l'esecuzione del servizio.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Problema risolto !!!

    Marco, confermo a te e magari può essere di aiuto a chi legge ... il problema è nel componente TTCPClient o perlomeno integrandolo in un servizio !!!
    Il problema potrebbe essere dato dal fatto che il componente in questione utilizza una dll installata con delphi (qtintf70.dll, che tra l altro deve essere distribuita ... altrimenti non funziona ).
    Per risolvere il problema ho utilizzato i componenti Indy (IdTCPClient e IdTCPServer) inclusi nella licenza di D7 Professional.
    Dalle istruzioni che ho dovuto usare, questi si interfacciano direttamente con il socket (a diferenza dei primi che secondo me fanno da tramite).
    In ogni caso ... risolto !

    Marco ...sono riuscito a debuggare ... grazie mille ;-)

    Filippo

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Quote Originariamente inviata da filippo_260367 Visualizza il messaggio
    Marco, confermo a te e magari può essere di aiuto a chi legge ... il problema è nel componente TTCPClient o perlomeno integrandolo in un servizio !!!
    Grazie della conferma, anche perché avevo effettivamente letto male la tua domanda: pensavo tu usassi già i componenti Indy.

    I componenti che hai citato sono un pochino datati ed esistono solo per compatibilità all'indietro, quindi usa pure quelli della libreria Indy come hai già fatto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.