/// <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("服务提供者接收到消息。");
            }

            if (!message.IsHttpMessage())
            {
                return;
            }
            HttpMessage httpMessage;

            try
            {
                httpMessage = message.GetContent <HttpMessage>();
                if (httpMessage.Attachments != null)
                {
                    foreach (var attachment in httpMessage.Attachments)
                    {
                        RpcContext.GetContext().SetAttachment(attachment.Key, attachment.Value);
                    }
                }
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "将接收到的消息反序列化成 TransportMessage<httpMessage> 时发送了错误。");
                return;
            }
            var entry = _serviceEntryLocate.Locate(httpMessage);

            if (entry == null)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError($"根据服务routePath:{httpMessage.RoutePath} - {httpMessage.HttpMethod},找不到服务条目。");
                }
                return;
            }
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug("准备执行本地逻辑。");
            }
            HttpResultMessage <object> httpResultMessage = new HttpResultMessage <object>()
            {
            };

            if (_serviceProvider.IsRegisteredWithKey(httpMessage.ServiceKey, entry.Type))
            {
                //执行本地代码。
                httpResultMessage = await LocalExecuteAsync(entry, httpMessage);
            }
            else
            {
                httpResultMessage = await RemoteExecuteAsync(entry, httpMessage);
            }
            await SendRemoteInvokeResult(sender, httpResultMessage);
        }
Exemplo n.º 2
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("服务提供者接收到消息。");
            }

            if (!message.IsHttpMessage())
            {
                return;
            }
            HttpMessage httpMessage;

            try
            {
                httpMessage = message.GetContent <HttpMessage>();
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "将接收到的消息反序列化成 TransportMessage<httpMessage> 时发送了错误。");
                return;
            }
            var entry = _serviceEntryLocate.Locate(httpMessage);

            if (entry == null)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError($"根据服务routePath:{httpMessage.RoutePath},找不到服务条目。");
                }
                return;
            }
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug("准备执行本地逻辑。");
            }
            if (_serviceProvider.IsRegisteredWithKey(httpMessage.ServiceKey, entry.Type))
            {
                HttpResultMessage <object> httpResultMessage = new HttpResultMessage <object>();
                //执行本地代码。
                await LocalExecuteAsync(entry, httpMessage, httpResultMessage);

                //向客户端发送调用结果。
                await SendRemoteInvokeResult(sender, httpResultMessage);
            }
            else
            {
                HttpResultMessage <object> httpResultMessage = new HttpResultMessage <object>();
                await RemoteExecuteAsync(entry, httpMessage, httpResultMessage);
                await SendRemoteInvokeResult(sender, httpResultMessage);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// execute as an asynchronous operation.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="message">The message.</param>
        public async Task ExecuteAsync(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务提供者接收到消息。");
            }

            if (!message.IsHttpMessage())
            {
                return;
            }

            HttpRequestMessage httpMessage;

            try
            {
                httpMessage = message.GetContent <HttpRequestMessage>();
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "将接收到的消息反序列化成 TransportMessage<httpMessage> 时发送了错误。");
                return;
            }

            if (httpMessage.Attachments != null)
            {
                foreach (var attachment in httpMessage.Attachments)
                {
                    RpcContext.GetContext().SetAttachment(attachment.Key, attachment.Value);
                }
            }

            WirteDiagnosticBefore(message);
            var entry = _serviceEntryLocate.Locate(httpMessage);

            var httpResultMessage = new HttpResultMessage <object>();

            if (entry != null && _serviceProvider.IsRegisteredWithKey(httpMessage.ServiceKey, entry.Type))
            {
                //执行本地代码。
                httpResultMessage = await LocalExecuteAsync(entry, httpMessage);
            }
            else
            {
                httpResultMessage = await RemoteExecuteAsync(httpMessage);
            }

            await SendRemoteInvokeResult(sender, message.Id, httpResultMessage);
        }
Exemplo n.º 4
0
        public async Task ExecuteAsync(IMessageSender sender, TransportMessage message)
        {
            if (!message.IsHttpMessage())
            {
                return;
            }
            HttpMessage httpMessage;

            try
            {
                httpMessage = message.GetContent <HttpMessage>();
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + "将接收到的消息反序列化成 TransportMessage<httpMessage> 时发送了错误。");
                return;
            }
            //if (httpMessage.Attachments != null)
            //{
            //    foreach (var attachment in httpMessage.Attachments)
            //        RpcContext.GetContext().SetAttachment(attachment.Key, attachment.Value);
            //}
            WirteDiagnosticBefore(message);
            var entry = _serviceEntryLocate.Locate(httpMessage);

            HttpResultMessage <object> httpResultMessage = new HttpResultMessage <object>()
            {
            };

            if (entry != null)
            {
                //执行本地代码。
                httpResultMessage = await LocalExecuteAsync(entry, httpMessage);
            }
            else
            {
                //httpResultMessage = await RemoteExecuteAsync(httpMessage);
            }
            await SendRemoteInvokeResult(sender, message.Id, httpResultMessage);
        }
Exemplo n.º 5
0
        public async Task ExecuteAsync(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务提供者接收到消息。");
            }

            if (!message.IsHttpMessage())
            {
                return;
            }
            HttpMessage httpMessage;

            try
            {
                httpMessage = message.GetContent <HttpMessage>();
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "将接收到的消息反序列化成 TransportMessage<httpMessage> 时发送了错误。");
                return;
            }
            var entry = _serviceEntryLocate.Locate(httpMessage);

            HttpResultMessage <object> httpResultMessage = new HttpResultMessage <object>()
            {
            };

            if (entry != null && _serviceProvider.IsRegisteredWithKey(httpMessage.ServiceKey, entry.Type))
            {
                //执行本地代码。
                httpResultMessage = await LocalExecuteAsync(entry, httpMessage);
            }
            else
            {
                httpResultMessage = await RemoteExecuteAsync(httpMessage);
            }
            await SendRemoteInvokeResult(sender, httpResultMessage);
        }