Невозможно заставить Enyim.Caching MemcachedClient работать с Couchbase

Я понимаю, что Couchbase предоставляет клиент для их сервера memcached, но я пытаюсь заставить работать клиент enyim.caching.

Вот мой тривиальный код на C#, который использует клиент Couchbase (который работает), а затем почти то же самое с 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();
    }
}

Вот мой 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>

Когда я выполняю код, клиент Couchbase работает нормально. Метод Get возвращает "somevalue", как и ожидалось. Код также успешно проходит через код MemcachedClient, но когда я перехожу через метод Store, он зависает на 10 секунд (я думаю, что это тайм-аут), а затем значение myVal возвращается как ноль. Ошибки не выбрасываются.

Я подозреваю, что проблема вращается вокруг zone значение в узле аутентификации для memcached в конфиге. В коде DemoApp, который находится в исходном коде enyim.caching (полученном из Github), зона никогда не указывается, но enyim выдает ошибку, если зона не указана - т.е. DemoApp не работает как есть, потому что зона не является ' т предоставляется.

Я не уверен, что это проблема, но я знаю, что не могу оставить зону вне, но я не знаю, что использовать для этого значения. Я видел пример использования AUTHZ, но, похоже, это не имеет значения.

Кто-нибудь видит, что я здесь делаю не так? Любая помощь приветствуется!:)

1 ответ

Решение

Хорошо, я понял, что происходит. Я вернулся в консоль Couchbase и заметил, что мой единственный пакет данных был типа Couchbase. Итак, я создал новый пакет данных типа Memcached. Я заметил, что этот тип корзины не требует аутентификации. Я должен был дать ему новый порт.

После того, как я внес минимальные изменения в свой конфигурационный файл, код MemyachedClient в enyim.caching работал отлично!

Вот как теперь выглядит мой новый конфиг 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>

Я отмечу этот ответ как решение, как только смогу. Надеюсь, это поможет кому-то совершить мою ошибку.:)

ОБНОВИТЬ:

Посмотрите в комментариях другое решение, предоставленное Джоном Заблоки. Спасибо Джон!

Другие вопросы по тегам