protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlConfigurator.Configure(); LoggedInPersonIDInterceptorUtil.SetupSessionFactoryInterceptor(); }
public ResponseHeaderType SaveOrUpdateVoyage(VoyageRequest request) { try { UnityWrapper.ConfiguredContainer.RegisterType <ILoginInformation, WcfLoginInformation>( new UnityOperationContextLifetimeManager(), new InjectionFactory( container => { log.Debug($"Operation context hash: {OperationContext.Current.GetHashCode()} Creating WCFLoginInformation {request.Header.UserName}"); return(WcfLoginInformation.Authenticate(request.Header.UserName)); }) ); LoggedInPersonIDInterceptorUtil.RegisterPersonIdProviderWcfContext(() => new HasLoggedInPersonID { LoggedInPersonID = UnityWrapper.Resolve <ILoginInformation>().ID, UserIdentification = UnityWrapper.Resolve <ILoginInformation>().UserIdentification, }); //This variable delay simulates variances in the time it takes to handle a request in the real application. //E.g. some requests take longer to validate since the payload is larger. //Note: If this variable delay is removed, the clients will not interfere with each other. var delay = (int)(1000 * new Random().NextDouble()); log.Debug($"Operation context hash: {OperationContext.Current.GetHashCode()} Delaying: {delay}, {request.Header.UserName}"); Thread.Sleep(delay); var user = UnityWrapper.Resolve <ILoginInformation>(); if (user == null) { return(CreateResponse(StatusCodeEnumType.AccessDenied, $"Login failed for user {request.Header.UserName}")); } var dto = new VoyageService().GetById(request.Body.VoyageID) ?? new DAL.DTO.Classes.Voyage(); if (!string.IsNullOrWhiteSpace(request.Body.ShipName)) { dto.ShipName = request.Body.ShipName; } if (!string.IsNullOrWhiteSpace(request.Body.ToLocation)) { dto.ToLocation = request.Body.ToLocation; } if (!string.IsNullOrWhiteSpace(request.Body.FromLocation)) { dto.FromLocation = request.Body.FromLocation; } if (request.Body.ETD != default(DateTime)) { dto.ETD = request.Body.ETD; } if (request.Body.ETA != default(DateTime)) { dto.ETA = request.Body.ETA; } dto = new VoyageService().SaveOrUpdate(dto); if (dto.ModifiedByPersonID != user.ID) { var modifiedBy = new PersonService().GetById(dto.ModifiedByPersonID.GetValueOrDefault()); return(CreateResponse(StatusCodeEnumType.ServerError, $"The voyage with ID {dto.VoyageID} was modified by {modifiedBy.UserIdentification} - not {user.UserIdentification}")); } } catch (Exception ex) { return(CreateResponse(StatusCodeEnumType.ServerError, ex.Message)); } return(CreateResponse(StatusCodeEnumType.OK)); }