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

C# Discussion :

[c#] Service problème


Sujet :

C#

  1. #21
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    T'es sur de compiler et installer ton programme en mode release ? Et d'avoir une target application windows (pas console même si cela pourrait marcher?)

    Si tu pouvais montrer le code complet à jour de OnStart du service. Je n'ai pas regardé mais attention à la construction d'objet dans OnStart et qui dans le constructeur fait des connexions réseaux car cela peut potentiellement bloquer le démarrage du service.

  2. #22
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par hegros Voir le message
    T'es sur de compiler et installer ton programme en mode release ? Et d'avoir une target application windows (pas console même si cela pourrait marcher?)

    Si tu pouvais montrer le code complet à jour de OnStart du service.
    Oui je suis bien en mode release le code source complet est 3 post au dessus (il comprend le service + la solution de déploiement).

    Voici quand même la source de OnStart :
    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
        class ServiceTest : ServiceBase
        {
            private Server Server = null;
            public ServiceTest()
            {
                this.InitializeComponent();
            }
     
            private void InitializeComponent()
            {
                this.CanShutdown = true;
                this.ServiceName = "Service.Test";
                this.CanStop = true;
            }
     
            protected override void OnStart(String[] Args)
            {
                Log.Instance.Write("Démarage du serveur...");
                if (this.Server == null)
                {
                    this.Server = new Server();
                }
                this.Server.Start();
            }
            protected override void OnStop()
            {
                if (this.Server != null)
                {
                    this.Server.Stop();
                }
            }
            protected override void OnShutdown()
            {
                if (this.Server != null)
                {
                    this.Server.Stop();
                }
                this.Server = null;
            }
        }

  3. #23
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    Oui je suis bien en mode release le code source complet est 3 post au dessus (il comprend le service + la solution de déploiement).
    Cela ne m'amuse pas particulièrement d'installer un service trojan...


    OnStart c'est uniquement cela, le reste on s'en moque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                protected override void OnStart(String[] Args)
            {
                Log.Instance.Write("Démarage du serveur...");
                if (this.Server == null)
                {
                    this.Server = new Server();
                }
                this.Server.Start();
            }

    Tu as bien ton log démarrage de serveur ? Est-ce que tu arrives à construire ton objet et atteindre l'appel de Start de Server ?

    Il faut voir le code du constructeur de Server et de Server.Start car il ne devrait pas y avoir de traitement lourds cela ne devrait démarrer qu'un thread de service sous peine d'avoir le genre de message d'erreur que tu as.

  4. #24
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par hegros Voir le message
    Cela ne m'amuse pas particulièrement d'installer un service trojan...


    OnStart c'est uniquement cela, le reste on s'en moque.




    Tu as bien ton log démarrage de serveur ? Est-ce que tu arrives à construire ton objet et atteindre l'appel de Start de Server ?

    Il faut voir le code du constructeur de Server et de Server.Start car il ne devrait pas y avoir de traitement lourds cela ne devrait démarrer qu'un thread de service sous peine d'avoir le genre de message d'erreur que tu as.
    Trojan ? C'est juste un serveur qui écoute sur le port TCP 10001 et qui accepte les connexions -_-', il n'y a rien de dangereux.

    J'ai bien le démarrage du serveur en log oui mais plus rien après.
    Apparemment, ca s'arrête juste aprè while (true) (ou il y a le Socket.Select()..) Enfin les connexions ne doivent pas être accepté je pense mais pourquoi les exception ne sont pas marqué dans les log, c'est une bonne question.

    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
    public Server()
            {
                try
                {
                    this.CreateDirectories();
                    this._socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    this._port = 10001;
                    this._endPoint = new IPEndPoint(IPAddress.Any, this._port);
                    this._socket.Bind(this._endPoint);
                    this._socket.Listen(100);
                    Client c = new Client();
                    c.IsServer = true;
                    c.Name = "Server";
                    this._clients[this._socket] = c;
                }
                catch (Exception E)
                {
                    Log.Instance.Write(E.Message);
                }
            }
            #endregion
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     public void Start()
            {
                this._Thread = new Thread(new ThreadStart(this.StartOnThread));
                this._Thread.Start();
     
            }
            public void StartOnThread()
            {
                while (true)
                {
                    try
                    {
     
                        List<Socket> read = new List<Socket>();
                        List<Socket> write = new List<Socket>();
                        for (int i = 0; i < this._clients.Count; i++)
                        {
                            read.Add(this._clients.ElementAt(i).Key);
                            if (this._clients.ElementAt(i).Value.Size > 0)
                                write.Add(this._clients.ElementAt(i).Key);
                        }
                        Socket.Select(read, write, null, 5);
                        if (read.Count > 0)
                        {
                            for (int i = 0; i < read.Count; i++)
                            {
                                try
                                {
     
                                    if (this._clients[read[i]].IsServer)
                                    {
                                        this.Accept();
                                    }
                                    else
                                    {
                                        this.Read(read[i]);
                                    }
                                }
                                catch (Exception)
                                {
                                    read[i].Close();
                                }
                            }
     
                        }
                        if (write.Count > 0)
                        {
                            for (int i = 0; i < write.Count; i++)
                            {
                                try
                                {
                                    this.Write(write[i]);
                                }
                                catch (Exception)
                                {
     
                                }
     
                            }
                        }
                        this.ClearDisconnectSocket();
                    }
                    catch (Exception E)
                    {
                        Log.Instance.Write(E.Message);
                    }
                }
            }
    Merci encore

  5. #25
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    pourquoi les exception ne sont pas marqué dans les log, c'est une bonne question.
    En pas à pas tu observes une exception ?

    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
    public Server()
            {
                try
                {
                    this.CreateDirectories();
                    this._socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    this._port = 10001;
                    this._endPoint = new IPEndPoint(IPAddress.Any, this._port);
                    this._socket.Bind(this._endPoint);
                    this._socket.Listen(100);
                    Client c = new Client();
                    c.IsServer = true;
                    c.Name = "Server";
                    this._clients[this._socket] = c;
                }
                catch (Exception E)
                {
                    Log.Instance.Write(E.Message);
                }
            }
            #endregion
    Il faudrait me dire pourquoi il y a un Listen qui il me semble est bloquant dans le constructeur. Parce que si dans la construction tu attends qu'un client se connecte sans même avoir exécuté start.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public void Start()
            {
               Socket.Select(read, write, null, 5);
    }
    Tu as l'air de dire que cela bloque ici donc j'imagine qu'en pas à pas si tu mets un log juste avant Socket.Select il s'affiche. Est-ce que tu as essayé d'encadré par un try/catch/finaly cette instruction et récupérer l'erreur et un log.

  6. #26
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par hegros Voir le message
    En pas à pas tu observes une exception ?

    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
    public Server()
            {
                try
                {
                    this.CreateDirectories();
                    this._socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    this._port = 10001;
                    this._endPoint = new IPEndPoint(IPAddress.Any, this._port);
                    this._socket.Bind(this._endPoint);
                    this._socket.Listen(100);
                    Client c = new Client();
                    c.IsServer = true;
                    c.Name = "Server";
                    this._clients[this._socket] = c;
                }
                catch (Exception E)
                {
                    Log.Instance.Write(E.Message);
                }
            }
            #endregion
    Il faudrait me dire pourquoi il y a un Listen qui il me semble est bloquant dans le constructeur. Parce que si dans la construction tu attends qu'un client se connecte sans même avoir exécuté start.
    Le listen sert uniquement à dire que 100 clients peuvent se connecter simultanément. il n'est en rien bloquant.

    Citation Envoyé par hegros Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public void Start()
            {
               Socket.Select(read, write, null, 5);
    }
    Tu as l'air de dire que cela bloque ici donc j'imagine qu'en pas à pas si tu mets un log juste avant Socket.Select il s'affiche. Est-ce que tu as essayé d'encadré par un try/catch/finaly cette instruction et récupérer l'erreur et un log.
    Socket.Select n'est pourtant pas bloquant le 5 est le nombre de ms (ou us je ne sais plus ) à attendre avant de sortir du select et de continuer.

    Je dois partir là. Je continuerais a debug en revenant.

    Merci encore pour ton aide. Les services WCF sont bcp plus simple à mettre en place je n'ai jamais eu de soucis :s

  7. #27
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Le service n'a pas répondu assez vite à la demande de lancement ou de contrôle.
    onstart a un délai à ne pas dépasser, ce message indique qu'il a été dépassé, il faut partir sur un thread séparé rapidement, sinon le service est arrêté
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #28
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Le service n'a pas répondu assez vite à la demande de lancement ou de contrôle.


    onstrat a un délai à ne pas dépasser, ce message indique qu'il a été dépassé, il faut partir sur un thread séparé rapidement, sinon le service est arrêté
    Je ne peux pas faire plus rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public void Start()
            {
                this._Thread = new Thread(new ThreadStart(this.StartOnThread));
                this._Thread.Start();
     
            }
    ^^

  9. #29
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Bon il y a peut-être un plus gros soucis : même le code suivant ne fonctionne pas, (le service met trop de temps à repondre) :

    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
        class ServiceTest : ServiceBase
        {
            private Server Server = null;
            public ServiceTest()
            {
                this.InitializeComponent();
            }
     
            private void InitializeComponent()
            {
                this.CanShutdown = true;
                this.CanStop = true;
                this.ServiceName = "Service.Test";
     
            }
     
            protected override void OnStart(String[] Args)
            {
     
            }
            protected override void OnStop()
            {
     
            }
            protected override void OnShutdown()
            {
     
            }
    C'est normal ? Le service ne se lance pas ?

    Merci

  10. #30
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    quand on en arrive là, il faut passer un coup de reflector sur le fichier qui est réellement pointé par le chemin du service pour vérifier qu'on debug bien ce qu'on pense
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #31
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    quand on en arrive là, il faut passer un coup de reflector sur le fichier qui est réellement pointé par le chemin du service pour vérifier qu'on debug bien ce qu'on pense
    Je viens de vérifier ac reflector... je debug bien le bon :s

    Ca peut venir d'où ? Du groupe Service réseaux ? Dans services.msc dans clique droit sur le service, faut-il préciser quelque chose dans connexion que faut-t-il mettre ?

    Merci

  12. #32
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    quand tu modifies le code, tu arrete bien le service avant de copier les fichiers ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #33
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    quand tu modifies le code, tu arrete bien le service avant de copier les fichiers ?
    Le service ne se démarre pas .. donc pas besoin de l'arrêter...
    pourtant il n'y a rien comme code je comprend pas !

  14. #34
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Bon c'est bon il redémarre le service
    (et s'arrête juste après, exception de sécurité) du a EventLog :

    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
    #region Constructor
            public Log()
            {
                EventLogPermission Permit = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
                Boolean ExistSource = EventLog.SourceExists("Service.Test");
                String LogName = EventLog.LogNameFromSourceName("Service.Test", ".");
                if (ExistSource && LogName != "Desktop")
                    EventLog.DeleteEventSource("Service.Test");
                this.LogFile = new EventLog();
                ExistSource = EventLog.SourceExists("Service.Test");
                if (!ExistSource)
                    EventLog.CreateEventSource("Service.Test", "Desktop");
                this.LogFile.Source = "Service.Test";
                this.LogFile.Log = "Desktop";
            }
    Je pensais que EventLogPermission aurait fixé ce problème...

  15. #35
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    C'est bon résolu, le problème venais d'une bêtise de ma part des events log qui n'avait pas la permission d'écrire et du parefeu Windows mal configuré !

    Merci encore pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/08/2008, 10h00
  2. Réponses: 6
    Dernier message: 05/12/2007, 17h55
  3. Orbacus Naming Service problème
    Par anas.eh dans le forum CORBA
    Réponses: 5
    Dernier message: 16/11/2007, 21h43
  4. Web Services - Problème de communication serveur/client
    Par vern's dans le forum Web & réseau
    Réponses: 9
    Dernier message: 27/08/2007, 10h06
  5. [C# 2.0, Service]Problème service et Timer
    Par boleduch dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/04/2006, 15h00

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