예제 #1
0
        /// <summary>
        /// 发送消息。
        /// </summary>
        /// <param name="message">远程调用消息模型。</param>
        /// <returns>远程调用消息的传输消息。</returns>
        public async Task <TransportMessage> SendAsync(RemoteInvokeMessage message)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.Debug("准备发送消息。");
                }

                var transportMessage = TransportMessage.CreateInvokeMessage(message);

                await _messageSender.SendAndFlushAsync(transportMessage);

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.Debug("消息发送成功。");
                }

                return(transportMessage);
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Fatal))
                {
                    _logger.Fatal("消息发送失败。", exception);
                }
                throw;
            }
        }
예제 #2
0
        /// <summary>
        /// 发送消息。
        /// </summary>
        /// <param name="message">远程调用消息模型。</param>
        /// <returns>远程调用消息的传输消息。</returns>
        public async Task SendAsync(TransportMessage transportMessage)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("准备发送消息。");
                }

                try
                {
                    //发送
                    await _messageSender.SendAndFlushAsync(transportMessage);
                }
                catch (Exception exception)
                {
                    throw new Exception("与服务端通讯时发生了异常。", exception);
                }

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("消息发送成功。");
                }
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError(null, exception, "消息发送失败。");
                }
                throw;
            }
        }
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="message">远程调用消息模型</param>
        /// <returns>远程调用消息的传输消息</returns>
        public async Task <RemoteInvokeResultMessage> SendAsync(RemoteInvokeMessage message)
        {
            try
            {
                _logger.LogInformation("");
                Console.WriteLine("准备发送消息");

                var transportMessage = TransportMessage.CreateInvokeMessage(message);

                //注册结果回调
                var callbackTask = RegisterResultCallbackAsync(transportMessage.Id);

                try
                {
                    //发送
                    await _messageSender.SendAndFlushAsync(transportMessage);
                }
                catch (Exception exception)
                {
                    throw new RpcCommunicationException("与服务端通讯时发生了异常", exception);
                }

                Console.WriteLine("消息发送成功");

                return(await callbackTask);
            }
            catch (Exception exception)
            {
                Console.WriteLine("消息发送失败" + exception);
                throw;
            }
        }
예제 #4
0
        public async Task <RemoteInvokeResultMessage> SendAsync(CancellationToken cancellationToken)
        {
            try
            {
                var def              = new Dictionary <string, object>();
                var command          = _app.Model;
                var transportMessage = TransportMessage.CreateInvokeMessage(new RemoteInvokeMessage
                {
                    DecodeJOject = true,
                    Parameters   = string.IsNullOrEmpty(command.Data) ? def : JsonConvert.DeserializeObject <IDictionary <string, object> >(command.Data),
                    ServiceId    = command.ServiceId,
                    ServiceKey   = command.ServiceKey,
                    Attachments  = string.IsNullOrEmpty(command.Attachments) ? def : JsonConvert.DeserializeObject <IDictionary <string, object> >(command.Attachments)
                });

                var callbackTask = RegisterResultCallbackAsync(transportMessage.Id);

                try
                {
                    await _messageSender.SendAndFlushAsync(transportMessage);
                }
                catch (Exception exception)
                {
                    throw;
                }

                return(await callbackTask);
            }
            catch
            {
                throw;
            }
        }
예제 #5
0
        private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId, HttpResultMessage resultMessage)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("准备发送响应消息。");
                }

                await sender.SendAndFlushAsync(new TransportMessage(messageId, resultMessage));

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("响应消息发送成功。");
                }
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError(exception, "发送响应消息时候发生了异常。");
                }
            }
            finally
            {
                RpcContext.RemoveContext();
            }
        }
예제 #6
0
        /// <summary>
        /// 发送消息。
        /// </summary>
        /// <param name="message">远程调用消息模型。</param>
        /// <returns>一个任务。</returns>
        public async Task SendAsync(RemoteInvokeMessage message)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.Debug("准备发送消息。");
                }

                await _messageSender.SendAndFlushAsync(message);

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.Debug("消息发送成功。");
                }
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Fatal))
                {
                    _logger.Fatal("消息发送失败。", exception);
                }
                throw;
            }
        }
        private async Task SendRemoteInvokeErrorResult(IMessageSender sender, string messageId, int statusCode, string errorMessage)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("准备发送响应消息。");
                }

                await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, new RemoteInvokeResultMessage {
                    StatusCode = statusCode, ExceptionMessage = errorMessage
                }));

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("响应消息发送成功。");
                }
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError(exception, "发送响应消息时候发生了异常。");
                }
            }
        }
예제 #8
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="message">远程调用消息模型</param>
        /// <returns>远程调用消息的传输消息</returns>
        public async Task <RemoteInvokeResultMessage> SendAsync(RemoteInvokeMessage message)
        {
            try
            {
                _logger.LogInformation("准备发送消息。");

                var transportMessage = TransportMessage.CreateInvokeMessage(message);

                //注册结果回调
                var callbackTask = RegisterResultCallbackAsync(transportMessage.Id);

                try
                {
                    //发送
                    await _messageSender.SendAndFlushAsync(transportMessage);
                }
                catch (Exception exception)
                {
                    throw new RpcCommunicationException("与服务端通讯时发生了异常", exception);
                }


                _logger.LogInformation("消息发送成功。");

                return(await callbackTask);
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError("消息发送失败。", exception);
                }
                throw;
            }
        }
예제 #9
0
 /// <summary>
 /// 执行。
 /// </summary>
 /// <param name="sender">消息发送者。</param>
 /// <param name="message">调用消息。</param>
 public async Task ExecuteAsync(IMessageSender sender, TransportMessage message)
 {
     if (_logger.IsEnabled(LogLevel.Trace))
     {
         _logger.LogTrace($"服务提供者接收到消。");
     }
     Console.WriteLine($"服务提供者接收到消息,Content:{message.Content},ID:{ message.Id}");
     sender.SendAndFlushAsync(message);
     return;
 }
예제 #10
0
 private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId, HttpResultMessage resultMessage)
 {
     try
     {
         await sender.SendAndFlushAsync(new TransportMessage(messageId, resultMessage));
     }
     catch (Exception exception)
     {
         Console.WriteLine(exception.Message + "发送响应消息时候发生了异常。");
     }
 }
예제 #11
0
        private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId,
                                                  RemoteInvokeResultMessage resultMessage)
        {
            try
            {
                Console.WriteLine("准备发送响应消息");
                await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage));

                Console.WriteLine("响应消息发送成功");
            }
            catch (Exception exception)
            {
                Console.WriteLine("发送响应消息时候发生了异常" + exception);
            }
        }
예제 #12
0
        public async Task <bool> OnActionExecuting(ActionExecutingContext filterContext, IMessageSender sender, string messageId, IEnumerable <IActionFilter> filters)
        {
            foreach (var fiter in filters)
            {
                await fiter.OnActionExecuting(filterContext);

                if (filterContext.Result != null)
                {
                    await sender.SendAndFlushAsync(new TransportMessage(messageId, filterContext.Result));

                    return(false);
                }
            }
            return(true);
        }
        public async Task Handle(string messageId, IMessageSender sender, RemoteInvokeMessage message)
        {
            RpcContext.GetContext()
            .SetAttachments(message.Attachments);


            RemoteResultMessage remoteResultMessage;

            try
            {
                var serviceEntry =
                    _serviceEntryLocator.GetLocalServiceEntryById(message.ServiceId);
                if (serviceEntry == null)
                {
                    throw new LmsException($"通过服务id{message.ServiceId}获取本地服务条目失败", StatusCode.NotFindLocalServiceEntry);
                }
                var tokenValidator = EngineContext.Current.Resolve <ITokenValidator>();
                if (!tokenValidator.Validate())
                {
                    throw new RpcAuthenticationException("rpc token不合法");
                }

                var currentServiceKey = EngineContext.Current.Resolve <ICurrentServiceKey>();
                var result            = await serviceEntry.Executor(currentServiceKey.ServiceKey,
                                                                    message.Parameters);

                remoteResultMessage = new RemoteResultMessage()
                {
                    Result     = result,
                    StatusCode = StatusCode.Success
                };
            }
            catch (Exception e)
            {
                remoteResultMessage = new RemoteResultMessage()
                {
                    ExceptionMessage = e.GetExceptionMessage(),
                    StatusCode       = e.GetExceptionStatusCode(),
                    ValidateErrors   = e.GetValidateErrors()
                };
            }

            var resultTransportMessage = new TransportMessage(remoteResultMessage, messageId);
            await sender.SendAndFlushAsync(resultTransportMessage);
        }
        private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId,
                                                  RemoteInvokeResultMessage resultMessage)
        {
            try
            {
                _logger.LogInformation("准备发送响应消息");
                await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage));

                _logger.LogInformation("响应消息发送成功");
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError("发送响应消息时候发生了异常。", exception);
                }
            }
        }
예제 #15
0
        public async Task <RemoteInvokeResultMessage> SendAsync(RemoteInvokeMessage message,
                                                                CancellationToken cancellationToken)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("准备发送消息。");
                }

                var transportMessage = TransportMessage.CreateInvokeMessage(message);
                WirteDiagnosticBefore(transportMessage);
                // 注册结果回调
                var callbackTask = RegisterResultCallbackAsync(transportMessage.Id, cancellationToken);

                try
                {
                    // 发送
                    await _messageSender.SendAndFlushAsync(transportMessage);
                }
                catch (Exception exception)
                {
                    throw new CommunicationException("与服务端通讯时发生了异常。", exception);
                }

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("消息发送成功。");
                }

                return(await callbackTask);
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError(exception, "消息发送失败。");
                }

                throw;
            }
        }
예제 #16
0
        public async Task <bool> OnActionExecuting(HttpContext context, HttpMessage message, IMessageSender sender, IEnumerable <IActionFilter> filters)
        {
            foreach (var fiter in filters)
            {
                var filterContext = new ActionExecutingContext()
                {
                    Context = context,
                    Message = message
                };
                await fiter.OnActionExecuting(filterContext);

                if (filterContext.Result != null)
                {
                    await sender.SendAndFlushAsync(new TransportMessage(filterContext.Result));

                    return(false);
                }
            }
            return(true);
        }
예제 #17
0
        private async Task SendRemoteInvokeResult(IMessageSender sender, long messageId, RemoteInvokeResultMessage resultMessage)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("准备发送响应消息。");
                }

                await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage));

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug("响应消息发送成功。");
                }
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError("发送响应消息时候发生了异常。", exception);
                }
            }
        }
예제 #18
0
        private async Task SendRemoteInvokeResult(IMessageSender sender, string messageId, RemoteInvokeResultMessage resultMessage)
        {
            try
            {
                if (_logger.IsEnabled(LogLevel.Debug))
                    _logger.LogDebug("准备发送响应消息。");

                await sender.SendAndFlushAsync(TransportMessage.CreateInvokeResultMessage(messageId, resultMessage));
                if (_logger.IsEnabled(LogLevel.Debug))
                    _logger.LogDebug("响应消息发送成功。");
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                    _logger.LogError("发送响应消息时候发生了异常。", exception);
            }
        }
예제 #19
0
 /// <summary>
 /// 发送消息并清空缓冲区。
 /// </summary>
 /// <param name="message">消息内容。</param>
 /// <returns>一个任务。</returns>
 public Task SendAndFlushAsync(TransportMessage message)
 {
     return(_messageSender.SendAndFlushAsync(message));
 }