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); } }
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); } }
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); } }
protected ServiceHostAbstract(IServiceExecutor serviceExecutor) { MessageListener.Received += async(sender, message) => { await serviceExecutor.ExecuteAsync(sender, message); }; }
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); } }
private async Task MessageListener_Received(IMessageSender sender, TransportMessage message) { if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace("服务消费者接收到消息。"); } if (_serviceExecutor != null) { await _serviceExecutor.ExecuteAsync(sender, message); } }
private async Task MessageListener_Received(IMessageSender sender, TransportMessage message) { await _serviceExecutor.ExecuteAsync(sender, message); }
private void MessageListener_Received(IMessageSender sender, TransportMessage message) { _serviceExecutor.ExecuteAsync(sender, message); }
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); } }
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); }
private void MessageListener_Received(IMessageSender sender, object message) { _serviceExecutor.ExecuteAsync(sender, message); }