105 lines
3.9 KiB
VB.net
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
|