private async Task OnReceived(IChannelHandlerContext channel, TransportMsg message) { _logger.Debug($"开始触发服务: {message.Id}"); if (message.ContentType == typeof(RemoteCallData).FullName) { IResponse response = new RpcResponse(channel, _serializer, _logger); RemoteExecutorContext thisContext = new RemoteExecutorContext(message, _serviceEntryContainer, response, _serializer, _logger, _serviceDiscovery); RequestDel lastInvoke = new RequestDel(async context => { RemoteCallBackData resultMessage = new RemoteCallBackData(); if (context.ServiceEntry == null) { resultMessage.ExceptionMessage = $"没有此服务:{context.RemoteInvokeMessage.ServiceId}"; await response.WriteAsync(message.Id, resultMessage); } else if (context.ServiceEntry.Descriptor.WaitExecution) { await LocalServiceExecuteAsync(context, resultMessage); await response.WriteAsync(message.Id, resultMessage); } else { await response.WriteAsync(message.Id, resultMessage); await Task.Factory.StartNew(async() => { await LocalServiceExecuteAsync(context, resultMessage); }); } }); foreach (Func <RequestDel, RequestDel> middleware in _middlewares) { lastInvoke = middleware.Invoke(lastInvoke); } await lastInvoke.Invoke(thisContext); } else { _logger.Debug($"msg: {message.Id}, message type is not an RemoteCallData."); } }
private async Task InvokeMiddleware(RequestDel next, ServiceInvokerContext context) { await next.Invoke(context); }
private async Task InvokeMiddleware(RequestDel next, RemoteCallerContext context) { await next.Invoke(context); }