Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Win Service на vb Добавлено: 27.11.09 12:13  

Автор вопроса:  avdey | ICQ: 219571279 
Суть в том, что появилась необходимость написать прогу которая запускалась бы как служба. Прога принимает входящие TCP подключения.
Вот код:
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports Microsoft.VisualBasic

Public Class Service1
    Public Sub Parse(ByVal str As String)
        If str.ToLower = "shutdown" Then
            Log("Init Reboot...")
            MsgBox("reboot")
        End If
        If str.ToLower = "dismount" Then
            Log("Volume skiped")
            MsgBox("Dism")
        End If
    End Sub
    Public Sub StartListen()
        Dim server As TcpListener
        server = Nothing
        Try
            Dim port As Int32 = 11000
            Dim localaddr As IPAddress
            Using sr As IO.StreamReader = New IO.StreamReader(My.Application.Info.DirectoryPath + "\ipbind.conf")
                localaddr = IPAddress.Parse(sr.ReadLine)
                sr.Close()
            End Using
            server = New TcpListener(localaddr, port)

            ' Start listening for client requests.
            server.Start()
            Log("Start listening on " + localaddr.ToString + ":" + port.ToString)

            ' Buffer for reading data
            Dim bytes(1024) As Byte
            Dim data As String = Nothing

            ' Enter the listening loop.
            While True
                
                Log("Waiting for a connection... ")
                Dim client As TcpClient = server.AcceptTcpClient()
                Log("Connected!")
                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)
                    'data = data.ToUpper()
                    'Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)

                    ' Send back a response.
                    'stream.Write(msg, 0, msg.Length)
                    i = stream.Read(bytes, 0, bytes.Length)

                End While
                Parse(data)
                ' Shutdown and end connection
                client.Close()
            End While
        Catch e As SocketException
            Log("SocketException: " + e.ToString)
        Finally
            server.Stop()
        End Try
    End Sub

    Public Sub Log(ByVal state As String)
        Using tw As IO.StreamWriter = IO.File.AppendText(My.Application.Info.DirectoryPath + "\Log.txt")
            tw.WriteLine(My.Computer.Clock.LocalTime + "  " + state)
            tw.Close()
        End Using
    End Sub
    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Add code here to start your service. This method should set things
        ' in motion so your service can do its work.
        If MsgBox("Start?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
            StartListen()
        Else
            End
        End If
    End Sub

    Protected Overrides Sub OnStop()
        ' Add code here to perform any tear-down necessary to stop your service.
        Log("Stop service")
    End Sub

End Class

Прога инсталится как служба через installutil, но при запуске службы net start service1 пишет что служба запускается, а после 30 секунд соответственно ошибка «Ошибка 1053: Служба не ответила на запрос своевременно», в оснастке "Службы" пишет "Запуск". Но!!! служба принимает входящие подключения и отвечает на них!
Всю голову сломал, в нете инфы нормальной не нарыл. Есть у кого-нибудь мысли?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 27.11.09 13:50
Есть у кого-нибудь мысли?

это деццкая ошибка.. слушатель надо запускать в отдельном потоке а не в основном..

Ответить

Номер ответа: 2
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #2 Добавлено: 27.11.09 13:52
Решил проблему таймером, слушать начинает через 30 секунд после запуска.
это деццкая ошибка

ну, я не програмил года полтора)))

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 27.11.09 14:07
слушать начинает через 30 секунд после запуска.

а после 30 секунд соответственно ошибка «Ошибка 1053: Служба не ответила на запрос своевременно»


ты не находишь это странным? :=)

Ответить

Номер ответа: 4
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #4 Добавлено: 27.11.09 14:10
ну прост диспетчер служб работает так, если через 30 сек после запуска служба не отвечает, то вылазит эта ошибка)
ну а я от балды поставил в таймере 30 сек) щас все фуричит чики пуки)

Ответить

Номер ответа: 5
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #5 Добавлено: 27.11.09 14:14
если через 30 сек после запуска

вернее : если в течении 30 сек после запуска служба не отвечает, то вылазит эта ошибка)
собственно, вот эта строчка и вешала мою службу
  1. Dim client As TcpClient = server.AcceptTcpClient()

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам