EDMIService: Reload Config every 5 mins and change tracelogging/debug logging based on debug option in config

This commit is contained in:
Jonathan Jenne 2021-04-06 16:39:14 +02:00
parent 2cbafff539
commit 33d3af4de8
5 changed files with 64 additions and 5 deletions

View File

@ -4,7 +4,10 @@
</configSections>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information,ActivityTracing" propagateActivity="true">
<source name="System.ServiceModel"
switchValue="Warning"
switchType="DigitalData.Services.EDMIService.TraceSwitch, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>

View File

@ -133,6 +133,7 @@
<Compile Include="Helpers\Exceptions.vb" />
<Compile Include="Helpers\DatabaseResult.vb" />
<Compile Include="EDMIService.vb" />
<Compile Include="Helpers\TraceSwitch.vb" />
<Compile Include="Scheduler\Scheduler.vb" />
<Compile Include="Scheduler\DatatableJob.vb" />
<Compile Include="Scheduler\JobListener.vb" />

View File

@ -0,0 +1,34 @@
Public Class TraceSwitch
Inherits SourceSwitch
Public Sub New(Name As String)
MyBase.New("System.ServiceModel")
Level = SourceLevels.Information
WcfTracesController.Instance.LevelController = AddressOf WcfTracesLevelController
End Sub
Public Sub WcfTracesLevelController(ByVal level As SourceLevels)
Me.Level = level
End Sub
End Class
Public Class WcfTracesController
Private Shared Controller As WcfTracesController = Nothing
Private Sub New()
End Sub
Public Delegate Sub TraceLevelController(ByVal level As SourceLevels)
Public LevelController As TraceLevelController
Public Shared ReadOnly Property Instance As WcfTracesController
Get
If Controller Is Nothing Then
Controller = New WcfTracesController()
End If
Return Controller
End Get
End Property
End Class

View File

@ -9,15 +9,11 @@ Public Class ServiceHost(Of T)
MyBase.New(GetType(T), baseAddresses)
End Sub
Public Sub EnableMetadataExchange(ByVal Optional EnableHttpGet As Boolean = True)
If State = CommunicationState.Opened Then
Throw New InvalidOperationException("Host is already opened")
End If
Dim oMetadataBehavior As ServiceMetadataBehavior = Description.Behaviors.Find(Of ServiceMetadataBehavior)()
If oMetadataBehavior Is Nothing Then

View File

@ -63,6 +63,19 @@ Public Class WindowsService
_Config = _ConfigManager.Config
_LogConfig.Debug = _ConfigManager.Config.Debug
UpdateTraceLogging()
Dim oTimer As New Timers.Timer(60000)
AddHandler oTimer.Elapsed, Sub()
_Logger.Debug("Reloading config..")
_ConfigManager.Reload()
_Config = _ConfigManager.Config
_LogConfig.Debug = _ConfigManager.Config.Debug
UpdateTraceLogging()
End Sub
oTimer.Start()
_Logger.Debug("Connecting to Databases")
_Firebird = StartFirebird()
@ -119,6 +132,18 @@ Public Class WindowsService
End Try
End Sub
Private Sub UpdateTraceLogging()
' Changing Tracelevels programmatically,
' See: https://wcfpro.wordpress.com/2010/11/21/how-to-add-wcf-traces-programmatically/
Dim oTraceLevel = SourceLevels.Off
If _ConfigManager.Config.Debug Then
oTraceLevel = SourceLevels.Warning
End If
WcfTracesController.Instance.LevelController(oTraceLevel)
End Sub
Private Function StartFirebird() As Firebird
_Logger.Debug("Connecting to Firebird")