private dynamic GetNthFibonacci() { FibonacciRequest request = null; try { request = this.Bind <FibonacciRequest>(); } catch (ModelBindingException) { return(Response.AsJson(new ErrorMessage { Message = "Please provide a valid integer" }).WithStatusCode(HttpStatusCode.BadRequest)); } long result = 0; try { result = _fibonacciService.GetNth(request.N); } catch (Exception) { return(Response.AsJson(new ErrorMessage { Message = "Please provide a valid integer" }).WithStatusCode(HttpStatusCode.BadRequest)); } return(new TextResponse(result.ToString())); }
public FibonacciRequest GetRequestInstance() { FibonacciRequest request = FibonacciRequest.Instance; request.FirstIndex = 28; request.LastIndex = 30; request.UseCache = false; request.TimeOfExecution = 10000; request.AmountMemory = 30000; return(request); }
public async Task <IActionResult> Post([FromBody] FibonacciRequest request) { _log.InfoFormat("{0} recieved count {1} value {2}", request.ChainId, request.Count, request.Value); _backgroundJobClient.Enqueue <ICommandHandler <EvaluateFibonacciStepCommand> >(h => h.ExecuteAsync(new EvaluateFibonacciStepCommand { Value = request.Value, Count = request.Count, Source = EvaluationSource.SecondService, ChainId = request.ChainId })); return(Ok()); }
public async Task <IActionResult> GetFibonacci([FromBody] FibonacciRequest request) { try { _service.ValidadeRequest(request); var result = await _service.Fibonacci(request).ConfigureAwait(false); return(Ok(result)); } catch (ArgumentException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
static void Main(string[] args) { try { string data = args.Length > 0 ? args[0] : "Test data from proxy client"; // Create the client object available from the service reference var client = new ExampleServiceClient("appEndpoint"); // Execute the test method Console.WriteLine("Set test data = [{0}]", data); Console.WriteLine("Calling TestService() Method..."); Console.WriteLine(client.TestService(data + Environment.NewLine)); // Get a number to compute a Fibonacci value const string prompt = "Enter an integer (40 or less) to use for calculation: "; Console.WriteLine("{0}{1}", Environment.NewLine, prompt); int number; while (!int.TryParse(Console.ReadLine(), out number) || number > 40) { Console.WriteLine("{0}{0}That entry was invalid!{0}{1}", Environment.NewLine, prompt); } Console.WriteLine("{0}Calculating Fibonacci value of {1}{0}", Environment.NewLine, number); // Create a request using the agreed-upon request data contract var request = new FibonacciRequest { Number = number, UseRecursiveAlgorithm = true }; // Return a result data contract object by calling the operation var result = client.Fibonacci(request); if (result.Errors != null) { Console.WriteLine("The recusrsive calculation resulted in an error: {0}", result.Errors); } else { Console.WriteLine("{0}Using the recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations{0}{0}Press <ENTER> to continue", Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations); } Console.ReadLine(); // Call the operation again request.UseRecursiveAlgorithm = false; result = client.Fibonacci(request); if (result.Errors != null) { Console.WriteLine("The non-recusrsive calculation resulted in an error: {0}", result.Errors); } else { Console.WriteLine("Using the non-recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations", Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations); } } catch (Exception ex) { HandleException("General", ex); } finally { Console.WriteLine("{0}Done! Press any key to exit...", Environment.NewLine); // Ensure the console doesn't close until we're done Console.ReadKey(); } }
static void Main(string[] args) { try { string data = args.Length > 0 ? args[0] : "Test data from proxy client"; // Get the service information from the configuration file var settings = (ServiceConfiguration)ConfigurationManager.GetSection("serviceSettings"); // Here, we create the endpoint using ChannelFactory var binding = new BasicHttpBinding(); if (settings.UseSsl) { binding.Security.Mode = BasicHttpSecurityMode.Transport; } var address = new EndpointAddress(settings.ServiceUrl); var factory = new ChannelFactory <IExampleService>(binding, address); var channel = factory.CreateChannel(); // Execute the test method Console.WriteLine("Set test data = [{0}]", data); Console.WriteLine("Calling TestService() Method..."); Console.WriteLine(channel.TestService(data)); // Get a number to compute a Fibonacci value const string prompt = "Enter an integer (40 or less) to use for calculation: "; Console.WriteLine("{0}{1}", Environment.NewLine, prompt); int number; while (!int.TryParse(Console.ReadLine(), out number) || number > 40) { Console.WriteLine("{0}{0}That entry was invalid!{0}{1}", Environment.NewLine, prompt); } Console.WriteLine("{0}Calculating Fibonacci value of {1}{0}", Environment.NewLine, number); // Create a request using the agreed-upon request data contract var request = new FibonacciRequest { Number = number, UseRecursiveAlgorithm = true }; // Return a result data contract object by calling the operation var result = channel.Fibonacci(request); if (result.Errors != null) { Console.WriteLine("The recusrsive calculation resulted in an error: {0}", result.Errors); } else { Console.WriteLine("{0}Using the recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations{0}{0}Press <ENTER> to continue", Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations); } Console.ReadLine(); // Call the operation again request.UseRecursiveAlgorithm = false; result = channel.Fibonacci(request); if (result.Errors != null) { Console.WriteLine("The non-recusrsive calculation resulted in an error: {0}", result.Errors); } else { Console.WriteLine("Using the non-recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations", Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations); } // Close the endpoint factory.Close(); } catch (Exception ex) { HandleException("General", ex); } finally { Console.WriteLine("{0}Done! Press any key to exit...", Environment.NewLine); // Ensure the console doesn't close until we're done Console.ReadKey(); } }
public async Task <BaseResponse> Fibonacci(FibonacciRequest request) { watch.Restart(); BaseResponse response = BaseResponse.Instance; ErrorResponse errorResponse = ErrorResponse.Instance; try { arrFibonacci = new BigInteger[request.LastIndex + 1]; if (request.LastIndex <= 1) { for (int i = 0; i < request.LastIndex; i++) { arrFibonacci[i] = request.LastIndex; } } else { try { timeOut = request.TimeOfExecution; amountMemory = request.AmountMemory; useCache = request.UseCache; watch.Start(); CancellationTokenSource token = new CancellationTokenSource(); token.CancelAfter(timeOut); await FibonacciAsync(request.LastIndex).ConfigureAwait(false); } catch (TimeoutException ex) { error = true; errorTimeExeeded = true; errorMessage = ex.Message; } catch (OutOfMemoryException ex) { error = true; errorOutOfMemory = true; errorMessage = ex.Message; } catch (StackOverflowException ex) { error = true; errorMessage = ex.Message; } } watch.Stop(); if (error) { errorResponse.Description = errorMessage; errorResponse.TimeExceeded = errorTimeExeeded; errorResponse.TimeExecuted = watch.Elapsed.TotalMilliseconds; errorResponse.MemoryExceeded = errorOutOfMemory; return(errorResponse); } response.Result = arrFibonacci; if (!error) { _cache.SetFibonacciCache(request.LastIndex, arrFibonacci); } _cache.SetFibonacciCache(request.LastIndex, arrFibonacci); response.ResultWithIndex = PrepareResult(arrFibonacci, request.FirstIndex, request.LastIndex); response.TimeExecuted = watch.Elapsed.TotalMilliseconds; return(response); } catch (TaskCanceledException) { errorResponse.Description = errorMessage; errorResponse.TimeExceeded = error; errorResponse.TimeExecuted = watch.Elapsed.TotalMilliseconds; errorResponse.MemoryExceeded = errorOutOfMemory; return(errorResponse); } }
public void ValidadeRequest(FibonacciRequest request) { new FibonacciRequest(request.FirstIndex, request.LastIndex, request.UseCache, request.TimeOfExecution, request.AmountMemory); }