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
If aSession.aLoggedin = True Then
_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
Return False
End Function
''' <summary>
@@ -108,21 +122,36 @@ Public Class ClassWindream_allgemein
''' <remarks></remarks>
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
GetWMSessionAsUser(WMLOGIN_DOMAIN, Me.GetCurrentServer, WMLOGIN_USER, WMLOGIN_PW)
Return GetWMSessionAsUser(WMLOGIN_DOMAIN, Me.GetCurrentServer, WMLOGIN_USER, WMLOGIN_PW)
Else
GetWMSession()
Return GetWMSession()
End If
Else
If My.Settings.vLogErrorsonly = False Then _Logger.Debug("WMSession already created!")
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
End If
End Function
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
' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen