Невозможно заставить 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>
Я отмечу этот ответ как решение, как только смогу. Надеюсь, это поможет кому-то совершить мою ошибку.:)
ОБНОВИТЬ:
Посмотрите в комментариях другое решение, предоставленное Джоном Заблоки. Спасибо Джон!