2022-12-20 12:00:15 +01:00

105 lines
3.9 KiB
VB.net

Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Messaging.WCF
Imports DigitalData.Modules.Windream
Public Class Service
Private ReadOnly ServicePath As String = My.Application.Info.DirectoryPath
Private ReadOnly LogPath As String = IO.Path.Combine(ServicePath, "Log")
Private LogConfig As LogConfig
Private Logger As Logger
Private ConfigManager As ConfigManager(Of Config)
Private Config As Config
Private ServiceHost As WCF.ServiceHost(Of WCF.JobRunner)
Private Scheduler As Scheduler.JobScheduler
Private Database As MSSQLServer
Private State As State
Private Windream As Windream
Protected Overrides Async Sub OnStart(ByVal args() As String)
' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge
' ausführen, damit der Dienst gestartet werden kann.
Try
' intialize logging
LogConfig = New LogConfig(LogConfig.PathType.CustomPath, LogPath, CompanyName:="Digital Data", ProductName:="ECM Job Runner")
Logger = LogConfig.GetLogger()
Logger.Info("Service [{0}] is starting.", ServiceName)
' initialize config
ConfigManager = New ConfigManager(Of Config)(LogConfig, ServicePath)
Config = ConfigManager.Config
' initialize database
Database = New MSSQLServer(LogConfig, Config.ConnectionString)
' set logging debug flag from config
LogConfig.Debug = Config.Debug
' Initialize Windream
Dim oWindream = Config.Windream
Windream = New Windream(LogConfig, True, oWindream.DriveLetter, "\\windream\objects\", True,
oWindream.Server, oWindream.Username, oWindream.Password, oWindream.Domain)
' initialize global state
State = New State(LogConfig, Database, Windream)
' start the scheduler
Scheduler = New Scheduler.JobScheduler(LogConfig, Database, State, Windream)
If Await Scheduler.Start() Then
Logger.Info("Scheduler started!")
Else
Logger.Warn("Scheduler could not be started!")
End If
' configure job runner
WCF.JobRunner.State = State
WCF.JobRunner.LogConfig = LogConfig
WCF.JobRunner.Database = Database
WCF.JobRunner.Scheduler = Scheduler
' start the service
Dim oAddresses() As Uri = {Binding.GetAddress(Config.Host, Config.Port, Config.Name)}
Logger.Info("Starting WCF Endpoint at [{0}]", oAddresses.First.ToString)
ServiceHost = New WCF.ServiceHost(Of WCF.JobRunner)(oAddresses)
ServiceHost.EnableMetadataExchange(True)
Logger.Debug("Listing Endpoints:")
For Each oEndpoint In ServiceHost.Description.Endpoints
Logger.Debug("Name: {0}", oEndpoint.Name)
Logger.Debug("Address: {0}", oEndpoint.Address.ToString)
Logger.Debug("Listen Uri: {0}", oEndpoint.ListenUri.AbsoluteUri)
Logger.Debug("Binding: {0}", oEndpoint.Binding.Name)
Logger.Debug("Contract: {0}", oEndpoint.Contract.Name)
Next
ServiceHost.Open()
Logger.Info("WCF Endpoint started!")
Catch ex As Exception
Logger.Warn("Service [{0}] could not be started!", ServiceName)
Logger.Error(ex)
End Try
End Sub
Protected Overrides Async Sub OnStop()
' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
Try
Logger.Info("Service [{0}] is stopping.", ServiceName)
Await Scheduler.Shutdown()
Catch ex As Exception
Logger.Warn("Service [{0}] could not be stopped!", ServiceName)
Logger.Error(ex)
End Try
End Sub
End Class