0

Couchbaseがmemcachedサーバーにクライアントを提供していることはわかっていますが、enyim.cachingクライアントを機能させようとしています。

これは、Couchbaseクライアント(動作する)を使用し、enyim MemcachedClientとほぼ同じことを使用する私の些細なc#コードです。

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コードでは、ゾーンが指定されることはありませんが、ゾーンが指定されていない場合、enyimはエラーをスローします。つまり、ゾーンが指定されていないため、DemoAppはそのまま機能しません。 tが提供されます。

これが問題かどうかはわかりませんが、ゾーンを除外できないことは知っていますが、その値に何を使用すればよいかわかりません。'AUTHZ'が使用された例を見たことがありますが、それは何の違いもないようです。

私がここで間違っていることを誰かが見ていますか?どんな助けでも大歓迎です!:)

4

1 に答える 1

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 が提供する別のソリューションのコメントをご覧ください。ありがとうジョン!

于 2012-10-01T20:32:34.867 に答える