90 lines
2.8 KiB
VB.net
90 lines
2.8 KiB
VB.net
Imports System.ServiceModel
|
|
Imports System.ServiceProcess
|
|
Imports System.Configuration
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Database
|
|
Imports DigitalData.Modules.Database.Exceptions
|
|
|
|
Public Class EDMWindowsService
|
|
Inherits ServiceBase
|
|
|
|
Private _serviceHost As ServiceHost = Nothing
|
|
Private _edmService As EDMService = Nothing
|
|
|
|
Private _logConfig As LogConfig
|
|
Private _logger As Logger
|
|
Private _db As Firebird
|
|
Private _clientsConnected As Integer = 0
|
|
Private _clients As New List(Of Session)
|
|
Private _config As AppConfig
|
|
|
|
Public Sub New()
|
|
ServiceName = SERVICE_NAME
|
|
End Sub
|
|
|
|
Public Shared Sub Main()
|
|
Run(New EDMWindowsService())
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnStart(ByVal args As String())
|
|
Try
|
|
AppConfig.Load()
|
|
|
|
_logConfig = New LogConfig(LogConfig.PathType.CustomPath, "E:\EDMService")
|
|
_logger = _logConfig.GetLogger()
|
|
|
|
_logger.Info("Service {0} is starting", SERVICE_DISPLAY_NAME)
|
|
_logger.Info("Connecting to database")
|
|
|
|
_db = New Firebird(
|
|
_logConfig,
|
|
AppConfig.FirebirdDataSource,
|
|
AppConfig.FirebirdDatabase,
|
|
AppConfig.FirebirdUser,
|
|
AppConfig.FirebirdPassword
|
|
)
|
|
|
|
_logger.Info("Successfully connected to database!")
|
|
|
|
AddHandler EDMService.ClientConnectedEvent, AddressOf EDMService_ClientConnected
|
|
AddHandler EDMService.ClientDisconnectedEvent, AddressOf EDMService_ClientDisonnected
|
|
|
|
EDMService.Database = _db
|
|
EDMService.LogConfig = _logConfig
|
|
EDMService.AppConfig = _config
|
|
|
|
_logger.Info("Starting the WCF Service")
|
|
|
|
_serviceHost = New ServiceHost(GetType(EDMService))
|
|
_serviceHost.Open()
|
|
|
|
_logger.Info("Successfully started the WCF Service!")
|
|
|
|
_logger.Info("Service {0} successfully started!", SERVICE_DISPLAY_NAME)
|
|
Catch ex As Exception
|
|
_logger.Error(ex, "Failed to start the service host!")
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub EDMService_ClientDisonnected(sender As Object, e As Session)
|
|
_clientsConnected -= 1
|
|
_clients.Remove(e)
|
|
_logger.Info("Client {0}/{1} disconnected! Total {2}", e.Username, e.SessionId, _clientsConnected)
|
|
End Sub
|
|
|
|
Private Sub EDMService_ClientConnected(sender As Object, e As Session)
|
|
_clientsConnected += 1
|
|
_clients.Add(e)
|
|
_logger.Info("Client {0}/{1} connected! Total {2}", e.Username, e.SessionId, _clientsConnected)
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnStop()
|
|
If _serviceHost IsNot Nothing Then
|
|
_serviceHost.Close()
|
|
_serviceHost = Nothing
|
|
End If
|
|
_logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME)
|
|
End Sub
|
|
End Class
|
|
|