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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user