Domanda

Mi rendo conto che CouchBase fornisce un cliente al loro server MemCached, ma sto cercando di far funzionare il client ENYIM.Caching.

Ecco il mio codice banale c # che utilizza il client di couchbase (che funziona) e quindi praticamente la stessa cosa con 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();
    }
}
.

Ecco la mia 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>
.

Quando passo attraverso il codice, il client CouchBase sembra funzionare bene. Il metodo Get restituisce "Somevalolue" come previsto. Il codice è anche felicemente accadramente attraverso il codice MemCachedClient, ma quando passo attraverso il metodo del negozio, si blocca per 10 secondi (penso che sia il timeout) e quindi il valore myVAL ritorna come null. Non vengono lanciati errori.

Sospetto che il problema ruota attorno al valore zone nel nodo di autenticazione per Memcached nella configurazione. Nel codice DemoAPP che si trova nel codice sorgente ENYIM.Caching (recuperato da GitHub), la zona non viene mai specificata, ma ENYIM getta un errore se la zona non è fornita - vale a dire la demoApp non funziona come perché la zona non è " T Fornito.

Non sono sicuro che questo sia il problema, ma so che non posso lasciare la zona fuori, ma non so cosa usare per quel valore. Ho visto un esempio in cui è stato usato 'Authz', ma non sembra fare alcuna differenza.

Qualcuno vede cosa sto facendo di sbagliato qui? Qualsiasi aiuto è apprezzato! :)

È stato utile?

Soluzione

OK - Ho capito cosa stava succedendo.Sono tornato nella console di CouchBase e ho notato che il mio unico databaset era di tipo couchbase.Quindi, ho creato un nuovo databucket di tipo Memcached.Ho notato che questo tipo di secchio non ha richiesto alcuna autenticazione.Ho dovuto dargli un nuovo porto.

Una volta apportato le modifiche minime al mio file di configurazione, il codice ENYIM.Caching MemCachedClient ha funzionato perfettamente!

Ecco cosa sembra il mio nuovo ENYIM.Caching Stuff come ora:

<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>
.

Segnerò questa risposta come soluzione non appena sono in grado.Speriamo che questo possa aiutare qualcuno a fare il mio errore nocca.:)

Aggiornamento:

Dai un'occhiata ai commenti per un'altra soluzione fornita da John Zablocki.Grazie John!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top