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 :

problem avec un service windows


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut problem avec un service windows
    salut ,

    voici le code d'un sevice windows crée en vb.net
    ce code permet de pinger sur une machine (host) à partir d'une base de donnée la table etant "listhost",et permet d'inserrer le resulat dans une autre table "pinglog"
    le problem est lors du demmarage du service,j'ai cette erreur "le service a été demarré ou arreté,certains services peuvent s'arreter automatiquement s'ils n'ont aucune tache à faire..",ce qui n'est pas drole du tout,puisque le service a une tache à faire

    ben,c'est comme si..euh..le code ne fait rien

    voici le code
    merci d'avance de bien vouloir jeter un coup d'oeuil
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
     
    Imports System.Configuration
    Imports System.Data.SqlClient
    Imports System.Net.NetworkInformation
    Imports System.Threading
     
    Public Class PingMonitorService
     
      Dim ThreadTask As Thread
      Dim ConnStr As String
      Dim ReloadConfigFrequency As Integer
      Dim dtHosts As New DataTable      ' Hosts to be checked
     
      Protected Overrides Sub OnStart(ByVal args() As String)
        RefreshSettings()
        ThreadTask = New Thread(AddressOf MainTask)
        ThreadTask.Start()
      End Sub
     
      Protected Overrides Sub OnStop()
        ThreadTask.Abort()
      End Sub
     
      Private Sub RefreshSettings()
        ConnStr = ConfigurationManager.AppSettings("ConnStr").ToString()
        ReloadConfigFrequency = CInt(ConfigurationManager.AppSettings("ReloadConfigFrequency"))
     
            Dim daHosts As New SqlDataAdapter("SELECT Host, PingFreq FROM HostList ", ConnStr)
        dtHosts.Clear()
        daHosts.Fill(dtHosts)
      End Sub
     
      Private Sub MainTask()
        Do While True
          TryPing()
          ' Sleep 900ms to be sure at least one Tick happens on each second
          Thread.Sleep(900)
        Loop
      End Sub
     
      Private Sub TryPing()
     
        ' CurrentSecond is the number of seconds passed after midnight
        Dim CurrentSecond As Long = CLng(Now().Subtract(Today()).TotalSeconds())
     
        ' Eventually reload configuration
        If CurrentSecond Mod ReloadConfigFrequency = 0 Then
          RefreshSettings()
        End If
     
        ' Analyze the list of hosts to be pinged 
        Dim dr As DataRow
        For Each dr In dtHosts.Rows
          ' Check if time is come to ping the specific host
          If CurrentSecond Mod CInt(dr("PingFreq")) = 0 Then
            ' Ping the specific host
            Dim IsAlive As Boolean = HostIsAlive(dr("Host"))
            Dim LastStatus As String = HostLastStatus(dr("Host"))
            If LastStatus = "" OrElse _
              (LastStatus = "ON" And Not IsAlive) OrElse _
              (LastStatus = "OFF" And IsAlive) Then
              StoreStatusTransition(dr("Host"), IsAlive)
            End If
          End If
     
        Next
     
      End Sub
     
      Private Function HostIsAlive(ByVal Host As String) As Boolean
        Dim pingSender As New Ping
        Dim reply As PingReply
        Try
          reply = pingSender.Send(Host)
          If reply.Status = IPStatus.Success Then
            Return True
          Else
            Return False
          End If
        Catch ex As Exception
          Return False
        End Try
      End Function
     
      Private Function HostLastStatus(ByVal Host As String) As String
        Dim cnn As New SqlConnection(ConnStr)
        Dim cmd As SqlCommand = cnn.CreateCommand
        cmd.CommandText = "SELECT TOP 1 Status FROM PingLog WHERE Host='" & Host & "' ORDER BY RecordingDate DESC"
        cnn.Open()
        Dim obj As Object = cmd.ExecuteScalar
        cnn.Close()
        Try
          Return obj.ToString().ToUpper()
        Catch
          Return ""
        End Try
      End Function
     
      Private Sub StoreStatusTransition(ByVal Host As String, ByVal IsAlive As Boolean)
        Dim cnn As New SqlConnection(ConnStr)
        Dim cmd As SqlCommand = cnn.CreateCommand
        If IsAlive Then
          cmd.CommandText = "INSERT PingLog (Host, Status, RecordingDate) VALUES ('" & Host & "', 'ON', GETDATE())"
        Else
          cmd.CommandText = "INSERT PingLog (Host, Status, RecordingDate) VALUES ('" & Host & "', 'OFF', GETDATE())"
        End If
        Try
          cnn.Open()
          cmd.ExecuteNonQuery()
        Catch
        Finally
          Try
            cnn.Close()
          Catch
          End Try
        End Try
      End Sub
     
    End Class

  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
    ce code manque à mon gout de try catch
    et en cas d'erreur non catchée, le thread s'arrete et donc le service aussi


    sinon pourquoi ne pas faire le traitement sur le onstart plutot que de lancer un thread secondaire pour ne rien faire sur le 1er ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    ce code manque à mon gout de try catch
    et en cas d'erreur non catchée, le thread s'arrete et donc le service aussi


    sinon pourquoi ne pas faire le traitement sur le onstart plutot que de lancer un thread secondaire pour ne rien faire sur le 1er ?
    à quel niveau le try et le catch manquent ? parcque j'en ai deja fait au niveau des fonctions suceptibles de me causer des problems..

    et j'ai pas du tout compris ta deusieme remarque

  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
    Citation Envoyé par halloula Voir le message
    à quel niveau le try et le catch manquent ? parcque j'en ai deja fait au niveau des fonctions suceptibles de me causer des problemes..
    tout est susceptible de causer des problèmes !
    un try catch englobant le loop par exemple, comme ca toutes les erreurs sont interceptables (et logables accessoirement)

    Citation Envoyé par halloula Voir le message
    et j'ai pas du tout compris ta deusieme remarque
    dans la sub onstart, tu créé un new thread qui loop
    pourquoi ne pas looper directement dans onstart ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    oui,je vois maintenant ce que tu veux dire.
    je vais changer ca en esperant que ca marche..
    merci en tous cas.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    ben non rien

    quelqu'un aurait une idée d'ou peut venir le problem ?
    et me sortez pas "ton code marche à merveille",parceque là à coup sur, je saurais que c'est un poisson d'avril (oui on est le 1er avril )

  7. #7
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Il faut mettre un objet timer, et le mettre enable dans la code start et disable dans le code stop.

    Chez moi ça marche

Discussions similaires

  1. [Débutant] Probleme avec le service RAS sous Windows CE 6.0
    Par midou256 dans le forum Windows Embedded
    Réponses: 0
    Dernier message: 17/04/2014, 11h26
  2. problemes avec un Service windows
    Par mattmax dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/02/2014, 13h30
  3. [windows serveur 2003] probleme avec le service DNS
    Par djilos dans le forum Windows Serveur
    Réponses: 17
    Dernier message: 02/01/2009, 15h38
  4. probleme avec Analysis Services de sql server 2000
    Par thefaycal dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2006, 16h41
  5. probleme avec les hook windows
    Par stone dans le forum Windows
    Réponses: 1
    Dernier message: 30/12/2005, 10h49

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