Exemplo n.º 1
0
        public static async Task <string> SendSoapMessage(string url, string method, LoanRequest request)
        {
            HttpClientHandler handler = new HttpClientHandler();

            //Creates a new HttpClientHandler.
            handler.UseDefaultCredentials = true;
            //true if the default credentials are used; otherwise false. will use authentication credentials from the logged on user on your pc.
            using (HttpClient client = new HttpClient(handler))
            {
                client.BaseAddress = new Uri(url);
                var values = new Dictionary <string, string>
                {
                    { "ssn", request.ssn },
                    { "creditScore", request.creditScore.ToString() },
                    { "loanAmount", request.loanAmount.ToString() },
                    { "loanDuration", request.loanDuration }
                };


                var content  = new FormUrlEncodedContent(values);
                var response = await client.PostAsync(method, content).ConfigureAwait(continueOnCapturedContext: false);;

                response.EnsureSuccessStatusCode();
                var responseString = await response.Content.ReadAsStringAsync();

                return(responseString);
            }
        }
Exemplo n.º 2
0
        public static string GetXMLFromLoanRequest(LoanRequest request)
        {
            var    serializer = new System.Xml.Serialization.XmlSerializer(typeof(LoanRequest));
            string xml        = "";

            using (var sww = new StringWriter())
            {
                using (XmlWriter writer = XmlWriter.Create(sww))
                {
                    serializer.Serialize(writer, request);
                    xml = sww.ToString(); // Your XML

                    return(xml);
                }
            }
        }
Exemplo n.º 3
0
        public static string GetJSONFromRequest(LoanRequest request)
        {
            MemoryStream stream1           = new MemoryStream();
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(LoanRequest));
            // Save original string before we work.
            string originalDurationString = request.loanDuration;

            // As JSON banks use days instead of Date from 1970, we convert it.
            string   durationString = request.loanDuration.Replace("CET", "").Trim();
            DateTime durationDate   = Convert.ToDateTime(durationString);
            var      duration       = durationDate - new DateTime(1970, 01, 01);

            request.loanDuration = duration.TotalDays.ToString();

            ser.WriteObject(stream1, request);

            stream1.Position = 0;
            StreamReader sr          = new StreamReader(stream1);
            string       jsonRequest = sr.ReadToEnd();

            request.loanDuration = originalDurationString;
            //jsonRequest = jsonRequest.Replace(":\"", ":").Replace("\",", ",").Replace("\"}", "}");
            return(jsonRequest);
        }
Exemplo n.º 4
0
        public string RequestLoan(string ssn, bool isInRKI, double loanAmount, int loanDurationInDays)
        {
            Dictionary <string, string> recievedResponses = new Dictionary <string, string>();

            if (ssn.Length != 11 && ssn[6] != '-')
            {
                return("ssn MUST be in the format XXXXXX-XXXX");
            }

            DateTime loanDuration = new DateTime(1970, 01, 01);

            loanDuration = loanDuration.AddDays(loanDurationInDays);

            // Get Creditscore from webservice
            var creditBureau = new CreditBureau.CreditScoreService();
            int creditScore  = creditBureau.creditScore(ssn);

            ssn = ssn.Replace("-", "");

            // Get Banks from rulebase
            var rulebase      = new RuleBase.RuleBase();
            var recipientList = rulebase.GetBanks(creditScore, isInRKI, loanAmount, loanDuration).ToList();

            if (recipientList.Count == 0)
            {
                return("No suitable banks :(");
            }
            var request = new LoanRequest(ssn, creditScore, loanAmount, loanDuration);

            // Translate and send.

            foreach (var bank in recipientList)
            {
                string queueForBank = ssn + "." + bank.Name;

                if (bank.UsesMessaging)
                { // Use AMQP Messaging protocol (RabbitMQ broker)
                    MessageSender.DeclareQueue(bank.Host, queueForBank);

                    if (bank.Exchange.Contains("XML"))
                    { // XML Translator is used
                        var encodedMessage = UTF8Encoding.UTF8.GetBytes(XMLConverter.GetXMLFromLoanRequest(request));
                        MessageSender.SendMessage(bank.Host, bank.Exchange, queueForBank, encodedMessage);
                    }
                    else if (bank.Exchange.Contains("JSON"))
                    { // JSON Translator is used
                        string json           = JSONConverter.GetJSONFromRequest(request);
                        var    encodedMessage = UTF8Encoding.UTF8.GetBytes(json);
                        MessageSender.SendMessage(bank.Host, bank.Exchange, queueForBank, encodedMessage);
                    }
                }
                else
                { // Use http request to contact soap webservice.
                    var myResponse = DynamicSoapRequestHandler.SendSoapMessage(bank.Host, "RequestLoan", request).Result;
                    recievedResponses.Add(bank.Name, myResponse);
                }
            }

            // Recieve messages
            foreach (var bank in recipientList)
            {
                if (bank.UsesMessaging)
                {
                    string queueForBank = ssn + "." + bank.Name;
                    string response     = MessageReciever.Recieve(bank.Host, queueForBank);
                    recievedResponses.Add(bank.Name, response);
                }
            }
            if (recievedResponses.Count == 0)
            {
                return("No banks responded. This could be a connection error!");
            }
            // Normalize
            Dictionary <string, LoanResponse> responses = Normalizer.Normalize(recievedResponses); // Uses translators to get LoanResponse objects

            //Aggregate to find best rate.
            string bestInterestInformation = Aggregator.FindBestInterestRate(responses);

            return(bestInterestInformation);
        }