示例#1
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            ManualResetValueTaskSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    task.SetException(new CPlatformCommunicationException(content.ExceptionMessage, content.StatusCode));
                    WirteDiagnosticError(message);
                }
                else
                {
                    task.SetResult(message);
                    WirteDiagnosticAfter(message);
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
示例#2
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug("接收到消息。");
            }

            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    task.TrySetException(new RpcRemoteException(content.ExceptionMessage));
                }
                else
                {
                    task.SetResult(message);
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
示例#3
0
        private void MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Information))
            {
                _logger.Information("接收到消息。");
            }

            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = _objecSerializer.Deserialize <object, RemoteInvokeResultMessage>(message.Content);
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    task.TrySetException(new RpcRemoteException(content.ExceptionMessage));
                }
                else
                {
                    task.SetResult(message);
                }
            }
            if (message.IsInvokeMessage())
            {
                _serviceExecutor?.ExecuteAsync(sender, message);
            }
        }
示例#4
0
 protected ServiceHostAbstract(IServiceExecutor serviceExecutor)
 {
     MessageListener.Received += async(sender, message) =>
     {
         await serviceExecutor.ExecuteAsync(sender, message);
     };
 }
示例#5
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                //if (!string.IsNullOrEmpty(content.ExceptionMessage))
                //{
                //    task.TrySetException(new CPlatformCommunicationException(content.ExceptionMessage));
                //}
                switch (content.StatusCode)
                {
                case StatusCode.OK:
                    task.SetResult(message);
                    break;

                case StatusCode.CPlatformError:
                    task.TrySetException(new CPlatformException(content.ExceptionMessage));
                    break;

                case StatusCode.BusinessError:
                    task.TrySetException(new BusinessException(content.ExceptionMessage));
                    break;

                case StatusCode.CommunicationError:
                    task.TrySetException(new CPlatformCommunicationException(content.ExceptionMessage));
                    break;

                case StatusCode.DataAccessError:
                    task.TrySetException(new DataAccessException(content.ExceptionMessage));
                    break;

                case StatusCode.ValidateError:
                    task.TrySetException(new ValidateException(content.ExceptionMessage));
                    break;
                //case StatusCode.UnKnownError:
                //    task.TrySetException(new CPlatformException(content.ExceptionMessage));
                //    break;

                default:
                    task.TrySetException(new Exception(content.ExceptionMessage));
                    break;
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
示例#6
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            if (_serviceExecutor != null)
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
示例#7
0
 private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
 {
     await _serviceExecutor.ExecuteAsync(sender, message);
 }
示例#8
0
 private void MessageListener_Received(IMessageSender sender, TransportMessage message)
 {
     _serviceExecutor.ExecuteAsync(sender, message);
 }
示例#9
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            ManualResetValueTaskSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    // task.SetException(new CPlatformCommunicationException(content.ExceptionMessage,content.StatusCode));
                    switch (content.StatusCode)
                    {
                    case StatusCode.Success:
                        task.SetResult(message);
                        break;

                    case StatusCode.CPlatformError:
                        task.SetException(new CPlatformException(content.ExceptionMessage, StatusCode.CPlatformError));
                        break;

                    case StatusCode.BusinessError:
                        task.SetException(new BusinessException(content.ExceptionMessage));
                        break;

                    case StatusCode.CommunicationError:
                        task.SetException(new CPlatformCommunicationException(content.ExceptionMessage));
                        break;

                    case StatusCode.DataAccessError:
                        task.SetException(new DataAccessException(content.ExceptionMessage));
                        break;

                    case StatusCode.ValidateError:
                        task.SetException(new ValidateException(content.ExceptionMessage));
                        break;

                    case StatusCode.UserFriendly:
                        task.SetException(new UserFriendlyException(content.ExceptionMessage));
                        break;

                    case StatusCode.UnAuthorized:
                        task.SetException(new UnAuthorizedException(content.ExceptionMessage));
                        break;

                    case StatusCode.UnAuthentication:
                        task.SetException(new UnAuthenticationException(content.ExceptionMessage));
                        break;

                    default:
                        task.SetException(new Exception(content.ExceptionMessage));
                        break;
                    }
                    WirteDiagnosticError(message);
                }
                else
                {
                    task.SetResult(message);
                    WirteDiagnosticAfter(message);
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
示例#10
0
        public async Task OnReceived(IMessageSender sender, string messageId, HttpContext context, IEnumerable <IActionFilter> actionFilters)
        {
            //var serviceRoute = RestContext.GetContext().GetAttachment("route") as ServiceRoute;
            //RestContext.GetContext().RemoveContextParameters("route");
            var path         = HttpUtility.UrlDecode(GetRoutePath(context.Request.Path.ToString()));
            var serviceRoute = await _serviceRouteProvider.GetRouteByPathRegex(path);

            if (serviceRoute == null)
            {
                throw new Exception("路由找不到");
            }
            IDictionary <string, object> parameters = context.Request.Query.ToDictionary(p => p.Key, p => (object)p.Value.ToString());
            object serviceKey = null;

            foreach (var key in _serviceKeys)
            {
                parameters.Remove(key, out object value);
                if (value != null)
                {
                    serviceKey = value;
                    break;
                }
            }

            if (String.Compare(serviceRoute.ServiceDescriptor.RoutePath, path, true) != 0)
            {
                var @params = RouteTemplateSegmenter.Segment(serviceRoute.ServiceDescriptor.RoutePath, path);
                foreach (var param in @params)
                {
                    parameters.Add(param.Key, param.Value);
                }
            }
            var httpMessage = new HttpMessage
            {
                Parameters = parameters,
                RoutePath  = serviceRoute.ServiceDescriptor.RoutePath,
                ServiceKey = serviceKey?.ToString()
            };

            if (context.Request.HasFormContentType)
            {
                var collection = await GetFormCollection(context.Request);

                foreach (var item in collection)
                {
                    httpMessage.Parameters.Add(item.Key, item.Value);
                }
                if (!await OnActionExecuting(new ActionExecutingContext {
                    Context = context, Route = serviceRoute, Message = httpMessage
                },
                                             sender, messageId, actionFilters))
                {
                    return;
                }
                //httpMessage.Attachments = RestContext.GetContext().GetContextParameters();
                await _serviceExecutor.ExecuteAsync(sender, new TransportMessage(messageId, httpMessage));
            }
            else
            {
                StreamReader streamReader = new StreamReader(context.Request.Body);
                var          data         = await streamReader.ReadToEndAsync();

                if (context.Request.Method == "POST")
                {
                    var bodyParams = _serializer.Deserialize <string, IDictionary <string, object> >(data) ?? new Dictionary <string, object>();
                    foreach (var param in bodyParams)
                    {
                        httpMessage.Parameters.Add(param.Key, param.Value);
                    }
                    if (!await OnActionExecuting(new ActionExecutingContext {
                        Context = context, Route = serviceRoute, Message = httpMessage
                    },
                                                 sender, messageId, actionFilters))
                    {
                        return;
                    }
                    //httpMessage.Attachments = RestContext.GetContext().GetContextParameters();
                    await _serviceExecutor.ExecuteAsync(sender, new TransportMessage(messageId, httpMessage));
                }
                else
                {
                    if (!await OnActionExecuting(new ActionExecutingContext {
                        Context = context, Route = serviceRoute, Message = httpMessage
                    },
                                                 sender, messageId, actionFilters))
                    {
                        return;
                    }
                    //httpMessage.Attachments = RestContext.GetContext().GetContextParameters();
                    await _serviceExecutor.ExecuteAsync(sender, new TransportMessage(messageId, httpMessage));
                }
            }

            await OnActionExecuted(context, httpMessage, actionFilters);
        }
示例#11
0
 private void MessageListener_Received(IMessageSender sender, object message)
 {
     _serviceExecutor.ExecuteAsync(sender, message);
 }