private async Task <RpcResponseMessage> SendAsync(RpcRequestMessage request, string route = null) { var logger = new RpcLogger(_log); try { var httpClient = GetOrCreateHttpClient(); var rpcRequestJson = JsonConvert.SerializeObject(request, _jsonSerializerSettings); var httpContent = new StringContent(rpcRequestJson, Encoding.UTF8, "application/json"); logger.LogRequest(rpcRequestJson); var httpResponseMessage = await httpClient.PostAsync(route, httpContent).ConfigureAwait(false); httpResponseMessage.EnsureSuccessStatusCode(); var stream = await httpResponseMessage.Content.ReadAsStreamAsync(); using (var streamReader = new StreamReader(stream)) using (var reader = new JsonTextReader(streamReader)) { var serializer = JsonSerializer.Create(_jsonSerializerSettings); var message = serializer.Deserialize <RpcResponseMessage>(reader); logger.LogResponse(message); return(message); } } catch (Exception ex) { logger.LogException(ex); throw new RpcClientUnknownException("Error occurred when trying to send rpc requests(s)", ex); } }
protected override async Task <RpcResponseMessage> SendAsync(RpcRequestMessage request, string route = null) { var logger = new RpcLogger(_log); try { var httpClient = GetOrCreateHttpClient(); var rpcRequestJson = JsonConvert.SerializeObject(request, _jsonSerializerSettings); var httpContent = new StringContent(rpcRequestJson, Encoding.UTF8, "application/json"); var cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource.CancelAfter(ConnectionTimeout); logger.LogRequest(rpcRequestJson); var httpResponseMessage = await httpClient.PostAsync(route, httpContent, cancellationTokenSource.Token).ConfigureAwait(false); httpResponseMessage.EnsureSuccessStatusCode(); var stream = await httpResponseMessage.Content.ReadAsStreamAsync(); using (var streamReader = new StreamReader(stream)) using (var reader = new JsonTextReader(streamReader)) { var serializer = JsonSerializer.Create(_jsonSerializerSettings); var message = serializer.Deserialize <RpcResponseMessage>(reader); logger.LogResponse(message); return(message); } } catch (TaskCanceledException ex) { var exception = new RpcClientTimeoutException($"Rpc timeout after {ConnectionTimeout.TotalMilliseconds} milliseconds", ex); logger.LogException(exception); throw exception; } catch (Exception ex) { var exception = new RpcClientUnknownException("Error occurred when trying to send rpc requests(s)", ex); logger.LogException(exception); throw exception; } }