Support IP address connection string in Basket.API

Dns.GetHostAddressesAsync can return problematic results when passed an IP address, and if the connection string is already an IP address, we needn't call it anyway.
This commit is contained in:
Charles Lowell 2017-03-21 10:19:11 -07:00
parent 2f3df2715d
commit eba2ea8bf9

View File

@ -94,13 +94,21 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model
private async Task ConnectToRedisAsync() private async Task ConnectToRedisAsync()
{ {
//TODO: Need to make this more robust. Also want to understand why the static connection method cannot accept dns names. // TODO: Need to make this more robust. ConnectionMultiplexer.ConnectAsync doesn't like domain names or IPv6 addresses.
var ips = await Dns.GetHostAddressesAsync(_settings.ConnectionString); if (IPAddress.TryParse(_settings.ConnectionString, out var ip))
_logger.LogInformation($"Connecting to database {_settings.ConnectionString} at IP {ips.First().ToString()}"); {
_redis = await ConnectionMultiplexer.ConnectAsync(ips.First().ToString()); _redis = await ConnectionMultiplexer.ConnectAsync(ip.ToString());
_logger.LogInformation($"Connecting to database at {_settings.ConnectionString}");
}
else
{
// workaround for https://github.com/StackExchange/StackExchange.Redis/issues/410
var ips = await Dns.GetHostAddressesAsync(_settings.ConnectionString);
_logger.LogInformation($"Connecting to database {_settings.ConnectionString} at IP {ips.First().ToString()}");
_redis = await ConnectionMultiplexer.ConnectAsync(ips.First().ToString());
}
} }
} }
} }