Imports System.ServiceModel Imports System.ServiceProcess Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Database Imports DigitalData.Modules Imports System.ServiceModel.Description Imports DigitalData.Modules.Config Public Class WindowsService Inherits ServiceBase Private _ServiceHost As ServiceHost Private _LogConfig As LogConfig Private _Logger As Logger Private _Firebird As Firebird Private _MSSQL_ECM As MSSQLServer Private _MSSQL_IDB As MSSQLServer Private _ConfigManager As ConfigManager(Of Config) Private _Config As Config Private _Path As EDMI.File.Path Private _Archive As EDMI.File.Archive Private _Filesystem As Filesystem.File Private _Global As GlobalState Public Sub New() ServiceName = SERVICE_NAME End Sub Public Shared Sub Main() Run(New WindowsService()) End Sub Protected Overrides Sub OnStart(ByVal args As String()) Try Dim oServicePath As String = AppDomain.CurrentDomain.BaseDirectory _LogConfig = New LogConfig(LogConfig.PathType.CustomPath, oServicePath) _Logger = _LogConfig.GetLogger() _Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME) _Logger.Info("ServiceDirectory: {0}", oServicePath) _Logger.Info("Loading Config") _ConfigManager = New ConfigManager(Of Config)(_LogConfig, oServicePath) _Config = _ConfigManager.Config _LogConfig.Debug = _ConfigManager.Config.Debug _Logger.Debug("Connecting to Databases") _Firebird = StartFirebird() _MSSQL_ECM = StartMSSQL_ECM() _MSSQL_IDB = StartMSSQL_IDB() _Logger.Debug("Initializing EDMI Functions") _Archive = New EDMI.File.Archive(_LogConfig) _Filesystem = New Filesystem.File(_LogConfig) _Global = New GlobalState(_LogConfig, _MSSQL_IDB) _Logger.Debug("Loading Objectstores") _Global.LoadObjectStores() _Logger.Debug("Preparing WCF ServiceHost") EDMIService.MSSQL_ECM = _MSSQL_ECM EDMIService.MSSQL_IDB = _MSSQL_IDB EDMIService.Firebird = _Firebird EDMIService.LogConfig = _LogConfig EDMIService.AppConfig = _Config EDMIService.EDMIArchive = _Archive EDMIService.Filesystem = _Filesystem EDMIService.GlobalState = _Global _Logger.Debug("Starting WCF ServiceHost") _ServiceHost = New ServiceHost(GetType(EDMIService)) _ServiceHost.Open() _Logger.Info("WCF ServiceHost started") _Logger.Info("Service {0} successfully started", SERVICE_DISPLAY_NAME) Catch ex As Exception _Logger.Error(ex, "Failed to start the service host!") GracefullyStop() End Try End Sub Private Function StartFirebird() As Firebird _Logger.Debug("Connecting to Firebird") Dim oFirebird = New Firebird( _LogConfig, _Config.Firebird_Datasource, _Config.Firebird_DatabaseName, _Config.Firebird_DatabaseUser, _Config.Firebird_DatabasePassword ) _Logger.Info("Database connection established.") Return oFirebird End Function Private Function StartMSSQL_ECM() As MSSQLServer _Logger.Debug("Connecting to ECM MSSQL") Dim oMSSQL = New MSSQLServer(_LogConfig, _Config.ConnectionString_ECM) _Logger.Info("Database connection to ECM Database established.") Return oMSSQL End Function Private Function StartMSSQL_IDB() As MSSQLServer _Logger.Debug("Connecting to IDB MSSQL") Dim oMSSQL = New MSSQLServer(_LogConfig, _Config.ConnectionString_IDB) _Logger.Info("Database connection to IDB Database established.") Return oMSSQL End Function Protected Overrides Sub OnStop() GracefullyStop() End Sub Private Sub GracefullyStop() _Logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME) If _ServiceHost IsNot Nothing Then _ServiceHost.Close() _ServiceHost = Nothing End If End Sub End Class