private void SaveTheSession(SessionOperation sessionOperation, PrincipalUserSession principalService) { if (!principalService.IsAuthenticated) { _repositoryService.AddOnCommit(AppCoreDbContextNames.Core, sessionOperation); _repositoryService.SaveChanges(AppCoreDbContextNames.Core); return; } AddSession(sessionOperation, principalService); }
public void SaveSessionOperationAsync(SessionOperation sessionOperation, IPrincipalService principalService) { var principal = new PrincipalUserSession { UniqueSessionIdentifier = principalService.UniqueSessionIdentifier, CurrentPrincipalIdentifierGuid = principalService.CurrentPrincipalIdentifierGuid, IsAuthenticated = principalService.IsAuthenticated }; HostingEnvironment.QueueBackgroundWorkItem(x => { SaveTheSession(sessionOperation, principal); }); }
private void AddSession(SessionOperation sessionOperation, PrincipalUserSession principalService) { var session = _sessionService.Get(principalService.UniqueSessionIdentifier); if (session == null) { if (!principalService.CurrentPrincipalIdentifierGuid.HasValue) { return; } try { _semaphoreSlim.Wait(); session = _sessionService.Get(principalService.UniqueSessionIdentifier); if (session == null) { var principal = _principalManagmentService.Get(principalService.CurrentPrincipalIdentifierGuid.Value); session = _sessionService.Create(principal, principalService.UniqueSessionIdentifier); session.Operations.Add(sessionOperation); _repositoryService.SaveChanges(AppCoreDbContextNames.Core); return; } } finally { _semaphoreSlim.Release(); } } sessionOperation.SessionFK = session.Id; _repositoryService.AddOnCommit(AppCoreDbContextNames.Core, sessionOperation); _repositoryService.SaveChanges(AppCoreDbContextNames.Core); //return session; }