无法获得enyim.caching memcachedclient与couchbase一起使用
-
12-12-2019 - |
题
我意识到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提供的另一种解决方案的评论。谢谢约翰!