我意识到 Couchbase 为他们的 memcached 服务器提供了一个客户端,但我试图让 enyim.caching 客户端工作。
这是我使用 Couchbase 客户端(有效)的琐碎 c# 代码,然后与 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 值返回为 null。没有错误被抛出。
我怀疑问题围绕zone
配置中 memcached 的身份验证节点中的值。在 enyim.caching 源代码(从 Github 检索)中的 DemoApp 代码中,从未指定 zone,但如果未提供 zone,enyim 会抛出错误 - 即 DemoApp 无法按原样工作,因为 zone 没有t 提供。
我不确定这是否是问题所在,但我知道我不能将区域排除在外,但我不知道该值使用什么。我见过一个使用“AUTHZ”的例子,但这似乎没有任何区别。
有人看到我在这里做错了吗?任何帮助表示赞赏!:)