2017-08-01 1 views
0

Ich führe Integrationstests gegen einen Azure Redis Cache durch. Das ist meine sehr einfache Cache-Implementierung:Azure Redis Cache: Kann in einem Integrationstest eine Verbindung zum Cache hergestellt werden?

public class RedisCacheEngine : ICacheEngine 
{ 
    private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() => 
    { 
     var config = new ConfigurationService(); 
     var connectionString = config.Get("Redis.ConnectionString"); 
     var connection = ConnectionMultiplexer.Connect(connectionString); 
     return connection; 
    }); 

    private static ConnectionMultiplexer Connection => LazyConnection.Value; 

    public TValue Get<TValue>(string key) where TValue : class 
    { 
     var redisValue = Connection.GetDatabase().StringGet(key); 
     return redisValue == RedisValue.Null 
      ? default(TValue) 
      : JsonConvert.DeserializeObject<TValue>(redisValue); 
    } 

    public void Set<TValue>(string key, TValue value) where TValue : class => 
     Connection.GetDatabase().StringSet(key, JsonConvert.SerializeObject(value)); 

    public void Remove(string key) => Connection.GetDatabase().KeyDelete(key); 
} 

Als ich im connection Objekt suchen im Debugger, seine failureMessage Feld liest „SocketFailure auf PING“. Ich glaube nicht, dass der Server das Zeitlimit überschreitet, da das Timeout-Fenster großzügige fünf Sekunden beträgt und ich auf einem schnellen System mit einer schnellen Verbindung bin.

Die Verbindungszeichenfolge ist eine Standard-Azure Redis Cache-String, der Form

myapp.redis.cache.windows.net:6380,password=___,ssl=True,abortConnect=False

I habe versucht, ssl = False zu setzen, aber ohne Erfolg.

Ich würde gerne diese Tests in meiner Build-Umgebung ausführen können, aber im Moment kann ich keine funktionierende Verbindung abrufen. Ich kann nichts Offensichtliches erkennen, dass ich in der Dokumentation fehlen könnte. Gibt es irgendwelche Überprüfungen, die ich durchführen kann, um sicherzustellen, dass ich das Richtige mache?

Antwort

0

Ist es möglich, in einem Integrationstest eine Verbindung zum Cache herzustellen?

Ja, ich habe eine Demo mit dem genannten Code nur mit connection direkt, es funktioniert richtig auf meiner Seite.

private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() => 
     { 
      var connectionString = "mytest.redis.cache.windows.net:6380,password=xxxxxxxx,ssl=True,abortConnect=False"; 
      var connection = ConnectionMultiplexer.Connect(connectionString); 
      return connection; 
     }); 

Nach Ausnahmemeldung SocketFailure auf PING, Ich gehe davon aus, dass Ihre Entwicklungsumgebung Firewall, die Port blockiert wird 6379, 6380.

Wenn Ihr Redis-Dienst Premium-Preisstufe ist, überprüfen Sie, ob eine Firewallregel die Clientverbindung blockiert.

Wenn sich Ihr Netzwerk hinter einer Firewall befindet, versuchen Sie bitte, dass die Ports offen sind. Oder versuchen Sie bitte, eine andere Netzwerkumgebung zu verwenden.

enter image description here

Verwandte Themen