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