示例#1
0
        protected void Application_Start(object sender, EventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();

            LoggedInPersonIDInterceptorUtil.SetupSessionFactoryInterceptor();
        }
示例#2
0
        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));
        }