Frage

Mir ist klar, dass Couchbase einen Client für seinen zwischengespeicherten Server bereitstellt, aber ich versuche, den enyim.caching-Client zum Laufen zu bringen.

Hier ist mein trivialer C#-Code, der den Couchbase-Client verwendet (was funktioniert) und dann so ziemlich dasselbe mit dem enyim MemcachedClient:

class Program
{
    static void Main(string[] args)
    {
        var client = new CouchbaseClient();

        client.Store(StoreMode.Set, "somekey", "somevalue");

        var somevalue = client.Get<string>("somekey");

        Console.WriteLine(somevalue);
        Console.ReadLine();

        var mclient = new MemcachedClient();
        mclient.Store(StoreMode.Set, "Hello", "World");
        var myVal = mclient.Get<string>("Hello");
        Console.WriteLine(myVal);
        Console.ReadLine();
    }
}

Hier ist meine app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
      <section name="couchbase" type="Couchbase.Configuration.CouchbaseClientSection, Couchbase"/>
      <sectionGroup name="enyim.com">
        <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />      
      </sectionGroup>
    </configSections>
    <couchbase>
      <servers bucket="default" bucketPassword="myPassword">
        <add uri="http://127.0.0.1:8091/pools"/>
      </servers>
    </couchbase>
<enyim.com>
  <memcached>
    <servers>
      <add address="127.0.0.1" port="8091" />
    </servers>
    <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:10:00" deadTimeout="00:02:00" />
    <authentication type="Enyim.Caching.Memcached.PlainTextAuthenticator, Enyim.Caching" zone="" userName="Administrator" password="myPassword" />
  </memcached>
</enyim.com>
<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>  
</configuration>

Wenn ich den Code durchgehe, scheint der Couchbase-Client einwandfrei zu funktionieren.Die Get-Methode gibt wie erwartet „somevalue“ zurück.Der Code durchläuft auch gerne den MemcachedClient-Code, aber wenn ich die Store-Methode durchlaufe, bleibt er 10 Sekunden lang hängen (ich glaube, das ist die Zeitüberschreitung) und dann wird der myVal-Wert als Null zurückgegeben.Es werden keine Fehler ausgegeben.

Ich vermute, dass das Problem darin liegt zone Wert im Authentifizierungsknoten für Memcached in der Konfiguration.Im DemoApp-Code im enyim.caching-Quellcode (von Github abgerufen) wird die Zone nie angegeben, aber enyim gibt einen Fehler aus, wenn die Zone nicht bereitgestellt wird – d. h.Die DemoApp funktioniert nicht so wie sie ist, da keine Zone bereitgestellt wird.

Ich bin mir nicht sicher, ob das das Problem ist, aber ich weiß, dass ich Zone nicht weglassen kann, aber ich weiß nicht, was ich für diesen Wert verwenden soll.Ich habe ein Beispiel gesehen, in dem „AUTHZ“ verwendet wurde, aber das scheint keinen Unterschied zu machen.

Sieht jemand, was ich hier falsch mache?Jede Hilfe ist willkommen!:) :)

War es hilfreich?

Lösung

Ok – ich habe herausgefunden, was los war.Ich ging zurück zur Couchbase-Konsole und stellte fest, dass mein einziger Datenbucket vom Typ Couchbase war.Also habe ich einen neuen Datenbucket vom Typ Memcached erstellt.Mir ist aufgefallen, dass für diesen Bucket-Typ keine Authentifizierung erforderlich ist.Ich musste ihm einen neuen Port geben.

Nachdem ich die minimalen Änderungen an meiner Konfigurationsdatei vorgenommen hatte, funktionierte der MemcachedClient-Code von enyim.caching perfekt!

So sieht mein neues enyim.caching-Konfigurationsmaterial jetzt aus:

<enyim.com>
  <memcached>
    <servers>
      <add address="127.0.0.1" port="8095" />
    </servers>
    <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:10:00" deadTimeout="00:02:00" />
  </memcached>
</enyim.com>

Ich werde diese Antwort als Lösung markieren, sobald ich dazu in der Lage bin.Hoffentlich kann dies jemandem helfen, meinen verrückten Fehler zu vermeiden.:) :)

AKTUALISIEREN:

Schauen Sie in den Kommentaren nach einer weiteren Lösung von John Zablocki.Danke John!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top