Não é possível obter Enyim.O cache de MemcachedClient para trabalhar com o Couchbase
-
12-12-2019 - |
Pergunta
Eu percebo que Couchbase fornece um cliente para o seu servidor memcached, mas eu estou tentando chegar a enyim.o cache de cliente para funcionar.
Aqui está o meu triviais de código c# que usa o Couchbase cliente (que funciona) e, em seguida, praticamente a mesma coisa com o 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();
}
}
Aqui está o meu 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 eu passo através do código, o Couchbase cliente parece funcionar bem.O método Get devolve "somevalue" como esperado.O código também o prazer de passos através do MemcachedClient código, mas quando eu passo pela Loja método, ele trava por 10 segundos (acho que é o tempo limite) e, em seguida, o myVal valor retorna null.Sem erros são lançados.
Eu suspeito que o problema gira em torno da zone
valor da autenticação nó para memcached no config.Em DemoApp código que está na enyim.o cache de código-fonte (obtido a partir do Github), zona nunca é especificado, mas enyim lança um erro se a zona não é fornecida - i.e.DemoApp não funciona como é porque a zona não é fornecida.
Não tenho certeza se este é o problema, mas eu sei que eu não posso deixar de zona, mas eu não sei o que usar para esse valor.Eu vi um exemplo onde 'AUTHZ" foi utilizado, mas que não parece fazer qualquer diferença.
Alguém vê o que eu estou fazendo de errado aqui?Qualquer ajuda é apreciada!:)
Solução
Ok - eu descobri o que estava acontecendo.Eu voltei para o Couchbase Console e notei que a minha única databucket foi do tipo Couchbase.Então, eu criei um novo databucket do tipo Memcached.Notei que esse balde exigido nenhum tipo de autenticação.Eu tive que dar-lhe uma nova porta.
Uma vez eu fiz o mínimo de alterações para o meu arquivo de configuração, o enyim.o cache de MemcachedClient código funcionou perfeitamente!
Aqui está o que o meu novo enyim.o cache de configuração coisas parece agora:
<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>
Vou marcar esta resposta como solução assim que eu sou capaz.Espero que isto possa ajudar alguém de fazer o meu knuckleheaded erro.:)
ATUALIZAÇÃO:
Dê uma olhada nos comentários de outra solução fornecida por John Zablocki.Obrigado João!