Question

Je me rends compte que Couchbase fournit un client à son serveur memcached, mais j'essaie de faire fonctionner le client enyim.caching.

Voici mon code c# trivial qui utilise le client Couchbase (qui fonctionne) puis à peu près la même chose avec 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();
    }
}

Voici mon 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>

Lorsque je parcoure le code, le client Couchbase semble fonctionner correctement.La méthode Get renvoie « somevalue » comme prévu.Le code parcourt également joyeusement le code MemcachedClient, mais lorsque je parcoure la méthode Store, il se bloque pendant 10 secondes (je pense que c'est le délai d'attente), puis la valeur myVal renvoie la valeur null.Aucune erreur n'est générée.

Je soupçonne que le problème vient du zone valeur dans le nœud d'authentification pour memcached dans la configuration.Dans le code DemoApp qui se trouve dans le code source enyim.caching (récupéré de Github), la zone n'est jamais spécifiée, mais enyim renvoie une erreur si la zone n'est pas fournie - c'est-à-direla DemoApp ne fonctionne pas telle quelle car la zone n'est pas fournie.

Je ne suis pas sûr que ce soit le problème, mais je sais que je ne peux pas laisser de zone de côté, mais je ne sais pas quoi utiliser pour cette valeur.J'ai vu un exemple où « AUTHZ » a été utilisé, mais cela ne semble pas faire de différence.

Est-ce que quelqu'un voit ce que je fais de mal ici ?Toute aide est appréciée !:)

Était-ce utile?

La solution

Ok, j'ai compris ce qui se passait.Je suis retourné dans la console Couchbase et j'ai remarqué que mon seul databucket était de type Couchbase.J'ai donc créé un nouveau databucket de type Memcached.J'ai remarqué que ce type de bucket ne nécessitait aucune authentification.J'ai dû lui donner un nouveau port.

Une fois que j'ai apporté les modifications minimes à mon fichier de configuration, le code enyim.caching MemcachedClient a parfaitement fonctionné !

Voici à quoi ressemble maintenant ma nouvelle configuration enyim.caching :

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

Je marquerai cette réponse comme la solution dès que je le pourrai.J'espère que cela pourra aider quelqu'un à ne pas commettre mon erreur stupide.:)

MISE À JOUR:

Jetez un œil dans les commentaires pour une autre solution proposée par John Zablocki.Merci Jean !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top