Пример #1
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("服务提供者接收到消息。");
            }


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

            var entry = _udpServiceEntryProvider.GetEntry();

            if (entry == null)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError("未实现UdpBehavior实例。");
                }
                return;
            }

            if (udpMessage != null)
            {
                await LocalExecuteAsync(entry, udpMessage);
            }

            await SendRemoteInvokeResult(sender, udpMessage);
        }