我意识到couchbase为客户端提供了一个客户端,但我试图让enyim.caching客户端工作。

这是我的琐碎的c#代码,它使用couchbase client(它有效),然后与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代码步骤,但是当我步入存储方法时,它挂起了10秒钟(我认为这是超时),然后将MyVal值返回为null。没有抛出错误。

我怀疑问题围绕在配置中的Memcached的认证节点中的zone值周围左旋。在eNyim.caching源代码(从GitHub检索)中的DemoApp代码中,从未指定区域,但是如果未提供区域,则eNyim会抛出错误 - 即DemoApp不起作用,因为Zone ISN'提供。

我不确定这是问题,但我知道我不能离开区域,但我不知道该价值用什么。我已经看到了一个榜样,其中使用'authz',但这似乎没有任何差异。

有人看到我在这里做错了吗?任何帮助都受到赞赏! :)

有帮助吗?

解决方案

好的 - 我想出了发生了什么。我回到了Couchbase控制台,并注意到我唯一的Databucket是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提供的另一种解决方案的评论。谢谢约翰!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top