diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs index 5274ddc49..3875f3bdb 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs @@ -2,41 +2,35 @@ using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using Newtonsoft.Json; -using System.Net.Http; using System.Threading.Tasks; using Grpc.Net.Client; -using System; using System.Linq; using GrpcBasket; -using Grpc.Core; +using System.Net.Http; namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services { public class BasketService : IBasketService { - private readonly HttpClient _httpClient; private readonly UrlsConfig _urls; + public readonly HttpClient _httpClient; private readonly ILogger _logger; public BasketService(HttpClient httpClient, IOptions config, ILogger logger) { - _httpClient = httpClient; _urls = config.Value; + _httpClient = httpClient; _logger = logger; } + public async Task GetById(string id) { return await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient => { - _logger.LogWarning("######################## grpc client created, request = {@id}", id); - var client = GrpcClient.Create(httpClient); - _logger.LogDebug("grpc client created, request = {@id}", id); var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id }); - _logger.LogDebug("grpc response {@response}", response); return MapToBasketData(response); @@ -54,37 +48,6 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services return client.UpdateBasketAsync(request); }); - - //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); - //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); - - //using (var httpClientHandler = new HttpClientHandler()) - //{ - // httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; - // using (var httpClient = new HttpClient(httpClientHandler)) - // { - // httpClient.BaseAddress = new Uri(_urls.GrpcBasket); - - // _logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress); - - // var client = GrpcClient.Create(httpClient); - - - // try - // { - - // _logger.LogDebug("Grpc update basket currentBasket {@currentBasket}", currentBasket); - // var request = MapToCustomerBasketRequest(currentBasket); - // _logger.LogDebug("Grpc update basket request {@request}", request); - - // await client.UpdateBasketAsync(request); - // } - // catch (RpcException e) - // { - // _logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}"); - // } - // } - //} } private BasketData MapToBasketData(CustomerBasketResponse customerBasketRequest) diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs index 9a1c393b0..5e3e4e2f0 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs @@ -2,7 +2,6 @@ using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using Newtonsoft.Json; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; @@ -11,7 +10,6 @@ using Grpc.Net.Client; using System; using static CatalogApi.Catalog; using System.Linq; -using Grpc.Core; namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services { @@ -41,36 +39,15 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services public async Task> GetCatalogItemsAsync(IEnumerable ids) { - - AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); - AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); - - using (var httpClientHandler = new HttpClientHandler()) + return await GrpcCallerService.CallService(_urls.GrpcCatalog, async httpClient => { - httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; - using (var httpClient = new HttpClient(httpClientHandler)) - { - httpClient.BaseAddress = new Uri(_urls.GrpcCatalog); - - _logger.LogInformation("Creating grpc client for CatalogClient {@httpClient.BaseAddress}, {@httpClient} ", httpClient.BaseAddress, httpClient); - - try - { - var client = GrpcClient.Create(httpClient); - var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 }; - _logger.LogInformation("grpc client created, request = {@request}", request); - var response = await client.GetItemsByIdsAsync(request); - _logger.LogInformation("grpc response {@response}", response); - return response.Data.Select(this.MapToCatalogItemResponse); - } - catch (RpcException e) - { - _logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}"); - } - } - } - - return null; + var client = GrpcClient.Create(httpClient); + var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 }; + _logger.LogInformation("grpc client created, request = {@request}", request); + var response = await client.GetItemsByIdsAsync(request); + _logger.LogInformation("grpc response {@response}", response); + return response.Data.Select(this.MapToCatalogItemResponse); + }); } private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse) diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs index 7e0b61a2f..6400c9797 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs @@ -8,28 +8,30 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services { public static class GrpcCallerService { - public static Task CallService(string urlGrpc, Func> func) + public static async Task CallService(string urlGrpc, Func> func) { AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); - using (var httpClientHandler = new HttpClientHandler()) + using var httpClientHandler = new HttpClientHandler { - httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; - using (var httpClient = new HttpClient(httpClientHandler)) - { - httpClient.BaseAddress = new Uri(urlGrpc); - Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress); + ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; } + }; - try - { - return func(httpClient); - } - catch (RpcException e) - { - Log.Error($"Error calling via grpc: {e.Status} - {e.Message}"); - } - } + using var httpClient = new HttpClient(httpClientHandler) + { + BaseAddress = new Uri(urlGrpc) + }; + + Log.Information("Creating grpc client base address urlGrpc ={@urlGrpc}, BaseAddress={@BaseAddress} ", urlGrpc, httpClient.BaseAddress); + + try + { + return await func(httpClient); + } + catch (RpcException e) + { + Log.Error($"Error calling via grpc: {e.Status} - {e.Message}"); } AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false); @@ -38,34 +40,34 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services return default; } - public static Task CallService(string urlGrpc, Func func) + public static async Task CallService(string urlGrpc, Func func) { AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); - using (var httpClientHandler = new HttpClientHandler()) + using var httpClientHandler = new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; } + }; + + using var httpClient = new HttpClient(httpClientHandler) { - httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; - using (var httpClient = new HttpClient(httpClientHandler)) - { - httpClient.BaseAddress = new Uri(urlGrpc); - Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress); + BaseAddress = new Uri(urlGrpc) + }; + + Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress); - try - { - return func(httpClient); - } - catch (RpcException e) - { - Log.Error($"Error calling via grpc: {e.Status} - {e.Message}"); - } - } + try + { + await func(httpClient); + } + catch (RpcException e) + { + Log.Error($"Error calling via grpc: {e.Status} - {e.Message}"); } AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", false); - - return default; } } } diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs index 1814e2d10..6c2394353 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs @@ -14,52 +14,30 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services { public class OrderingService : IOrderingService { - private readonly HttpClient _httpClient; private readonly UrlsConfig _urls; private readonly ILogger _logger; + public readonly HttpClient _httpClient; public OrderingService(HttpClient httpClient, IOptions config, ILogger logger) { - _httpClient = httpClient; _urls = config.Value; + _httpClient = httpClient; _logger = logger; } public async Task GetOrderDraftAsync(BasketData basketData) { - AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); - AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); - - using (var httpClientHandler = new HttpClientHandler()) + return await GrpcCallerService.CallService(_urls.GrpcOrdering, async httpClient => { - httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; - using (var httpClient = new HttpClient(httpClientHandler)) - { - httpClient.BaseAddress = new Uri(_urls.GrpcOrdering); - - _logger.LogDebug(" Creating grpc client for ordering {@httpClient.BaseAddress}", httpClient.BaseAddress); - - var client = GrpcClient.Create(httpClient); + var client = GrpcClient.Create(httpClient); + _logger.LogDebug(" grpc client created, basketData={@basketData}", basketData); - _logger.LogDebug(" grpc client created, basketData={@basketData}", basketData); - - try - { - var command = MapToOrderDraftCommand(basketData); - var response = await client.CreateOrderDraftFromBasketDataAsync(command); - - _logger.LogDebug(" grpc response: {@response}", response); - - return MapToResponse(response, basketData); - } - catch (RpcException e) - { - _logger.LogError($"Error calling via grpc to ordering: {e.Status} - {e.Message}"); - } - } - } + var command = MapToOrderDraftCommand(basketData); + var response = await client.CreateOrderDraftFromBasketDataAsync(command); + _logger.LogDebug(" grpc response: {@response}", response); - return null; + return MapToResponse(response, basketData); + }); } private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft, BasketData basketData)