public DnsServiceEntry CreateServiceEntry(Type service)
        {
            DnsServiceEntry result        = null;
            var             routeTemplate = service.GetCustomAttribute <ServiceBundleAttribute>();
            var             objInstance   = _serviceProvider.GetInstances(service);
            var             behavior      = objInstance as DnsBehavior;
            var             path          = RoutePatternParser.Parse(routeTemplate.RouteTemplate, service.Name);

            if (path.Length > 0 && path[0] != '/')
            {
                path = $"/{path}";
            }
            if (behavior != null)
            {
                result = new DnsServiceEntry
                {
                    Behavior = behavior,
                    Type     = behavior.GetType(),
                    Path     = path,
                }
            }
            ;
            return(result);
        }
    }
        /// <summary>
        /// 获取服务条目集合。
        /// </summary>
        /// <returns>服务条目集合。</returns>
        public DnsServiceEntry GetEntry()
        {
            var services = _types.ToArray();

            if (_dnsServiceEntry == null)
            {
                _dnsServiceEntry = new DnsServiceEntry();
                foreach (var service in services)
                {
                    var entry = CreateServiceEntry(service);
                    if (entry != null)
                    {
                        _dnsServiceEntry = entry;
                        break;
                    }
                }

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug($"发现了以下dns服务:{_dnsServiceEntry.Type.FullName}。");
                }
            }

            return(_dnsServiceEntry);
        }
        private async Task <DnsTransportMessage> LocalExecuteAsync(DnsServiceEntry entry, DnsTransportMessage message)
        {
            HttpResultMessage <object> resultMessage = new HttpResultMessage <object>();

            try
            {
                var dnsQuestion = message.DnsQuestion;
                message.Address = await entry.Behavior.DomainResolve(dnsQuestion.Name);
            }
            catch (Exception exception)
            {
                if (_logger.IsEnabled(LogLevel.Error))
                {
                    _logger.LogError(exception, "执行本地逻辑时候发生了错误。");
                }
            }
            return(message);
        }
Example #4
0
 public GrpcEndpoint(DnsServiceEntry srv) : base(srv)
 {
 }