diff --git a/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs b/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs index bc7ee2ee..7ac0293d 100755 --- a/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs +++ b/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs @@ -7,6 +7,8 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.Extensions.Configuration; +using System.Linq; +using System.Net.Sockets; namespace Enyim.Caching.Configuration { @@ -41,23 +43,19 @@ public MemcachedClientConfiguration( var options = optionsAccessor.Value; if ((options == null || options.Servers.Count == 0) && configuration != null) { - var section = configuration.GetSection("enyimMemcached"); + var section = configuration.GetSection("enyimMemcached"); if (section.Exists()) { - section.Bind(options); + section.Bind(options); } else { _logger.LogWarning($"No enyimMemcached setting in appsetting.json. Use default configuration"); options.AddDefaultServer(); - } + } } - Servers = new List(); - foreach (var server in options.Servers) - { - Servers.Add(new DnsEndPoint(server.Address, server.Port)); - } + ConfigureServers(options); SocketPool = new SocketPoolConfiguration(); if (options.SocketPool != null) @@ -172,6 +170,35 @@ public MemcachedClientConfiguration( } } + private void ConfigureServers(MemcachedClientOptions options) + { + Servers = new List(); + foreach (var server in options.Servers) + { + if (!IPAddress.TryParse(server.Address, out var address)) + { + var ip = Dns.GetHostAddresses(server.Address) + .FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork)?.ToString(); + + if (ip == null) + { + _logger.LogError($"Could not resolve host '{server.Address}'."); + } + else + { + _logger.LogInformation($"Memcached server address - {server.Address }({ip}):{server.Port}"); + server.Address = ip; + } + } + else + { + _logger.LogInformation($"Memcached server address - {server.Address }:{server.Port}"); + } + + Servers.Add(new DnsEndPoint(server.Address, server.Port)); + } + } + /// /// Adds a new server to the pool. /// diff --git a/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs b/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs index f413a8c8..cf7ec189 100644 --- a/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs +++ b/Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs @@ -5,6 +5,8 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Enyim.Caching.Configuration; +using Enyim.Caching.Memcached; namespace Microsoft.AspNetCore.Builder { @@ -12,16 +14,18 @@ public static class EnyimMemcachedApplicationBuilderExtensions { public static IApplicationBuilder UseEnyimMemcached(this IApplicationBuilder app) { + var logger = app.ApplicationServices.GetService>(); try { - app.ApplicationServices.GetService() - .GetAsync("EnyimMemcached").Wait(); - Console.WriteLine("EnyimMemcached Started."); - } catch (Exception ex) + var client = app.ApplicationServices.GetRequiredService(); + client.GetValueAsync("UseEnyimMemcached").Wait(); + Console.WriteLine("EnyimMemcached connected memcached servers."); + } + catch (Exception ex) { - app.ApplicationServices.GetService>() - .LogError(new EventId(), ex, "EnyimMemcached Failed."); + logger.LogError(ex, "Failed in UseEnyimMemcached"); } + return app; } } diff --git a/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs b/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs index c83fab53..60dcb804 100644 --- a/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs +++ b/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs @@ -86,7 +86,7 @@ private static IServiceCollection AddEnyimMemcachedInternal(IServiceCollection s services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddTransient(); - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(factory => factory.GetService()); services.AddSingleton(factory => factory.GetService()); diff --git a/MemcachedTest/MemcachedClientTest.cs b/MemcachedTest/MemcachedClientTest.cs index 15fa5780..ce9f2de6 100755 --- a/MemcachedTest/MemcachedClientTest.cs +++ b/MemcachedTest/MemcachedClientTest.cs @@ -34,7 +34,7 @@ protected virtual MemcachedClient GetClient(MemcachedProtocol protocol = Memcach services.AddSingleton(); } - services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Debug).AddConsole()); + services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Information).AddConsole()); IServiceProvider serviceProvider = services.BuildServiceProvider(); var client = serviceProvider.GetService() as MemcachedClient;