Exemple #1
0
        private async Task LogRequestResponseAsync(CentauroTechMessage centauroMessage, Guid messageUid, bool useDefaultEncoding = false)
        {
            Logger.Debug(
                new
            {
                StartTime = centauroMessage.StartTime,
                EndTime   = centauroMessage.EndTime,
                TotalTime = centauroMessage.TotalTime,

                request = new
                {
                    LogMessage     = $"Request object",
                    HttpMessageUid = messageUid,
                    Uri            = centauroMessage.RequestMessage?.RequestUri.ToString(),
                    Method         = centauroMessage.RequestMessage?.Method.ToString(),
                    Headers        = centauroMessage.RequestMessage?.Headers,
                    Content        = await GetContentAsync(centauroMessage.RequestMessage.Content, useDefaultEncoding),
                    RequestSize    = centauroMessage.RequestMessage.Content.ReadAsByteArrayAsync().Result.Length
                },

                response = new
                {
                    LogMessage   = "Response object",
                    RequestUid   = messageUid,
                    StatusCode   = GetSatsusCodeNumber(centauroMessage.ResponseMessage.StatusCode),
                    ReasonPhrase = centauroMessage.ResponseMessage.ReasonPhrase,
                    Headers      = centauroMessage.ResponseMessage?.Headers,
                    Content      = await GetContentAsync(centauroMessage.ResponseMessage.Content, useDefaultEncoding),
                    ResponseSize = centauroMessage.ResponseMessage.Content.ReadAsByteArrayAsync().Result.Length
                }
            });
        }
Exemple #2
0
        /// <summary>
        /// Sends an HTTP request to the inner handler to send to the server as an asynchronous operation.
        /// </summary>
        /// <param name="request"> The HTTP request message to send to the server.</param>
        /// <param name="cancellationToken">A cancellation token to cancel operation.</param>
        /// <returns>Returns System.Threading.Tasks.Task. The task object representing the asynchronous operation</returns>
        /// <exception cref="ArgumentNullException">The request was null.</exception>
        protected async override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (InnerHandler == null)
            {
                InnerHandler = new HttpClientHandler();
            }

            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            var requestUid = Guid.NewGuid();

            var centauroTechMessage = new CentauroTechMessage(request);

            try
            {
                centauroTechMessage.StartTime       = DateTime.Now;
                centauroTechMessage.ResponseMessage = await base.SendAsync(centauroTechMessage.RequestMessage, cancellationToken);

                centauroTechMessage.EndTime = DateTime.Now;

                if (Logger.IsDebugEnabled)
                {
                    try
                    {
                        if (centauroTechMessage.ResponseMessage != null)
                        {
                            await LogRequestResponseAsync(centauroTechMessage, requestUid);
                        }
                    }
                    catch (InvalidOperationException)
                    {
                        Logger.Warn("Unable to parse content! Now trying with the default encoding...");
                        try
                        {
                            await LogRequestResponseAsync(centauroTechMessage, requestUid, true);
                        }
                        catch
                        {
                            throw;
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ex is AggregateException)
                        {
                            ex = ex.InnerException;
                        }

                        Logger.Error("Error getting the response message: " + ex.Message, ex);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex is AggregateException)
                {
                    ex = ex.InnerException;
                }

                Logger.Error("Error generating the log of the request: " + ex.Message, ex);
            }

            return(centauroTechMessage.ResponseMessage);
        }