2012-10-01 80 views
0

我意識到Couchbase提供了一個客戶端到他們的memcached服務器,但我試圖讓enyim.caching客戶端工作。無法獲取Enyim.Caching MemcachedClient與Couchbase配合使用

這裏是我使用的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值返回爲空。沒有錯誤被拋出。

我懷疑問題是圍繞配置中memcached的身份驗證節點中的zone值。在enyim.caching源代碼中的DemoApp代碼(從Github檢索)中,zone永遠不會被指定,但是如果未提供區域,則enyim會拋出錯誤 - 即DemoApp不能正常工作,因爲zone isn'提供。

我不確定這是什麼問題,但我確實知道我不能離開區域,但我不知道該用什麼值。我見過一個使用'AUTHZ'的例子,但這似乎沒有任何區別。

有沒有人看到我在做什麼錯在這裏?任何幫助表示讚賞! :)

回答

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> 

我會盡快爲我能標記這個答案的解決方案。希望這可以幫助別人做出我最頭疼的錯誤。 :)

UPDATE:

參加由約翰Zablocki提供了另一種解決方案的評論一起來看看。謝謝約翰!

+1

另一種選擇是保持Couchbase存儲桶並將端口設置爲112211.使用CouchbaseClient仍然是推薦的方法,但是如果您確實需要持久存儲桶,那麼這是一個選項。 –

+0

我不知道該怎麼做約翰。 Couchbase存儲桶的端口已被設置爲112211(默認情況下)。我不知道如何設置我的配置文件來使用它... –

+2

代碼片段如下。 app.config的設置方式與此類似,但您可以將它設置爲11211而不是8095. 'var cfg = new MemcachedClientConfiguration(); cfg.AddServer(「192.168.56.10」,11211); cfg.Protocol = MemcachedProtocol.Binary; var m =新的MemcachedClient(cfg);' –

相關問題