无法让Enyim.Caching MemcachedClient与Couchbase一起使用

时间:2012-10-01 16:40:52

标签: memcached couchbase enyim enyim.caching

我意识到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。没有错误。

我怀疑问题围绕配置中memcached的身份验证节点中的zone值。在enyim.caching源代码(从Github中检索)中的DemoApp代码中,从未指定zone,但如果未提供区域,则enyim会抛出错误 - 即DemoApp不能正常工作,因为zone isn'提供。

我不确定这是不是问题,但我知道我不能将区域排除,但我不知道该用什么值。我已经看到了一个使用'AUTHZ'的例子,但这似乎没有任何区别。

有谁看到我在这里做错了什么?任何帮助表示赞赏! :)

1 个答案:

答案 0 :(得分:0)

好的 - 我知道发生了什么事。我回到Couchbase控制台,注意到我唯一的数据库是Couchbase类型。所以,我创建了一个Memcached类型的新数据库。我注意到这个桶类型不需要身份验证。我确实必须给它一个新的端口。

一旦我对配置文件进行了微小的更改,enyim.caching MemcachedClient代码就完美了!

这是我的新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>

我会尽快将此答案标记为解决方案。希望这可能有助于某人犯下我的愚蠢错误。 :)

更新:

请参阅John Zablocki提供的另一种解决方案的评论。谢谢约翰!