Exemplo n.º 1
0
        protected override async Task <T> SendInnerRequestAync <T>(string method, string route = null,
                                                                   params object[] paramList)
        {
            var request  = new RpcRequestMessage(Guid.NewGuid().ToString(), method, paramList);
            var response = await SendAsync(request, route).ConfigureAwait(false);

            HandleRpcError(response);
            return(response.GetResult <T>());
        }
Exemplo n.º 2
0
        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");
                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)
            {
                throw new RpcClientTimeoutException($"Rpc timeout afer {ConnectionTimeout} milliseconds", ex);
            }
            catch (Exception ex)
            {
                logger.LogException(ex);
                throw new RpcClientUnknownException("Error occurred when trying to send rpc requests(s)", ex);
            }
        }