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