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); }
public GrpcEndpoint(DnsServiceEntry srv) : base(srv) { }