Improve session management and initialization logic

Refactored ClassWindream_allgemein to enhance session lifecycle handling and robustness. Now, after successful impersonation/login, session and object type variables are set and errors are logged if loading fails. Changed impersonation/login to return Boolean for clarity. Init() now returns session creation success. Added GetWMSession to properly reset sessions. Ensured object types are loaded when reusing sessions. These changes improve error handling and maintain consistent session state.
This commit is contained in:
OlgunR
2026-04-27 16:44:00 +02:00
parent 61f6029001
commit e4d6734b03

View File

@@ -95,10 +95,24 @@ Public Class ClassWindream_allgemein
SessionAsUser = aSession SessionAsUser = aSession
If aSession.aLoggedin = True Then If aSession.aLoggedin = True Then
_Logger.Debug($"#Impersonate login [{UserName}] successfull!") _Logger.Debug($"#Impersonate login [{UserName}] successfull!")
Return SessionAsUser Me.oWMSession = aSession
CURRENToWMSession = aSession
CURRENToWMSession_Created = Now
Me.oObjekttypen = aSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument)
If Err.Number <> 0 Then
_Logger.Warn("Fehler beim Laden der Objekttypen nach Impersonate-Login: " & Err.Description)
Err.Clear()
End If
Me.oOrdnerTypen = aSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityFolder)
If Err.Number <> 0 Then
_Logger.Warn("Fehler beim Laden der Ordnertypen nach Impersonate-Login: " & Err.Description)
Err.Clear()
End If
Return True
End If End If
End If End If
Return False
End Function End Function
''' <summary> ''' <summary>
@@ -108,21 +122,36 @@ Public Class ClassWindream_allgemein
''' <remarks></remarks> ''' <remarks></remarks>
Public Function Init() As Boolean Public Function Init() As Boolean
If IsNothing(CURRENToWMSession) OrElse Not IsLoggedIn() Then If IsNothing(CURRENToWMSession) OrElse Not CBool(CURRENToWMSession.aLoggedin) Then
If WMLOGIN_DOMAIN <> String.Empty Then If WMLOGIN_DOMAIN <> String.Empty Then
GetWMSessionAsUser(WMLOGIN_DOMAIN, Me.GetCurrentServer, WMLOGIN_USER, WMLOGIN_PW) Return GetWMSessionAsUser(WMLOGIN_DOMAIN, Me.GetCurrentServer, WMLOGIN_USER, WMLOGIN_PW)
Else Else
GetWMSession() Return GetWMSession()
End If End If
Else Else
If My.Settings.vLogErrorsonly = False Then _Logger.Debug("WMSession already created!") If My.Settings.vLogErrorsonly = False Then _Logger.Debug("WMSession already created!")
oWMSession = CURRENToWMSession oWMSession = CURRENToWMSession
If IsNothing(oObjekttypen) Then
oObjekttypen = oWMSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument)
End If
If IsNothing(oOrdnerTypen) Then
oOrdnerTypen = oWMSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityFolder)
End If
Return True Return True
End If End If
End Function End Function
Private Function GetWMSession() Private Function GetWMSession()
If Not IsNothing(CURRENToWMSession) Then
Try
CURRENToWMSession.Logout()
Catch
' ignorieren Session war evtl. schon tot
End Try
CURRENToWMSession = Nothing
End If
Try Try
Try Try
' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen