Страница: 1 |
Страница: 1 |
Вопрос: Win Service на vb
Добавлено: 27.11.09 12:13
Автор вопроса: avdey | ICQ: 219571279
Суть в том, что появилась необходимость написать прогу которая запускалась бы как служба. Прога принимает входящие TCP подключения.
Вот код:
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
ты не находишь это странным? :
Номер ответа: 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 сек после запуска служба не отвечает, то вылазит эта ошибка)
собственно, вот эта строчка и вешала мою службу