From 681583b3f062b25a46e09486c7de5475f284856b Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 8 Dec 2023 14:30:03 +0100 Subject: [PATCH] add service --- EnvelopeGenerator.Service/App.config | 16 ++ EnvelopeGenerator.Service/Config.vb | 9 + .../EnvelopeGenerator.Service.vbproj | 180 ++++++++++++++++++ EnvelopeGenerator.Service/LogProvider.vb | 34 ++++ .../My Project/Application.Designer.vb | 13 ++ .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 ++++ .../My Project/Resources.Designer.vb | 63 ++++++ .../My Project/Resources.resx | 117 ++++++++++++ .../My Project/Settings.Designer.vb | 73 +++++++ .../My Project/Settings.settings | 5 + .../ProjectInstaller.Designer.vb | 47 +++++ .../ProjectInstaller.resx | 129 +++++++++++++ EnvelopeGenerator.Service/ProjectInstaller.vb | 16 ++ EnvelopeGenerator.Service/Scheduler.vb | 68 +++++++ EnvelopeGenerator.Service/Service.Designer.vb | 48 +++++ EnvelopeGenerator.Service/Service.vb | 72 +++++++ EnvelopeGenerator.Service/packages.config | 6 + EnvelopeGenerator.sln | 6 + 19 files changed, 947 insertions(+) create mode 100644 EnvelopeGenerator.Service/App.config create mode 100644 EnvelopeGenerator.Service/Config.vb create mode 100644 EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj create mode 100644 EnvelopeGenerator.Service/LogProvider.vb create mode 100644 EnvelopeGenerator.Service/My Project/Application.Designer.vb create mode 100644 EnvelopeGenerator.Service/My Project/Application.myapp create mode 100644 EnvelopeGenerator.Service/My Project/AssemblyInfo.vb create mode 100644 EnvelopeGenerator.Service/My Project/Resources.Designer.vb create mode 100644 EnvelopeGenerator.Service/My Project/Resources.resx create mode 100644 EnvelopeGenerator.Service/My Project/Settings.Designer.vb create mode 100644 EnvelopeGenerator.Service/My Project/Settings.settings create mode 100644 EnvelopeGenerator.Service/ProjectInstaller.Designer.vb create mode 100644 EnvelopeGenerator.Service/ProjectInstaller.resx create mode 100644 EnvelopeGenerator.Service/ProjectInstaller.vb create mode 100644 EnvelopeGenerator.Service/Scheduler.vb create mode 100644 EnvelopeGenerator.Service/Service.Designer.vb create mode 100644 EnvelopeGenerator.Service/Service.vb create mode 100644 EnvelopeGenerator.Service/packages.config diff --git a/EnvelopeGenerator.Service/App.config b/EnvelopeGenerator.Service/App.config new file mode 100644 index 00000000..c5280b07 --- /dev/null +++ b/EnvelopeGenerator.Service/App.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/EnvelopeGenerator.Service/Config.vb b/EnvelopeGenerator.Service/Config.vb new file mode 100644 index 00000000..31e2bf4f --- /dev/null +++ b/EnvelopeGenerator.Service/Config.vb @@ -0,0 +1,9 @@ +Imports DigitalData.Modules.Config.ConfigAttributes + +Public Class Config + + Public Property ConnectionString As String = "" + + Public Property Debug As Boolean = False + Public Property IntervalInMin As Integer = 1 +End Class diff --git a/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj new file mode 100644 index 00000000..54b8f039 --- /dev/null +++ b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj @@ -0,0 +1,180 @@ + + + + + Debug + AnyCPU + {83ED2617-B398-4859-8F59-B38F8807E83E} + WinExe + EnvelopeGenerator.Service.Service + EnvelopeGenerator.Service + EnvelopeGenerator.Service + 512 + Console + v4.6.2 + true + + + + AnyCPU + true + full + true + true + bin\Debug\ + EnvelopeGenerator.Service.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + AnyCPU + pdbonly + false + true + true + bin\Release\ + EnvelopeGenerator.Service.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + On + + + Binary + + + Off + + + On + + + + ..\..\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll + + + ..\..\DDModules\Config\bin\Debug\DigitalData.Modules.Config.dll + + + False + ..\..\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll + + + False + ..\..\DDModules\Encryption\bin\Debug\DigitalData.Modules.Encryption.dll + + + False + ..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll + + + False + ..\..\DDModules\Messaging\bin\Debug\DigitalData.Modules.Messaging.dll + + + False + D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll + + + + ..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + + ..\packages\NLog.5.0.5\lib\net46\NLog.dll + + + ..\packages\Quartz.3.8.0\lib\net462\Quartz.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Service.vb + + + Component + + + True + Application.myapp + True + + + ProjectInstaller.vb + + + Component + + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + ProjectInstaller.vb + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + {6ea0c51f-c2b1-4462-8198-3de0b32b74f8} + EnvelopeGenerator.Common + + + + \ No newline at end of file diff --git a/EnvelopeGenerator.Service/LogProvider.vb b/EnvelopeGenerator.Service/LogProvider.vb new file mode 100644 index 00000000..2ecbe44f --- /dev/null +++ b/EnvelopeGenerator.Service/LogProvider.vb @@ -0,0 +1,34 @@ +Imports Quartz.Logging + +Public Class LogProvider + Implements ILogProvider + + Private ReadOnly Logger As DigitalData.Modules.Logging.Logger + + Public Sub New(Logger As DigitalData.Modules.Logging.Logger) + MyBase.New() + Me.Logger = Logger + End Sub + + Public Function OpenNestedContext(message As String) As IDisposable Implements ILogProvider.OpenNestedContext + Throw New NotImplementedException() + End Function + + Public Function OpenMappedContext(key As String, value As Object, Optional destructure As Boolean = False) As IDisposable Implements ILogProvider.OpenMappedContext + Throw New NotImplementedException() + End Function + + Private Function GetLogger(name As String) As Logger Implements ILogProvider.GetLogger + Return Function(level, func, exception, parameters) + If exception IsNot Nothing Then + Logger.Error(exception) + ElseIf level >= LogLevel.Debug AndAlso func IsNot Nothing Then + Logger.Debug(func(), parameters) + ElseIf level >= LogLevel.Info AndAlso func IsNot Nothing Then + Logger.Info(func(), parameters) + End If + + Return True + End Function + End Function +End Class \ No newline at end of file diff --git a/EnvelopeGenerator.Service/My Project/Application.Designer.vb b/EnvelopeGenerator.Service/My Project/Application.Designer.vb new file mode 100644 index 00000000..8ab460ba --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' Dieser Code wurde von einem Tool generiert. +' Laufzeitversion:4.0.30319.42000 +' +' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +' der Code erneut generiert wird. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/EnvelopeGenerator.Service/My Project/Application.myapp b/EnvelopeGenerator.Service/My Project/Application.myapp new file mode 100644 index 00000000..602de37e --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 3 + true + diff --git a/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb b/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..5f4fafd8 --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' Allgemeine Informationen über eine Assembly werden über die folgenden +' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +' die einer Assembly zugeordnet sind. + +' Werte der Assemblyattribute überprüfen + + + + + + + + + + +'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird. + + +' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +' +' Hauptversion +' Nebenversion +' Buildnummer +' Revision +' +' Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +' übernehmen, indem Sie "*" eingeben: +' + + + diff --git a/EnvelopeGenerator.Service/My Project/Resources.Designer.vb b/EnvelopeGenerator.Service/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b08dad5c --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' Dieser Code wurde von einem Tool generiert. +' Laufzeitversion:4.0.30319.42000 +' +' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +' der Code erneut generiert wird. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + ''' + ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EnvelopeGenerator.Service.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/EnvelopeGenerator.Service/My Project/Resources.resx b/EnvelopeGenerator.Service/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/EnvelopeGenerator.Service/My Project/Settings.Designer.vb b/EnvelopeGenerator.Service/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f904eda1 --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' Dieser Code wurde von einem Tool generiert. +' Laufzeitversion:4.0.30319.42000 +' +' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +' der Code erneut generiert wird. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "Automatische My.Settings-Speicherfunktion" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.EnvelopeGenerator.Service.My.MySettings + Get + Return Global.EnvelopeGenerator.Service.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/EnvelopeGenerator.Service/My Project/Settings.settings b/EnvelopeGenerator.Service/My Project/Settings.settings new file mode 100644 index 00000000..f7f176ac --- /dev/null +++ b/EnvelopeGenerator.Service/My Project/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/EnvelopeGenerator.Service/ProjectInstaller.Designer.vb b/EnvelopeGenerator.Service/ProjectInstaller.Designer.vb new file mode 100644 index 00000000..2d263240 --- /dev/null +++ b/EnvelopeGenerator.Service/ProjectInstaller.Designer.vb @@ -0,0 +1,47 @@ + Partial Class ProjectInstaller + Inherits System.Configuration.Install.Installer + + 'Installer überschreibt den Löschvorgang zum Bereinigen der Komponentenliste. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Wird vom Komponenten-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Komponenten-Designer erforderlich. + 'Das Bearbeiten ist mit dem Komponenten-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + _ + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller() + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller() + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.Description = "Finalizes Documents for Envelope Generator" + Me.ServiceInstaller1.DisplayName = "Digital Data Envelope Generator Service" + Me.ServiceInstaller1.ServiceName = "DDEnvelopeGeneratorService" + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1}) + + End Sub + + Friend WithEvents ServiceProcessInstaller1 As ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As ServiceProcess.ServiceInstaller +End Class diff --git a/EnvelopeGenerator.Service/ProjectInstaller.resx b/EnvelopeGenerator.Service/ProjectInstaller.resx new file mode 100644 index 00000000..e1b81e8f --- /dev/null +++ b/EnvelopeGenerator.Service/ProjectInstaller.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 56 + + + 197, 17 + + + False + + \ No newline at end of file diff --git a/EnvelopeGenerator.Service/ProjectInstaller.vb b/EnvelopeGenerator.Service/ProjectInstaller.vb new file mode 100644 index 00000000..733dfc0c --- /dev/null +++ b/EnvelopeGenerator.Service/ProjectInstaller.vb @@ -0,0 +1,16 @@ +Imports System.ComponentModel +Imports System.Configuration.Install + +Public Class ProjectInstaller + + Public Sub New() + MyBase.New() + + 'Dieser Aufruf ist für den Komponenten-Designer erforderlich. + InitializeComponent() + + 'Initialisierungscode nach dem Aufruf von InitializeComponent hinzufügen + + End Sub + +End Class diff --git a/EnvelopeGenerator.Service/Scheduler.vb b/EnvelopeGenerator.Service/Scheduler.vb new file mode 100644 index 00000000..51e0429d --- /dev/null +++ b/EnvelopeGenerator.Service/Scheduler.vb @@ -0,0 +1,68 @@ +Imports System.Collections.Specialized +Imports DigitalData.Modules.Base +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging +Imports EnvelopeGenerator.Common.Jobs +Imports Quartz + +Public Class Scheduler + Inherits BaseClass + + Private Scheduler As IScheduler + Private ConnectionString As String + + Private Const JobName = "CertificateDocumentJob" + + Public Sub New(pLogConfig As LogConfig, pConnectionString As String) + MyBase.New(pLogConfig) + ConnectionString = pConnectionString + End Sub + + Public Async Function Start(pInterval As Integer) As Task + Logger.Debug("Starting Scheduler..") + + Dim oProperties As New NameValueCollection() + + Scheduler = Await SchedulerBuilder.Create(oProperties). + UseDefaultThreadPool(Sub(x) x.MaxConcurrency = 5). + BuildScheduler() + + Dim oJobKey = New JobKey(JobName) + Dim oJobData = New JobDataMap() From { + {Common.Constants.LOGCONFIG, LogConfig}, + {Common.Constants.DATABASE, ConnectionString} + } + + Logger.Debug("Initialized Job [{0}]", JobName) + + Dim oJob As IJobDetail = JobBuilder.Create(Of CertificateDocumentJob). + UsingJobData(oJobData). + WithIdentity(oJobKey). + Build() + + Dim oTrigger As ITrigger = TriggerBuilder.Create(). + ForJob(oJobKey). + WithIdentity($"{JobName}-trigger"). + WithSimpleSchedule(Sub(s) s. + RepeatForever(). + WithIntervalInMinutes(pInterval)). + Build() + + Logger.Debug("Initialized Trigger") + + Await Scheduler.ScheduleJob(oJob, oTrigger) + + Logger.Debug("Job scheduled.") + + Await Scheduler.Start() + + Logger.Info("Scheduler started!") + End Function + + Public Async Function [Stop]() As Task + Logger.Info("Stopping scheduler..") + Await Scheduler.Shutdown() + Logger.Info("Scheduler stopped!") + End Function + +End Class diff --git a/EnvelopeGenerator.Service/Service.Designer.vb b/EnvelopeGenerator.Service/Service.Designer.vb new file mode 100644 index 00000000..e5973b23 --- /dev/null +++ b/EnvelopeGenerator.Service/Service.Designer.vb @@ -0,0 +1,48 @@ +Imports System.ServiceProcess + + +Partial Class Service + Inherits System.ServiceProcess.ServiceBase + + 'UserService überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + ' Der Haupteinstiegspunkt für den Prozess + + + Shared Sub Main() + Dim ServicesToRun() As System.ServiceProcess.ServiceBase + + ' Innerhalb eines Prozesses können mehrere NT-Dienste ausgeführt werden. Um einen + ' weiteren Dienst zu diesem Prozess hinzuzufügen, ändern Sie die folgende Zeile, + ' um ein zweites Dienstobjekt zu erstellen. Zum Beispiel + ' + ' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService} + ' + ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service} + + System.ServiceProcess.ServiceBase.Run(ServicesToRun) + End Sub + + 'Wird vom Komponenten-Designer benötigt. + Private components As System.ComponentModel.IContainer + + ' Hinweis: Die folgende Prozedur ist für den Komponenten-Designer erforderlich. + ' Das Bearbeiten ist mit dem Komponenten-Designer möglich. + ' Das Bearbeiten mit dem Code-Editor ist nicht möglich. + + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + Me.ServiceName = "EnvelopeGenerator.Service" + End Sub + +End Class diff --git a/EnvelopeGenerator.Service/Service.vb b/EnvelopeGenerator.Service/Service.vb new file mode 100644 index 00000000..049b8639 --- /dev/null +++ b/EnvelopeGenerator.Service/Service.vb @@ -0,0 +1,72 @@ +Imports System.Timers +Imports System.IO +Imports System.ComponentModel +Imports DigitalData.Modules.Base +Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Messaging +Imports DigitalData.Modules.Config + +Public Class Service + Private Logger As Logger + Private LogConfig As LogConfig + Private ConfigManager As ConfigManager(Of Config) + Private Config As Config + Private Database As MSSQLServer + + Private Scheduler As Scheduler + + Protected Overrides Async Sub OnStart(ByVal args() As String) + Try + ' === Initialize Logger === + Dim oLogPath = Path.Combine(My.Application.Info.DirectoryPath, "Log") + LogConfig = New LogConfig(LogConfig.PathType.CustomPath, oLogPath, Nothing, "Digital Data", "EmailGenerator.Service") + + ' === Initialize Config === + ConfigManager = New ConfigManager(Of Config)(LogConfig, My.Application.Info.DirectoryPath) + Config = ConfigManager.Config + + LogConfig.Debug = Config.Debug + + Logger = LogConfig.GetLogger() + Logger.Info($"DEBUG = {LogConfig.Debug}") + + Logger.Info("Starting [{0}]", ServiceName) + + ' === Initialize Databases === + + Logger.Info("Inititalize Databases") + + If Config.ConnectionString <> String.Empty Then + Database = New MSSQLServer(LogConfig, Config.ConnectionString) + + If Database.DBInitialized = False Then + Logger.Warn("MSSQL Connection could not be established. Check the Error Log") + End If + End If + + ' === Initialize Queue === + + Logger.Debug("Inititalize Quartz") + + Scheduler = New Scheduler(LogConfig, Config.ConnectionString) + Await Scheduler.Start(Config.IntervalInMin) + + Logger.Info("Started [{0}] !", ServiceName) + + Catch ex As Exception + Logger.Error(ex) + End Try + End Sub + + Protected Overrides Async Sub OnStop() + Try + Logger.Info("Stopping [{0}] !", ServiceName) + Await Scheduler.Stop() + Logger.Info("Stopped [{0}] !", ServiceName) + Catch ex As Exception + Logger.Error(ex) + End Try + + End Sub +End Class diff --git a/EnvelopeGenerator.Service/packages.config b/EnvelopeGenerator.Service/packages.config new file mode 100644 index 00000000..18eb1a41 --- /dev/null +++ b/EnvelopeGenerator.Service/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/EnvelopeGenerator.sln b/EnvelopeGenerator.sln index a3b35620..28071dbb 100644 --- a/EnvelopeGenerator.sln +++ b/EnvelopeGenerator.sln @@ -11,6 +11,8 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EnvelopeGenerator.Common", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EnvelopeGenerator.Web", "EnvelopeGenerator.Web\EnvelopeGenerator.Web.csproj", "{5E0E17C0-FF5A-4246-BF87-1ADD85376A27}" EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EnvelopeGenerator.Service", "EnvelopeGenerator.Service\EnvelopeGenerator.Service.vbproj", "{83ED2617-B398-4859-8F59-B38F8807E83E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,6 +35,10 @@ Global {5E0E17C0-FF5A-4246-BF87-1ADD85376A27}.Debug|Any CPU.Build.0 = Debug|Any CPU {5E0E17C0-FF5A-4246-BF87-1ADD85376A27}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E0E17C0-FF5A-4246-BF87-1ADD85376A27}.Release|Any CPU.Build.0 = Release|Any CPU + {83ED2617-B398-4859-8F59-B38F8807E83E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83ED2617-B398-4859-8F59-B38F8807E83E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83ED2617-B398-4859-8F59-B38F8807E83E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83ED2617-B398-4859-8F59-B38F8807E83E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE