Exemplo n.º 1
0
        private HttpRequestMessage CreateRequestMessage(FeignClientHttpRequest request, HttpMethod method, Uri uri)
        {
            FeignHttpRequestMessage requestMessage = new FeignHttpRequestMessage(request, method, uri);

            if (!string.IsNullOrWhiteSpace(request.Accept))
            {
                requestMessage.Headers.Accept.ParseAdd(request.Accept);
            }
            if (request.Headers != null && request.Headers.Length > 0)
            {
                foreach (var header in request.Headers)
                {
                    string[] values = header.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                    if (values.Length == 2)
                    {
                        requestMessage.Headers.TryAddWithoutValidation(values[0], values[1]);
                    }
                }
            }
            if (request.RequestHeaderHandlers != null && request.RequestHeaderHandlers.Count > 0)
            {
                foreach (var handler in request.RequestHeaderHandlers)
                {
                    handler.SetHeader(requestMessage);
                }
            }
            return(requestMessage);
        }
Exemplo n.º 2
0
        protected override Uri LookupRequestUri(FeignHttpRequestMessage requestMessage)
        {
            if (!ShouldResolveService)
            {
                return(requestMessage.RequestUri);
            }
            if (_serviceDiscovery == null)
            {
                ServiceResolveFail(requestMessage);
                return(requestMessage.RequestUri);
            }

            IList <IServiceInstance> services = FeignClient.FeignOptions.DiscoverServiceCacheTime.HasValue ? _serviceDiscovery.GetServiceInstancesWithCache(requestMessage.RequestUri.Host, _serviceCacheProvider, FeignClient.FeignOptions.DiscoverServiceCacheTime.Value) : _serviceDiscovery.GetServiceInstances(requestMessage.RequestUri.Host);

            if (services == null || services.Count == 0)
            {
                ServiceResolveFail(requestMessage);
            }
            return(_serviceResolve.ResolveService(requestMessage.RequestUri, services));
        }
Exemplo n.º 3
0
 internal SendingRequestEventArgs(IFeignClient <TService> feignClient, FeignHttpRequestMessage requestMessage, CancellationToken cancellationToken) : base(feignClient)
 {
     RequestMessage     = requestMessage;
     _cancellationToken = cancellationToken;
 }
Exemplo n.º 4
0
 void ServiceResolveFail(FeignHttpRequestMessage requestMessage)
 {
     throw new ServiceResolveFailException($"Resolve service fail : {requestMessage.RequestUri.ToString()}");
 }
Exemplo n.º 5
0
 internal ErrorRequestEventArgs(IFeignClient <TService> feignClient, FeignHttpRequestMessage requestMessage, Exception exception) : base(feignClient)
 {
     RequestMessage = requestMessage;
     Exception      = exception;
 }
Exemplo n.º 6
0
        private HttpRequestMessage CreateRequestMessage(FeignClientRequest request, HttpMethod method, Uri uri)
        {
            FeignHttpRequestMessage requestMessage = new FeignHttpRequestMessage(request, method, uri);

            return(requestMessage);
        }
        async Task <HttpResponseMessage> SendInternalAsync(FeignHttpRequestMessage request, CancellationToken cancellationToken)
        {
            var current = request.RequestUri;
            CancellationTokenSource cts = null;

            try
            {
                #region BuildingRequest
                BuildingRequestEventArgs <TService> buildingArgs = new BuildingRequestEventArgs <TService>(_feignClient, request.Method.ToString(), request.RequestUri, new Dictionary <string, string>(), request.FeignClientRequest);
                _feignClient.OnBuildingRequest(buildingArgs);
                //request.Method = new HttpMethod(buildingArgs.Method);
                request.RequestUri = buildingArgs.RequestUri;
                if (buildingArgs.Headers != null && buildingArgs.Headers.Count > 0)
                {
                    foreach (var item in buildingArgs.Headers)
                    {
                        request.Headers.TryAddWithoutValidation(item.Key, item.Value);
                    }
                }
                #endregion
                request.RequestUri = LookupRequestUri(request);
                #region SendingRequest
                SendingRequestEventArgs <TService> sendingArgs = new SendingRequestEventArgs <TService>(_feignClient, request, cancellationToken);
                _feignClient.OnSendingRequest(sendingArgs);

                if (sendingArgs.IsTerminated)
                {
                    //请求被终止
                    throw new TerminatedRequestException();
                }
                if (sendingArgs._cancellationTokenSource != null)
                {
                    cts = sendingArgs._cancellationTokenSource;
                    cancellationToken = cts.Token;
                }
                request = sendingArgs.RequestMessage;
                if (request == null)
                {
                    _logger?.LogError($"SendingRequest is null;");
                    return(new HttpResponseMessage(System.Net.HttpStatusCode.ExpectationFailed)
                    {
                        Content = new StringContent(""),
                        //Headers = new System.Net.Http.Headers.HttpResponseHeaders(),
                        RequestMessage = request
                    });
                }
                #endregion

                #region CannelRequest
                CancelRequestEventArgs <TService> cancelArgs = new CancelRequestEventArgs <TService>(_feignClient, request, cancellationToken);
                _feignClient.OnCancelRequest(cancelArgs);
                #endregion

                return(await base.SendAsync(request, cancelArgs.CancellationToken)
#if CONFIGUREAWAIT_FALSE
                       .ConfigureAwait(false)
#endif
                       );
            }
            catch (Exception e)
            {
                if (!e.IsSkipLog())
                {
                    _logger?.LogError(e, "Exception during SendAsync()");
                }
                if (e is HttpRequestException)
                {
                    FeignHttpRequestException feignHttpRequestException = new FeignHttpRequestException(_feignClient, request, (HttpRequestException)e);
                    ExceptionDispatchInfo     exceptionDispatchInfo     = ExceptionDispatchInfo.Capture(feignHttpRequestException);
                    exceptionDispatchInfo.Throw();
                }
                throw;
            }
            finally
            {
                request.RequestUri = current;
                if (cts != null)
                {
                    cts.Dispose();
                }
            }
        }
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            FeignHttpRequestMessage feignRequest = request as FeignHttpRequestMessage;

            return(SendInternalAsync(feignRequest, cancellationToken));
        }
 /// <summary>
 /// 查找服务路径
 /// </summary>
 /// <param name="requestMessage"></param>
 /// <returns></returns>
 protected virtual Uri LookupRequestUri(FeignHttpRequestMessage requestMessage)
 {
     return(requestMessage.RequestUri);
 }
Exemplo n.º 10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            FeignHttpRequestMessage feignRequest = request as FeignHttpRequestMessage;
            var current = request.RequestUri;

            try
            {
                #region BuildingRequest
                BuildingRequestEventArgs buildingArgs = new BuildingRequestEventArgs(_feignClient, request.Method.ToString(), request.RequestUri, new Dictionary <string, string>());
                _feignClient.OnBuildingRequest(buildingArgs);
                //request.Method = new HttpMethod(buildingArgs.Method);
                request.RequestUri = buildingArgs.RequestUri;
                if (buildingArgs.Headers != null && buildingArgs.Headers.Count > 0)
                {
                    foreach (var item in buildingArgs.Headers)
                    {
                        request.Headers.TryAddWithoutValidation(item.Key, item.Value);
                    }
                }
                #endregion
                request.RequestUri = LookupRequestUri(request.RequestUri);
                #region SendingRequest
                SendingRequestEventArgs sendingArgs = new SendingRequestEventArgs(_feignClient, feignRequest);
                _feignClient.OnSendingRequest(sendingArgs);
                if (sendingArgs.IsTerminated)
                {
                    throw new TerminatedRequestException();
                }
                request = sendingArgs.RequestMessage;
                if (request == null)
                {
                    _logger?.LogError($"SendingRequest is null;");
                    return(new HttpResponseMessage(System.Net.HttpStatusCode.ExpectationFailed)
                    {
                        Content = new StringContent(""),
                        //Headers = new System.Net.Http.Headers.HttpResponseHeaders(),
                        RequestMessage = request
                    });
                }
                #endregion

                #region CannelRequest
                CancelRequestEventArgs cancelArgs = new CancelRequestEventArgs(_feignClient, cancellationToken);
                _feignClient.OnCancelRequest(cancelArgs);
                #endregion

                return(await base.SendAsync(request, cancellationToken));
            }
            catch (Exception e)
            {
                if (!e.IsSkipLog())
                {
                    _logger?.LogError(e, "Exception during SendAsync()");
                }
                if (e is HttpRequestException)
                {
                    FeignHttpRequestException feignHttpRequestException = new FeignHttpRequestException(_feignClient, feignRequest, (HttpRequestException)e);
                    ExceptionDispatchInfo     exceptionDispatchInfo     = ExceptionDispatchInfo.Capture(feignHttpRequestException);
                    exceptionDispatchInfo.Throw();
                }
                throw;
            }
            finally
            {
                request.RequestUri = current;
            }
        }
 internal SendingRequestEventArgs(IFeignClient feignClient, FeignHttpRequestMessage requestMessage) : base(feignClient)
 {
     RequestMessage = requestMessage;
 }