public async Task <ActionResult <GetLoanOptionsResponsePayload> > Post(GetLoanOptionsRequestPayload request)
        {
            var sender = factory.GetSender <GetLoanOptionsRequestPayload, GetLoanOptionsResponsePayload>();

            var response = await sender.SendRequest(request);

            return(response);
        }
Exemplo n.º 2
0
        static async Task SendRequests(RequestResponseFactory factory)
        {
            // get number of requests to make
            var requestsToSend     = GetNumberInActionArgs(0);
            var msDelayBetweenReqs = GetNumberInActionArgs(1);
            var httpEndpoint       = GetActionArg(2);

            if (httpEndpoint != null)
            {
                SetupHttpClient(httpEndpoint);
            }

            var sender = factory.GetSender <GetLoanOptionsRequestPayload, GetLoanOptionsResponsePayload>();

            sender.RequestSending += (r, m) =>
            {
                logger.WriteOutput($"{r.Id:000} REQUEST: CreditScore = {r.CreditScore}, SessionId = {m.ReplyToSessionId}");
            };
            var random = new Random();
            var outstandingRequests = new Task[requestsToSend];

            logger.WriteOutput("Sending requests...");

            for (var i = 0; i < requestsToSend; i++)
            {
                var payload = new GetLoanOptionsRequestPayload
                {
                    Id          = i,
                    CreditScore = random.Next(300, 801)
                };

                var rememberI = i;
                if (httpEndpoint == null)
                {
                    outstandingRequests[i] = sender.SendRequest(payload).ContinueWith(async t =>
                    {
                        if (t.IsFaulted)
                        {
                            foreach (var e in t.Exception.InnerExceptions)
                            {
                                logger.WriteOutput($"{rememberI:000} Failure: {e.Message}");
                            }

                            return;
                        }

                        var response = await t;
                        logger.WriteOutput($"{rememberI:000} RESPONSE: Provider = {response.Provider}, Loan = {response.LoanAmount}");
                    });
                }
                else
                {
                    outstandingRequests[i] = SendHttpRequest(payload).ContinueWith(async t =>
                    {
                        var response = await t;
                        logger.WriteOutput($"{rememberI:000} RESPONSE: Provider = {response.Provider}, Loan = {response.LoanAmount}");
                    });
                }

                await Task.Delay(msDelayBetweenReqs);
            }

            await Task.WhenAll(outstandingRequests);

            logger.Stop();

            if (httpEndpoint == null)
            {
                OutputAppMessage($"Average Round Trip Time (sec): {Math.Round(sender.AverageRTTms / 1000.0, 3)}");
                OutputAppMessage($"Min Round Trip Time (sec): {Math.Round(sender.MinRTTms / 1000.0, 3)}");
                OutputAppMessage($"Max Round Trip Time (sec): {Math.Round(sender.MaxRTTms / 1000.0, 3)}");
            }
            else
            {
                OutputAppMessage($"Average Round Trip Time (sec): {Math.Round(SendOverHttp_AverageRTTms / 1000.0, 3)}");
                OutputAppMessage($"Min Round Trip Time (sec): {Math.Round(SendOverHttp_MinRTTms / 1000.0, 3)}");
                OutputAppMessage($"Max Round Trip Time (sec): {Math.Round(SendOverHttp_MaxRTTms / 1000.0, 3)}");
            }
        }