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

VB.NET Discussion :

Empecher l'arret d'un service


Sujet :

VB.NET

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut Empecher l'arret d'un service
    Bonjour,

    Excusez moi de vous embeter.
    Voila, j'ai créé un service windows mais j'ai une erreur quand je le lance :
    le service sur l'ordinateur local a démarré et c'est ensuite arrêté. Certains services s'arretent automatiquement s'ils ne sont pas utilisés par d'autres services ou programmes.
    Seulement, j'ai réaliser une calculette qui doit se connecter a ce service qui effectuera l'addition et renverra le resultat à cette meme application.

    Bref, help me svp . Voici le code de mon 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
    41
    42
    43
    44
    45
    46
     
     
    Imports System.Net.sockets
     
    Public Class Service1
     
        Private listener As Net.Sockets.TcpListener
        Const PORT_NUM As Integer = 1039
        Dim EndPoint As Net.IPEndPoint
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            Dim iip As Long = 16777343
            EndPoint = New Net.IPEndPoint(iip, 1039)
            listener.Server.Bind(EndPoint)
            listener.Start()
            Dim state As New StateObject()
            state.workSocket = listener
            listener.Server.Receive(state.buffer, 1, state.BufferSize, Net.Sockets.SocketFlags.None)
            Dim lettre As String = state.sb.ToString
            Dim tableau As Array = lettre.Split("/")
            Dim nb1, nb2, nb3 As Double
            nb1 = Double.Parse(tableau.GetValue(0))
            nb2 = Double.Parse(tableau.GetValue(1))
            nb3 = nb1 + nb2
            Dim fin As String = nb3.ToString
            Dim Content() As Byte = System.Text.Encoding.ASCII.GetBytes(fin.ToCharArray())
            Dim taille As Integer = Content.Length
            listener.Server.Send(Content, 1, taille, Net.Sockets.SocketFlags.None)
        End Sub
     
        Protected Overrides Sub OnStop()
            listener.Stop()
        End Sub
     
     
        Public Class StateObject
            ' Client socket.
            Public workSocket As System.Net.Sockets.TcpListener = Nothing
            ' Size of receive buffer.
            Public BufferSize As Integer = 256
            ' Receive buffer.
            Public buffer(256) As Byte
            ' Received data string.
            Public sb As New System.Text.StringBuilder()
        End Class 'StateObject
    End Class
    Merci d'avance pour toute aide

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ta sub onstart a pas l'air de faire grand chose
    si c'est le cas, à la fin de la sub, le service s'arrete
    fait un read ou beginread sur le socket, ca devrait occuper le programme et donc empecher l'arret

    en général un service, dans le onstart on démarre un thread, et dans le thread on boucle à l'infini en faisant le traitement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Rebonjour

    Merci de ta réponse
    J'ai fait cela pr le windows service d'écoute :

    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
     
    Imports System.Net.sockets
     
    Public Class Calcule
     
        Private listener As Net.Sockets.TcpListener
        Const PORT_NUM As Integer = 1039
        Dim EndPoint As Net.IPEndPoint
     
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            'ip : 10.80.109.132 donne :'
            Dim iip As Long = 16777343
            'ip localhost : 127.0.0.1'
            EndPoint = New Net.IPEndPoint(iip, 1039)
            listener.Server.Bind(EndPoint)
            listener.Start()
     
            Dim data As String
            Dim bytes(1024) As Byte
            While True
                Dim client As TcpClient = listener.AcceptTcpClient()
                data = Nothing
                Dim Stream As NetworkStream = client.GetStream()
                Dim i As Int32
                i = stream.Read(bytes, 0, bytes.Length
                While (i <> 0)
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
                    Dim nb1, nb2, nb3 As Double
                    Dim tableau As Array = data.Split("/")
                    nb1 = Double.Parse(tableau.GetValue(0))
                    nb2 = Double.Parse(tableau.GetValue(1))
                    nb3 = nb1 + nb2
                    Dim fin As String = nb3.ToString
                    Dim Content() As Byte = System.Text.Encoding.ASCII.GetBytes(fin.ToCharArray())
                    Stream.Write(Content, 0, Content.Length)
                    i = Stream.Read(bytes, 0, bytes.Length)
     
                End While
                client.Close()
            End While
     
        End Sub
     
        Protected Overrides Sub OnStop()
            listener.Stop()
        End Sub
     
    End Class

    Snif cela ne marche pas et je retombe toujours sur la meme erreur... Please help

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    déjà met un try catch avec enregistrement de l'erreur quelquepart, parce que si y a une erreur qui se produit, le service s'arrete et tu ne vois pas l'erreur

    après essaye de mettre ton code dans un thread démarré par le onstart
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Bon, j' ai mis un try catch avec un streamwriter. J'obtiens l'erreur suivante snif :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Dix minutes plus tard : j'essaye de lancer le service mais j'ai l'erreur comme quoi le service n'a pas répondu assez rapidement à la demande de controle ...

    Bref snif

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le onstart doit etre léger, il doit juste servir à démarrer le service, pas à faire des traitements

    c'est pour ca qu'en général on lance un nouveau thread qui fait le traitement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    VOila, j'ai reussi pour la partie service et je te dois beaucoup (j'ai mis en automatique le démarrage mais je vais fr une autre thread) Mici ^^ Malheureusement, voila 20 minutes que je me bats avec la partie envoie des données de la calculette et j'ai beau chercher sur google je ne trouve rien :

    J'ai réalisé cette procédure qui envoie les données sur l'ip et le port sur lesquels j'ai réalisé un listen:

    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
     
    Public Class Form1
     
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim n1 As String
            Dim n2 As String
            Dim nn As String
            Dim endpoint As Net.IPEndPoint
            Try
     
                n1 = TextBox1.Text
                n2 = TextBox2.Text
                nn = n1 + "/" + n2
     
                Dim Content() As Byte = System.Text.Encoding.ASCII.GetBytes(nn.ToCharArray())
                Dim ls As Integer = Content.Length
                'ip : 10.80.109.132 donne :'
                Dim iiip As Long = 16777343
                'ip localhost : 127.0.0.1'
                endpoint = New Net.IPEndPoint(iiip, 1039)
                Dim tutu As Net.Sockets.TcpClient = New Net.Sockets.TcpClient(endpoint)
                tutu.Connect(endpoint)
                Dim stream As Net.Sockets.NetworkStream = tutu.GetStream()
     
                stream.Write(Content, 0, Content.Length)
     
     
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
     
        End Sub
     
    End Class
    J'obtiens l'erreur suivante :

    Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée

    au niveau de cette partie de code quand j utilise le mode debug avec des points d'arret :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Dim tutu As Net.Sockets.TcpClient = New Net.Sockets.TcpClient(endpoint)
                tutu.Connect(endpoint)
    Merci d'avance si vous pouvez m'aider encore un ptit peu

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ouvre un nouveau thread pour le problème de socket, je suis pas expert
    par contre comme je t'avais dit, avec WCF ou .net remoting, tu n'aurais rien eut à écrire quand au dialogue ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Oki merci en tout cas Il semblerait que le port et l'adresse ip soient squattés par le service que j'ai créé, ce qui est un peu logique... Bref il faudrait peut etre que la partie du traitement reiceve et send dans le service calcule soient lancées que quand le listen recoit les données. Bref, je suis un peu perdu ...

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le principe du socket c'est de faire listen, ca ouvre le port en écoute, il peut rester ouvert en écoute indéfiniment

    si un programme essaye d'ouvrir en écoute un port déjà à l'écoute par quelqu'un, ca plante

    par contre niveau client, tu peux ouvrir autant de fois que tu veux un port sortant (comme tu peux naviguer sur plusieurs sites en meme temps, tous sur le port 80)
    au niveau du serveur, un fois la connexion établie (un client arrive), la connexion n'est plus à l'écoute mais connectée, le port se remet en écoute des fois qu'un autre arrive dans la foulée
    il peut aussi y avoir autant de port à l'état connecté qu'on le souhaite

    read et send sont donc effectuée une fois la connexion établie

    donc regarde sur quelle ligne tu as l'erreur ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Coucou,

    Alors, j'ai un peu avancé
    Cependant quand je lance mon service j'obtiens l'erreur suivante :
    Windows n'a pas pu démarrer le service calcule sur ordinateur locale.
    Erreur 1053 : le service n'a pas répondu assez vite à la demande de lancement ou de controle
    Voici le code de mon service d'écoute calcule.vb qui lorsqu'il démarre lance un listener qui va écouter sur le port 1039 de l'ip 127.0.0.1 et lors d'une connexion d'un socket effectuer le callback dans lequel il récupère les infos du socket pour ensuite récupérer le message envoyé. :

    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
    69
    70
    71
    72
    73
    74
    75
     
     
    mports System.Net.sockets
    Imports System
    Imports System.Net
    Imports System.Text
    Imports System.Threading
    Imports Microsoft.VisualBasic
    Imports System.ServiceProcess.ServiceBase
     
    Public Class Calcule
     
        Public Shared reception As New Threading.ManualResetEvent(False)
        Private listener As Net.Sockets.TcpListener
        Const PORT_NUM As Integer = 1039
        Dim EndPoint As Net.IPEndPoint
     
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            Try
                Dim iip As Long = 16777343
                EndPoint = New Net.IPEndPoint(iip, 1039)
                Dim listener As New TcpListener(EndPoint)
                listener.Start()
                reception.Reset()
                listener.BeginAcceptSocket(New AsyncCallback(AddressOf ReadCallback), listener)
                reception.WaitOne()
            Catch ex As Exception
                Dim toto As System.IO.StreamWriter = New IO.StreamWriter("c:\data.txt")
                toto.Write(ex.Message)
                toto.Close()
            End Try
        End Sub
     
     
     
     
     
        Public Shared Sub ReadCallback(ByVal ar As IAsyncResult)
     
            Dim bit(1024) As Byte
            Dim ch1, ch2, ch3, ch4 As String
            Dim nb1, nb2, nb3 As Double
            Dim tab() As String
            ch1 = Nothing
            ch2 = Nothing
            ch3 = Nothing
     
            Dim listener As TcpListener = CType(ar.AsyncState, TcpListener)
            Dim soock As Socket = listener.EndAcceptSocket(ar)
     
            soock.Receive(bit, bit.Length, SocketFlags.None)
     
            ch1 = System.Text.Encoding.ASCII.GetString(bit, 0, bit.Length)
     
            tab = ch1.Split("/")
            ch2 = tab.GetValue(0)
            ch3 = tab.GetValue(1)
            nb1 = Double.Parse(ch2)
            nb2 = Double.Parse(ch3)
            nb3 = nb1 + nb2
            ch4 = nb3.ToString
     
            Dim tata As System.IO.StreamWriter = New IO.StreamWriter("c:\data2.txt")
            tata.Write(ch4)
            tata.Close()
            reception.Set()
        End Sub
     
     
        Protected Overrides Sub OnStop()
            listener.Stop()
        End Sub
     
    End Class
    Maintenant, voici le code correspondant à l'installer du 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
     
    Imports System.ComponentModel
    Imports System.Configuration.Install
     
    Public Class ProjectInstaller
     
        Public Sub New()
            MyBase.New()
     
            InitializeComponent()
     
            ServiceProcessInstaller1.Account = ServiceProcess.ServiceAccount.LocalSystem
     
     
            ServiceInstaller1.Description = "Service de calcule"
     
            ServiceInstaller1.DisplayName = "Calcule"
     
            ServiceInstaller1.ServiceName = "Calcule"
     
            ServiceInstaller1.StartType = ServiceProcess.ServiceStartMode.Manual
     
        End Sub
     
    End Class
    Pour finir, le code du fichier calcule.designer.vb :

    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
     
    Imports System.ServiceProcess
     
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Calcule
        Inherits System.ServiceProcess.ServiceBase
     
        'UserService overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
     
        ' The main entry point for the process
        <MTAThread()> _
        <System.Diagnostics.DebuggerNonUserCode()> _
        Shared Sub Main()
            Dim ServicesToRun() As System.ServiceProcess.ServiceBase
     
            ' More than one NT Service may run within the same process. To add
            ' another service to this process, change the following line to
            ' create a second service object. For example,
            '
            '   ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
            '
            ServicesToRun = New System.ServiceProcess.ServiceBase() {New Calcule}
     
            System.ServiceProcess.ServiceBase.Run(ServicesToRun)
        End Sub
     
        'Required by the Component Designer
        Private components As System.ComponentModel.IContainer
     
        ' NOTE: The following procedure is required by the Component Designer
        ' It can be modified using the Component Designer.  
        ' Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            components = New System.ComponentModel.Container()
            Me.ServiceName = "Calcule"
        End Sub
     
    End Class

    Snif , Quelqu'un aurait-il une petite idée ?
    Merci d'avance

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    en général un service, dans le onstart on démarre un thread, et dans le thread on boucle à l'infini en faisant le traitement


    Citation Envoyé par Pol63 Voir le message
    le onstart doit etre léger, il doit juste servir à démarrer le service, pas à faire des traitements

    c'est pour ca qu'en général on lance un nouveau thread qui fait le traitement

    faut que je te le répète combien de fois !!
    si le onstart dépasse un temps d'exécution fixé, ca dit que le service arrive pas à démarrer
    donc tu déportes le traitement !!
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    J 'ai fait cela :


    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    Imports System.Net.sockets
    Imports System
    Imports System.Net
    Imports System.Text
    Imports System.Threading
    Imports Microsoft.VisualBasic
    Imports System.ServiceProcess.ServiceBase
     
    Public Class Calcule
     
        Public Shared reception As New Threading.ManualResetEvent(False)
        Private listener As Net.Sockets.TcpListener
        Const PORT_NUM As Integer = 1039
        Dim EndPoint As Net.IPEndPoint
     
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            connec()
        End Sub
     
     
        Public Sub connec()
            Try
                Dim iip As Long = 16777343
                EndPoint = New Net.IPEndPoint(iip, 1039)
                Dim listener As New TcpListener(EndPoint)
                listener.Start()
                reception.Reset()
                listener.BeginAcceptSocket(New AsyncCallback(AddressOf ReadCallback), listener)
                reception.WaitOne()
            Catch ex As Exception
                Dim toto As System.IO.StreamWriter = New IO.StreamWriter("c:\data.txt")
                toto.Write(ex.Message)
                toto.Close()
            End Try
        End Sub
     
     
     
        Public Shared Sub ReadCallback(ByVal ar As IAsyncResult)
     
            Dim bit(1024) As Byte
            Dim ch1, ch2, ch3, ch4 As String
            Dim nb1, nb2, nb3 As Double
            Dim tab() As String
            ch1 = Nothing
            ch2 = Nothing
            ch3 = Nothing
     
            Dim listener As TcpListener = CType(ar.AsyncState, TcpListener)
            Dim soock As Socket = listener.EndAcceptSocket(ar)
     
            soock.Receive(bit, bit.Length, SocketFlags.None)
     
            ch1 = System.Text.Encoding.ASCII.GetString(bit, 0, bit.Length)
     
            tab = ch1.Split("/")
            ch2 = tab.GetValue(0)
            ch3 = tab.GetValue(1)
            nb1 = Double.Parse(ch2)
            nb2 = Double.Parse(ch3)
            nb3 = nb1 + nb2
            ch4 = nb3.ToString
     
            Dim tata As System.IO.StreamWriter = New IO.StreamWriter("c:\data2.txt")
            tata.Write(ch4)
            tata.Close()
            reception.Set()
        End Sub
     
     
        Protected Overrides Sub OnStop()
            listener.Stop()
        End Sub
     
     
    End Class

    Cela ne change rien snif

    Donnes moi un exemple s'il te plait si c'est pas comme ca que je dois faire.
    Merci.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je l'attendais celle là !

    onstart appelle connec certes, mais tant que t'es pas sortir de connec, t'es pas sorti de onstart donc tu n'a rien changé
    et tant que t'es pas sorti de onstart à temps, ca considère que le service plante

    j'ai employé plusieurs fois le mot thread !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Protected Overrides Sub OnStart(ByVal args() As String)
      dim th as new system.threading.Thread(adressof connec)
      th.isbackground = true
      th.Start
    end sub
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Snif ca marche :p Merci

  16. #16
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Excuses moi mais je reviens t'embeter si tu le veux bien

    J'ai un petit probleme cette fois ci au niveau de ma partie du logiciel de calcule.

    En effet, lors de la reception d'un socket par le service, il me créé un fichier data2.txt contenant la réponse au calcule que je fais dans mon application. Seulement, a mon grand malheur, quand je clique une fois cela marche mais quand je clique une deuxieme fois, ce fichier n'est pas mis à jour .

    Voici la partie ds le service chargée de calculer les valeurs recupérées et de créer le fichier text e (cette derniere est en rouge):

    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
        Public Shared Sub ReadCallback(ByVal ar As IAsyncResult)
    
            Dim bit(1024) As Byte
            Dim ch1, ch2, ch3, ch4 As String
            Dim nb1, nb2, nb3 As Double
            Dim tab() As String
            ch1 = Nothing
            ch2 = Nothing
            ch3 = Nothing
    
            Dim listener As TcpListener = CType(ar.AsyncState, TcpListener)
            Dim soock As Socket = listener.EndAcceptSocket(ar)
    
            soock.Receive(bit, bit.Length, SocketFlags.None)
    
            ch1 = System.Text.Encoding.ASCII.GetString(bit, 0, bit.Length)
    
            tab = ch1.Split("/")
            ch2 = tab.GetValue(0)
            ch3 = tab.GetValue(1)
            nb1 = Double.Parse(ch2)
            nb2 = Double.Parse(ch3)
            nb3 = nb1 + nb2
            ch4 = nb3.ToString
            Dim tata As System.IO.StreamWriter = Nothing
            tata = New IO.StreamWriter("c:\data2.txt")
            tata.Write(ch4)
            tata.Close()
            reception.Set()
        End Sub
    Et voici le code du formulaire de l'application de calcule que j'ai créée

    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
     
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim n1 As String
            Dim n2 As String
            Dim nn As String
            Dim endpoint As Net.IPEndPoint
     
            Try
     
                n1 = TextBox1.Text
                n2 = TextBox2.Text
                nn = n1 + "/" + n2
     
                Dim Content() As Byte = System.Text.Encoding.ASCII.GetBytes(nn.ToCharArray())
     
                Dim valeur As Boolean = True
                Dim ls As Integer = Content.Length
                'ip : 10.80.109.132 donne :'
                Dim iiip As Long = 16777343
                'ip localhost : 127.0.0.1'
                endpoint = New Net.IPEndPoint(iiip, 1039)
                Dim tutu As New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
                tutu.Connect(endpoint)
                tutu.Send(Content, 0, Content.Length, Net.Sockets.SocketFlags.None)
                tutu.Disconnect(False)
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
     
        End Sub
     
    End Class
    Merci d'avance pour l'aide que vous m'apporterez. (c'est le dernier probleme que je dois résoudre, apres je vais passer à la partie renvoie des données par le service et reception par l'application. Je devrais y arriver tout seul grace à ce que j'ai appris )

  17. #17
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Finalement, j'ai trouvé la solution. il suffisait de mettre un while true au niveau du beginaccept Mici

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

Discussions similaires

  1. Problème script d'arret de mon service
    Par kabouns dans le forum Administration système
    Réponses: 0
    Dernier message: 19/12/2007, 17h59
  2. Arret et Desactivation service
    Par AngelFire dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/10/2007, 13h59
  3. Monit - problème pour le démarrage / l'arret d'un service
    Par Museum dans le forum Administration système
    Réponses: 4
    Dernier message: 20/09/2007, 14h06
  4. peut on etre averti de l'arret d'un service windows
    Par pseudomh dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 07/08/2007, 12h13
  5. Comment empêcher le démarrage d'un service ?
    Par narmataru dans le forum Administration système
    Réponses: 2
    Dernier message: 17/01/2005, 10h15

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