예제 #1
0
        /// <summary>Initializes a new instance of the <see cref="ResponseMessageResult"/> class.</summary>
        /// <param name="response">The response message.</param>
        public ResponseMessageResult(HandlerResponse response)
        {
            if (response == null)
            {
                throw new ArgumentNullException("response");
            }

            this.response = response;
        }
예제 #2
0
        /// <summary>Initializes a new instance of the <see cref="ResponseMessageResult"/> class.</summary>
        /// <param name="response">The response message.</param>
        public ResponseMessageResult(HandlerResponse response)
        {
            if (response == null)
            {
                throw new ArgumentNullException("response");
            }

            this.response = response;
        }
예제 #3
0
 /// <summary>
 /// Value and Test the portfolio
 /// </summary>
 /// <param name="portfolioId"></param>
 /// <param name="irScenarios">Optional IR Scenarios</param>
 /// <param name="fxScenarios">Optional FX Scenarios</param>
 private static void ValueAndTestPortfolio(string portfolioId, string[] irScenarios = null, string[] fxScenarios = null)
 {
     foreach (var testMarketName in TestMarketNames)
     {
         PortfolioValuationRequest request = CreateRequest(portfolioId, testMarketName, null, irScenarios, fxScenarios);
         HandlerResponse           result  = ExecuteTradeValuation(request);
         AssertValuation(result);
     }
 }
예제 #4
0
 public InternalPortfRevalRequest(Guid requestId, DateTimeOffset created)
 {
     RequestId    = requestId;
     Created      = created;
     LatestResult = new HandlerResponse
     {
         RequestId = requestId.ToString()
     };
 }
예제 #5
0
        private static async Task <HandlerResponse> InvokeActionAsyncCore(CommandHandlerContext context, CancellationToken cancellationToken)
        {
            Contract.Requires(context != null);
            Contract.Requires(context.Descriptor != null);

            CommandHandlerDescriptor handlerDescriptor = context.Descriptor;

            try
            {
                object result = await handlerDescriptor.ExecuteAsync(context, cancellationToken);

                // This is cached in a local for performance reasons. ReturnType is a virtual property on CommandHandlerDescriptor,
                // or else we'd want to cache this as part of that class.
                bool isDeclaredTypeHandlerResult = typeof(ICommandHandlerResult).IsAssignableFrom(handlerDescriptor.ReturnType);
                if (result == null && isDeclaredTypeHandlerResult)
                {
                    // If the return type of the action descriptor is IHandlerResult, it's not valid to return null
                    throw Error.InvalidOperation(Resources.DefaultHandlerInvoker_NullHandlerResult);
                }

                if (isDeclaredTypeHandlerResult || handlerDescriptor.ReturnType == typeof(object))
                {
                    ICommandHandlerResult actionResult = result as ICommandHandlerResult;

                    if (actionResult == null && isDeclaredTypeHandlerResult)
                    {
                        // If the return type of the action descriptor is IHandlerResult, it's not valid to return an
                        // object that doesn't implement IHandlerResult
                        throw Error.InvalidOperation(Resources.DefaultHandlerInvoker_InvalidHandlerResult, result.GetType());
                    }

                    if (actionResult != null)
                    {
                        HandlerResponse response = await actionResult.ExecuteAsync(cancellationToken);

                        if (response == null)
                        {
                            throw Error.InvalidOperation(Resources.DefaultHandlerInvoker_NullHandlerResponse);
                        }

                        HandlerResponse.EnsureResponseHasRequest(response, context.Request);
                        return(response);
                    }
                }

                // This is a non-IHandlerResult, so run the converter
                return(handlerDescriptor.ResultConverter.Convert(context, result));
            }
            catch (HandlerResponseException handlerResponseException)
            {
                HandlerResponse response = handlerResponseException.Response;
                HandlerResponse.EnsureResponseHasRequest(response, context.Request);

                return(response);
            }
        }
예제 #6
0
        public async Task <HandlerResponse> Move(Position position)
        {
            Console.WriteLine($"Move (X={position.X}, Y={position.Y}, Z={position.Z})");
            var response = new HandlerResponse()
            {
                Status = CommandStatus.Ack, Type = "Move", position = position
            };

            return(response);
        }
예제 #7
0
        public static void ExecuteHandler(string controllerName, HttpContext context, string actionName)
        {
            //if (!context.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
            //{
            //    context.Response.Write(new HandlerResponse() { Message = "只支持json传输协议", Result = 0 }.ToString());
            //    return;
            //}
            IAppHandler handler;

            if (s_Handlers.TryGetValue(controllerName, out handler))
            {
                handler.HttpContext = context;
                //下一步找到Action的参数
                bool hasAction = false;

                foreach (var action in handler.ActionMethods)
                {
                    if (action.Name.ToLower() == actionName.ToLower())
                    {// 有操作的方法action
                        hasAction = true;
                        ActionExcute    excute          = new ActionExcute();
                        HandlerResponse handlerResponse = excute.BindParamToAction(action, context, handler);
                        if (handlerResponse != null)
                        {
                            if (handlerResponse.Result == 101)
                            {
                                context.Response.Write(handlerResponse.Message);
                            }
                            else
                            {
                                context.Response.Write(handlerResponse.ToString());
                            }
                        }
                        break;
                    }
                }
                if (!hasAction)
                {
                    context.Response.Write(new HandlerResponse()
                    {
                        Message = "不存在操作方法", Result = 0
                    }.ToString());
                    return;
                }
            }
            else
            {
                context.Response.Write(new HandlerResponse()
                {
                    Message = "不存在操作对象", Result = 0
                }.ToString());
            }
            //  context.Response.Write(handler.CreateInstance().ProcessRequest(context).ToString());
        }
예제 #8
0
        HandlerResponse IMessageHandler.Handle(PersistedMessage message)
        {
            TestMessage m = JsonConvert.DeserializeObject <TestMessage>(message.PayLoad);

            //if (message.RetryCount == 0) {
            //    Console.WriteLine("Recieved {0}, rescheduling", m.Property);
            //    return HandlerResponse.Retry(TimeSpan.FromMinutes(1));
            //} else {
            Console.WriteLine("processing {0}", m.Property);
            return(HandlerResponse.Handled());
            //}
        }
예제 #9
0
 public InternalTradeRevalRequest(Guid requestId, DateTimeOffset created, TradeValuationRequest pvReq)
 {
     RequestId    = requestId;
     Created      = created;
     Request      = pvReq;
     LatestResult = new HandlerResponse
     {
         RequestId = pvReq.RequestId,
         //RequesterData = pvReq.TradeId,
         Status = RequestStatusEnum.Received
     };
 }
예제 #10
0
        /// <summary>
        /// Value and Test the portfolio
        /// </summary>
        /// <param name="portfolioId"></param>
        private static void ValueTradeDebug(string portfolioId)
        {
            var irScenarios = new[] { ScenarioConst.Unstressed };

            //var curveTypes = new[] { "RateCurve" };
            //ExecuteCurveStressing(TestMarketNames, curveTypes, Generate_All_RateCurveNames());
            foreach (var testMarketName in TestMarketNames)
            {
                PortfolioValuationRequest request = CreateRequest(portfolioId, testMarketName, null, irScenarios);
                HandlerResponse           result  = ExecuteTradeValuation(request);
                PrintValuation(result);
            }
        }
예제 #11
0
        private static void AssertValuation(HandlerResponse result)
        {
            // Load valuationItems for the current request Id
            List <ICoreItem> rawValuationItems =
                Engine.Cache.LoadItems <ValuationReport>(Expr.BoolAND(Expr.IsNull(ValueProp.Aggregation),
                                                                      Expr.IsEQU(RequestBase.Prop.RequestId, Guid.Parse(result.RequestId))));

            foreach (ICoreItem valuationItem in rawValuationItems)
            {
                // Extract the valuation report
                var valuation = (ValuationReport)valuationItem.Data;

                // Check that the valuation returned successfully
                var excpName = valuationItem.AppProps.GetValue <string>(WFPropName.ExcpName, null);
                if (excpName != null)
                {
                    // valuation failed - log details
                    var excpText = valuationItem.AppProps.GetValue <string>(WFPropName.ExcpText, null);
                    UTE.Logger.LogError(
                        "Valuation failed:" +
                        "{0}    UniqueId : {1}" +
                        "{0}    Exception: {2}: '{3}'",
                        Environment.NewLine,
                        valuationItem.Name, excpName, excpText);
                    Assert.Fail(excpName, $"Workflow error ({excpName})");
                }

                // check for errors
                var tradeSource = valuationItem.AppProps.GetValue <string>(TradeProp.TradeSource);
                var tradeId     = valuationItem.AppProps.GetValue <string>(TradeProp.TradeId);
                var marketName  = valuationItem.AppProps.GetValue <string>(CurveProp.Market);
                var key         = $"{tradeSource}_{tradeId}_{marketName}_{InstrumentMetrics.NPV}".ToLower();

                // Assert expected value has been supplied
                Assert.IsTrue(ExpectedValues.ContainsKey(key), $"ExpectedValue for key:({key}) is missing.");

                ExpectedValue expectedValue = ExpectedValues[key];

                Quotation quote = valuation.GetFirstQuotationForMetricName(InstrumentMetrics.NPV.ToString());
                Assert.IsNotNull(quote, $"CalculatedValue for key:({key}) is missing.");
                Assert.IsTrue(quote.valueSpecified, $"CalculatedValue for key:({key}) is missing.");

                decimal calculatedNPV = quote.value;
                decimal differenceNPV = expectedValue.OutputNPV - calculatedNPV;

                Assert.IsFalse(System.Math.Abs(differenceNPV) > ToleranceNPV,
                               $"ToleranceExceeded(|{differenceNPV:F0}| > {ToleranceNPV:F0})");
            }
        }
예제 #12
0
        public ProgressObj(Guid requestId, DateTimeOffset created, ProgressObj lastProgress, ResponseBase response)
            : this(requestId, created, lastProgress, response.RequesterId)
        {
            if (response.FaultDetail != null)
            {
                ExcpName = response.FaultDetail.ShortName;
                ExcpText = response.FaultDetail.Message;
            }
            // response subtypes
            HandlerResponse handlerResponse = response as HandlerResponse;

            if (handlerResponse != null)
            {
                if (response.Status == RequestStatusEnum.Undefined)
                {
                    throw new ArgumentNullException("status");
                }
                HandlerStatus = response.Status;
                if (handlerResponse.CommenceTime != null)
                {
                    Commenced = DateTimeOffset.Parse(handlerResponse.CommenceTime);
                }
                ItemCount   = handlerResponse.ItemCount;
                ItemsPassed = handlerResponse.ItemsPassed;
                ItemsFailed = handlerResponse.ItemsFailed;
            }
            WorkerResponse workerResponse = response as WorkerResponse;

            if (workerResponse != null)
            {
                if (response.Status == RequestStatusEnum.Undefined)
                {
                    throw new ArgumentNullException("status");
                }
                WorkerStatus = response.Status;
                WorkerHost   = String.Format("{0}.{1}", workerResponse.WorkerHostComputer, workerResponse.WorkerHostInstance ?? "Default");
            }
            ManagerResponse managerResponse = response as ManagerResponse;

            if (managerResponse != null)
            {
                if (response.Status == RequestStatusEnum.Undefined)
                {
                    throw new ArgumentNullException("status");
                }
                ManagerStatus = response.Status;
            }
        }
예제 #13
0
        private static void PrintValuation(HandlerResponse result)
        {
            // Load valuationItems for the current request Id
            List <ICoreItem> rawValuationItems =
                Engine.Cache.LoadItems <ValuationReport>(Expr.BoolAND(Expr.IsNull(ValueProp.Aggregation),
                                                                      Expr.IsEQU(RequestBase.Prop.RequestId, Guid.Parse(result.RequestId))));

            foreach (ICoreItem valuationItem in rawValuationItems)
            {
                Debug.Print(XmlSerializerHelper.SerializeToString(valuationItem.AppProps.Serialise()));
                // Extract the valuation report
                var valuation = (ValuationReport)valuationItem.Data;
                XmlSerializerHelper.SerializeToFile(valuation, valuationItem.Name);
                //Debug.Print(valuationItem.Text);
            }
        }
예제 #14
0
        public async Task <HandlerResponse <IEnumerable <User> > > Handle(GetUsersRequest request, CancellationToken cancellationToken)
        {
            HandlerResponse <IEnumerable <User> > response;

            try
            {
                var users = await _dataContext.Users.AsNoTracking().OrderBy(u => u.Id).ToListAsync();

                response = new HandlerResponse <IEnumerable <User> >(users);
            }
            catch (DbException)
            {
                response = new HandlerResponse <IEnumerable <User> >($"Unable to get Users");
            }

            return(response);
        }
        /// <summary>
        /// Converts the result of an handler to an instance of <see cref="HandlerResponse"/>.
        /// </summary>
        /// <param name="context">The conversion context.</param>
        /// <param name="handlerResult">The result to convert.</param>
        /// <returns>A <see cref="HandlerResponse"/>.</returns>
        /// <exception cref="InvalidOperationException"></exception>
        public HandlerResponse Convert(CommandHandlerContext context, object handlerResult)
        {
            if (context == null)
            {
                throw Error.ArgumentNull("context");
            }

            HandlerResponse response = (HandlerResponse)handlerResult;

            if (response == null)
            {
                throw Error.InvalidOperation(Resources.DefaultHandlerInvoker_NullHandlerResponse);
            }

            HandlerResponse.EnsureResponseHasRequest(response, context.Request);
            return(response);
        }
예제 #16
0
        private void ReceivePortfolioValuationRequest(ICoreItem item)
        {
            DateTimeOffset created   = item.Created;
            var            pvRequest = (PortfolioValuationRequest)item.Data;
            var            requestId = new Guid(pvRequest.RequestId);

            // ignore requests if we are not running
            // ignore requests not processed by this server instance
            if ((GetState() != BasicServerState.Running) ||
                ((requestId.GetHashCode() % ServerFarmSize) != ServerInstance))
            {
                return;
            }

            InternalPortfRevalRequest newRequest = null;

            _outstandingRequests.Locked(requests =>
            {
                InternalPortfRevalRequest oldRequest;
                if (!requests.TryGetValue(requestId, out oldRequest))
                {
                    // not found
                    newRequest = new InternalPortfRevalRequest(requestId, created);
                }
                if (newRequest != null)
                {
                    newRequest.Request             = pvRequest;
                    newRequest.LatestResult.Status = RequestStatusEnum.Received;
                    requests[requestId]            = newRequest;
                }
            });
            var response = new HandlerResponse
            {
                RequestId   = newRequest.RequestId.ToString(),
                RequesterId = newRequest.Request.RequesterId ?? new UserIdentity {
                    Name = IntClient.Target.ClientInfo.Name, DisplayName = "Unknown"
                },
                //RequesterData = newRequest.Request.PortfolioId,
                Status = newRequest.LatestResult.Status
            };

            _workContext.Cache.SaveObject(response);

            // dispatch worker request
            _workerEventQueue.Dispatch(null);
        }
예제 #17
0
        private void ReceiveCancellationRequest(ICoreItem item)
        {
            //DateTimeOffset created = item.Created;
            var cancelRequest = (CancellationRequest)item.Data;
            var requestId     = new Guid(cancelRequest.RequestId);

            // ignore requests if we are not running
            if (GetState() != BasicServerState.Running)
            {
                return;
            }

            // get current request and cancel it
            InternalPortfRevalRequest internalRequest = null;

            _outstandingRequests.Locked(requests =>
            {
                if (!requests.TryGetValue(requestId, out internalRequest))
                {
                    return; // does not exist or is not ours - just exit
                }
                internalRequest.Cancellation        = cancelRequest;
                internalRequest.LatestResult.Status = RequestStatusEnum.Cancelled;
            });

            WFCalculatePortfolioStressValuation workflow = internalRequest.Workflow;

            workflow?.Cancel(cancelRequest.CancelReason);

            var response = new HandlerResponse
            {
                RequestId   = internalRequest.RequestId.ToString(),
                RequesterId = internalRequest.Request.RequesterId ?? new UserIdentity {
                    Name = IntClient.Target.ClientInfo.Name, DisplayName = "Unknown"
                },
                //RequesterData = internalRequest.Request.PortfolioId,
                Status = internalRequest.LatestResult.Status
            };

            _workContext.Cache.SaveObject(response);

            // dispatch worker request
            _workerEventQueue.Dispatch(null);
        }
예제 #18
0
        private static void HandleSpecificRequest <R, W>(ILogger logger, ICoreCache cache, string requestItemName)
            where R : RequestBase
            where W : WorkstepBase <RequestBase, HandlerResponse>, IRequestHandler <RequestBase, HandlerResponse>, new()
        {
            R request = cache.LoadObject <R>(requestItemName);

            if (request == null)
            {
                throw new ApplicationException(String.Format("Request not found (type={0},name='{1}')", typeof(R).Name, requestItemName));
            }

            // publish 'initial' status
            HandlerResponse response = new HandlerResponse()
            {
                RequestId    = request.RequestId,
                RequesterId  = request.RequesterId,
                Status       = RequestStatusEnum.Commencing,
                CommenceTime = DateTimeOffset.Now.ToString("o")
            };

            cache.SaveObject <HandlerResponse>(response);
            try
            {
                using (IRequestHandler <RequestBase, HandlerResponse> handler = new W() as IRequestHandler <RequestBase, HandlerResponse>)
                {
                    handler.InitialiseRequest(logger, cache);
                    handler.ProcessRequest(request, response);
                }
            }
            catch (OperationCanceledException cancelExcp)
            {
                response.Status       = RequestStatusEnum.Cancelled;
                response.CancelReason = cancelExcp.Message;
            }
            catch (Exception outerExcp)
            {
                response.Status      = RequestStatusEnum.Faulted;
                response.FaultDetail = new ExceptionDetail(outerExcp);
                logger.Log(outerExcp);
            }
            // publish 'completed' status
            cache.SaveObject <HandlerResponse>(response);
        }
예제 #19
0
        private void ReceiveTradeValuationRequest(ICoreItem pvReqItem)
        {
            DateTimeOffset created   = pvReqItem.Created;
            var            pvReq     = (TradeValuationRequest)pvReqItem.Data;
            var            requestId = new Guid(pvReq.RequestId);

            // ignore requests if we are not running
            // ignore requests not processed by this server instance
            if ((GetState() != BasicServerState.Running) ||
                ((requestId.GetHashCode() % ServerFarmSize) != ServerInstance))
            {
                return;
            }

            var newRequest = new InternalTradeRevalRequest(requestId, created, pvReq);
            InternalTradeRevalRequest oldRequest = null;

            _outstandingRequests.Locked(requests =>
            {
                if (requests.TryGetValue(requestId, out oldRequest))
                {
                    // exists
                    newRequest.LatestResult = oldRequest.LatestResult;
                }
                requests[requestId] = newRequest;
            });
            if (oldRequest == null)
            {
                var response = new HandlerResponse
                {
                    RequestId   = pvReq.RequestId,
                    RequesterId = pvReq.RequesterId ?? new UserIdentity {
                        Name = IntClient.Target.ClientInfo.Name, DisplayName = "Unknown"
                    },
                    //RequesterData = pvReq.TradeId,
                    Status = RequestStatusEnum.Received
                };
                _workContext.Cache.SaveObject(response);
            }

            // dispatch worker request
            _workerEventQueue.Dispatch(null);
        }
예제 #20
0
        public HandlerResponse Create(TCommand input)
        {
            // do validation
            var validationResults = _businessRules.ToList().Select(br => br.IsValid(input)).ToList();
            var isNotValid        = validationResults.Any(vr => !vr.IsValid);

            if (isNotValid)
            {
                return(HandlerResponse.Failed(
                           string.Join(", ",
                                       validationResults.Select(vr => string.Join(", ", vr.Messages)))));
            }

            var entity = _tRepository.Get(input.Id);

            _tRepository.Delete(entity);

            return(HandlerResponse.Success("Delete!", 1));
        }
예제 #21
0
        static void Main(string[] args)
        {
            IMessageHandler rookie    = new MessageHandler(new Checker("rookie", 5000));
            IMessageHandler sophomore = new MessageHandler(new Checker("sophomore", 10000));
            IMessageHandler junior    = new MessageHandler(new Checker("junior", 15000));
            IMessageHandler senior    = new MessageHandler(new Checker("senior", 20000));

            rookie.RegisterNext(sophomore);
            sophomore.RegisterNext(junior);
            junior.RegisterNext(senior);

            Console.WriteLine("Put some money to prove the service:");
            var total = Console.ReadLine();

            ICheckReport    report   = new CheckReport(int.Parse(total));
            HandlerResponse response = rookie.Check(report);

            Console.WriteLine("The response is {0}!", response);
            Console.ReadKey();
        }
예제 #22
0
        public HandlerResponse Create(TCommand input)
        {
            // do validation
            var validationResults = _businessRules.ToList().Select(br => br.IsValid(input)).ToList();
            var isNotValid        = validationResults.Any(vr => !vr.IsValid);

            if (isNotValid)
            {
                return(HandlerResponse.Failed(
                           string.Join(", ",
                                       validationResults.Select(vr => string.Join(", ", vr.Messages)))));
            }

            var mapper = _commandMapperFactory.Create <TCommand, TEntity>();
            var entity = mapper.Create(input);

            var id = _tRepository.InsertAndGetId(entity);

            return(HandlerResponse.Success("Created", id));
        }
예제 #23
0
        private bool HandlerResponseRequester(string response)
        {
            Dictionary <string, dynamic> result;

            try
            {
                result = JsonConvert.DeserializeObject <Dictionary <string, dynamic> >(response);
            }
            catch (JsonException e)
            {
                throw new InternalException("SlicingDice: Internal error");
            }
            var handlerResponse = new HandlerResponse(result);

            if (handlerResponse.RequestSuccessful())
            {
                return(true);
            }
            return(false);
        }
예제 #24
0
        public void TestExecuteActionAndGetResponse()
        {
            CatalogApp app = new CatalogApp();

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("Name", "Python");
            string action = "NEW_WORKSHOP";

            HandlerResponse response = app.ExecuteActionAndGetResponse(action, parameters);

            string result =
                "<workshops>" +
                "<workshop id='efcv4d' name='C++' status='Open' duration='22 Jan. 2019 ~ 15 Feb. 2019'></workshop>" +
                "<workshop id='74d5jh' name='C#' status='Closed' duration='2 May. 2018 ~ 19 May. 2018'></workshop>" +
                "<workshop id='r982jk' name='DDD' status='Open' duration='15 Dec. 2019 ~ 15 Mar. 2020'></workshop>" +
                "<workshop id='57adf0' name='Python' status='Open' duration='Unknown'></workshop>" +
                "</workshops>";

            Assert.AreEqual(result, response.GetXmlString());
        }
예제 #25
0
        public HandlerResponse Convert(CommandHandlerContext context, object handlerResult)
        {
            if (context == null)
            {
                throw Error.ArgumentNull("context");
            }

            HandlerResponse resultAsResponse = handlerResult as HandlerResponse;

            if (resultAsResponse != null)
            {
                HandlerResponse.EnsureResponseHasRequest(resultAsResponse, context.Request);
                return(resultAsResponse);
            }

#if LOOSE_CQRS
            T value = (T)handlerResult;
            return(context.Request.CreateResponse(value));
#else
            return(context.Request.CreateResponse());
#endif
        }
예제 #26
0
        private static async Task <HandlerResponse> HandleAsyncCore(IExceptionHandler handler, ExceptionHandlerContext context, CancellationToken cancellationToken)
        {
            Contract.Assert(handler != null);
            Contract.Assert(context != null);

            await handler.HandleAsync(context, cancellationToken);

            ICommandHandlerResult result = context.Result;

            if (result == null)
            {
                return(null);
            }

            HandlerResponse response = await result.ExecuteAsync(cancellationToken);

            if (response == null)
            {
                throw Error.ArgumentNull(Resources.TypeMethodMustNotReturnNull, typeof(ICommandHandlerResult).Name, "ExecuteAsync");
            }

            return(response);
        }
예제 #27
0
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                context.Response.ContentType = "text/plain";
                HttpRequest  Request  = context.Request;
                HttpResponse Response = context.Response;

                //防止数据泄露,以后可以去掉
                if (Request.RequestType.Trim().ToLower() == "get" && Request.QueryString["controller"] != "gloab" && Request.QueryString["controller"] != "checkcode")
                {
                    HandlerResponse hresult = new HandlerResponse {
                        Result = -1, Message = "不支持GET请求"
                    };
                    Response.Write(hresult.ToString());
                }
                else
                {
                    string handlerName = Request.Params["controller"];

                    if (string.IsNullOrEmpty(handlerName) && string.IsNullOrEmpty(Request.QueryString["controller"]))
                    {
                        return;
                    }
                    AppHandlerManager.ExecuteHandler(handlerName, HttpContext.Current, Request.QueryString["action"]);
                }
                context.ApplicationInstance.CompleteRequest();
            }
            catch (Exception ex)
            {
                if (ex is ThreadAbortException)
                {
                }

                Logger.CurrentLog.Error(ex.Message, ex);
            }
        }
예제 #28
0
        public async Task <HandlerResponse <bool> > Handle(UpdateUserRequest request, CancellationToken cancellationToken)
        {
            HandlerResponse <bool> response;

            var user = await _dataContext.Users.SingleOrDefaultAsync(u => u.Id == request.Id, cancellationToken);

            if (user is null)
            {
                response = new HandlerResponse <bool>("Unable to find User");
            }
            else
            {
                var existingUserName = await _dataContext.Users.AsNoTracking().SingleOrDefaultAsync(u => u.Username.Equals(request.Username, StringComparison.InvariantCultureIgnoreCase), cancellationToken);

                if (existingUserName != null)
                {
                    response = new HandlerResponse <bool>($"Please supply an unique username");
                }
                else
                {
                    try
                    {
                        user.Username = request.Username;
                        await _dataContext.SaveChangesAsync(cancellationToken);

                        response = new HandlerResponse <bool>(true);
                    }
                    catch (DbException)
                    {
                        response = new HandlerResponse <bool>($"Unable to update User");
                    }
                }
            }

            return(response);
        }
예제 #29
0
        private void AcquireRequestState(object sender, EventArgs e)
        {
            HttpContext context     = ((HttpApplication)sender).Context;
            string      requestPath = context.Request.Path.Trim('/').ToLower();

            if (requestPath.Contains("ajax/"))
            {//符合ajax请求的内容
                string[] controls = requestPath.Substring(requestPath.IndexOf("ajax/"),
                                                          requestPath.IndexOf('?') > 0 ? requestPath.IndexOf('?') : requestPath.Length - requestPath.IndexOf("ajax/")).Split('/');
                context.Response.ContentType = "text/plain";
                HttpRequest  Request  = context.Request;
                HttpResponse Response = context.Response;

                //防止数据泄露,以后可以去掉
                if (Request.RequestType.Trim().ToLower() == "get" && controls[1] != "gloab" &&
                    controls[1] != "checkcode")
                {
                    HandlerResponse hresult = new HandlerResponse {
                        Result = -1, Message = "不支持GET请求"
                    };
                    Response.Write(hresult.ToString());
                }
                else
                {
                    /*control的操作对象*/
                    string handlerName = controls[1];

                    if (string.IsNullOrEmpty(handlerName))
                    {
                        return;
                    }
                    AppHandlerManager.ExecuteHandler(handlerName, HttpContext.Current, controls[2]);
                }
                context.ApplicationInstance.CompleteRequest();
            }
        }
예제 #30
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ExceptionContext"/> class using the values provided.
        /// </summary>
        /// <param name="exceptionInfo">The exception caught.</param>
        /// <param name="catchBlock">The catch block where the exception was caught.</param>
        /// <param name="request">The request being processed when the exception was caught.</param>
        /// <param name="response">The repsonse being returned when the exception was caught.</param>
        public ExceptionContext(ExceptionDispatchInfo exceptionInfo, ExceptionContextCatchBlock catchBlock, CommandHandlerRequest request, HandlerResponse response)
        {
            if (exceptionInfo == null)
            {
                throw new ArgumentNullException("exceptionInfo");
            }

            this.ExceptionInfo = exceptionInfo;

            if (catchBlock == null)
            {
                throw new ArgumentNullException("catchBlock");
            }

            this.CatchBlock = catchBlock;

            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            this.Request = request;

            if (response == null)
            {
                throw new ArgumentNullException("response");
            }

            this.Response = response;
        }
예제 #31
0
 public InternalTradeRevalRequest(Guid requestId, HandlerResponse pvRes)
 {
     RequestId    = requestId;
     Created      = DateTimeOffset.Now;
     LatestResult = pvRes;
 }
예제 #32
0
        private void DequeueWorkerRequests(object notUsed)
        {
            // throttle callbacks to once per timer period
            DateTime dtNow = DateTime.Now;

            if ((dtNow - _lastManagedAt) < _requestManagerPeriod)
            {
                return;
            }
            _lastManagedAt = dtNow;

            try
            {
                // processing algorithm
                // - find oldest unprocessed (status==received) request and process it
                bool workToDo = true;
                while (workToDo && (GetState() == BasicServerState.Running))
                {
                    workToDo = false;
                    InternalTradeRevalRequest activeRequest        = null;
                    DateTimeOffset            oldestRequestCreated = DateTimeOffset.MaxValue;
                    _outstandingRequests.Locked(requests =>
                    {
                        foreach (InternalTradeRevalRequest request in requests.Values)
                        {
                            if ((request.LatestResult.Status == RequestStatusEnum.Received) &&
                                (request.Created < oldestRequestCreated) &&
                                (request.Request != null))
                            {
                                activeRequest        = request;
                                oldestRequestCreated = request.Created;
                            }
                        }
                        if (activeRequest != null)
                        {
                            // we have found a request to process
                            workToDo = true;
                        }
                    });

                    if (activeRequest != null)
                    {
                        // process request
                        TradeValuationRequest request = activeRequest.Request;
                        try
                        {
                            // run the valuation workflow
                            using (var workflow = new WFCalculateTradeValuation())
                            {
                                workflow.Initialise(_workContext);
                                activeRequest.Workflow = workflow;
                                _activeWorkflow        = workflow;
                                try
                                {
                                    WorkflowOutput <HandlerResponse> output = workflow.Execute(request);
                                    WorkflowHelper.LogErrors(Logger, output.Errors);
                                }
                                finally
                                {
                                    activeRequest.Workflow = null;
                                    _activeWorkflow        = null;
                                }
                            }
                        }
                        catch (Exception innerExcp)
                        {
                            Logger.Log(innerExcp);
                            // publish 'faulted' result
                            var response = new HandlerResponse
                            {
                                RequestId   = request.RequestId,
                                RequesterId = request.RequesterId,
                                //RequesterData = request.TradeId,
                                Status      = RequestStatusEnum.Faulted,
                                FaultDetail = new ExceptionDetail(innerExcp)
                            };
                            _workContext.Cache.SaveObject(response);
                        }
                    }
                } // while there is work to do
            }
            catch (Exception outerExcp)
            {
                // deserialisation error?
                Logger.Log(outerExcp);
            }
        }