2012-10-01 6 views
0

Couchbase는 memcached 서버에 클라이언트를 제공하지만 enyim.caching 클라이언트를 작동 시키려고합니다.Enyim을 얻을 수 없습니다. MemcachedClient를 Couchbase와 함께 사용하려면

<?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> 

: 여기

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의 :

여기에 거의 enyim MemcachedClient과 같은 일 다음 내 사소한 C#을 (작동)에 카우치베이스 주식회사 클라이언트를 사용하는 코드와의 코드를 단계별로 실행하면 Couchbase 클라이언트가 제대로 작동하는 것처럼 보입니다. Get 메서드는 "somevalue"를 예상대로 반환합니다. 이 코드는 또한 MemcachedClient 코드를 통해 행복하게 단계를 밟지 만 Store 메서드를 단계별로 실행하면 10 초 동안 멈 춥니 다 (타임 아웃이라고 생각합니다). 그런 다음 myVal 값이 null로 반환됩니다. 오류가 발생하지 않습니다.

config에 memcached의 인증 노드에있는 zone 값을 중심으로 문제가 발생한다고 생각합니다. enyim.caching 소스 코드 (Github에서 검색)에있는 DemoApp 코드에서 zone은 지정되지 않지만 영역이 제공되지 않으면 enyim에서 오류가 발생합니다. 즉, demoApp는 zone isn ' 제공됨.

이 문제는 확실하지 않지만 영역을 벗어날 수는 없다는 것을 알고 있지만 그 값으로 무엇을 사용해야할지 모르겠다. 'AUTHZ'가 사용 된 예를 보았지만 차이는없는 것으로 보입니다.

내가 잘못하고있는 사람을 누구나 볼 수 있습니까? 어떤 도움을 주셔서 감사합니다! :)

답변

0

좋아요 - 무슨 일이 일어 났는지 알았습니다. 나는 Couchbase Console로 돌아가서 나의 유일한 databucket이 Couchbase 유형이라는 것을 알아 냈습니다. 그래서, 저는 Memcached 타입의 새로운 databucket을 만들었습니다. 이 버킷 유형은 인증이 필요하지 않은 것으로 나타났습니다. 나는 그것에게 새로운 항구를 주어야했다.

일단 설정 파일을 최소한으로 변경하면 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> 

내가 최대한 빨리 할 수있어 같은 솔루션으로이 응답을 표시합니다. 바라기를 이것은 누군가가 나의 knuckleheaded 실수하는 것을 도울지도 모른다. :)

UPDATE :

존 Zablocki에 의해 제공되는 다른 솔루션에 대한 코멘트에서 살펴 보자. 감사합니다 존!

+1

또 다른 옵션은 Couchbase 버킷을 유지하고 포트를 112211로 설정하는 것입니다. CouchbaseClient를 사용하는 것이 여전히 권장되는 방법이지만 영구 버킷을 원한다면 옵션입니다. –

+0

나는 어떻게 그 일을 할 지 모르겠다. Couchbase 버켓의 포트는 이미 112211 (기본적으로)으로 설정되어 있습니다. 내 config 파일을 사용하여 설정하는 방법을 잘 모르겠습니다 ... –

+2

코드 스 니펫이 이어집니다. app.config도 비슷하게 설정되지만 위와 같이 8095 대신 11211을 설정할 수 있습니다. 'var cfg = new MemcachedClientConfiguration(); cfg.AddServer ("192.168.56.10", 11211); cfg.Protocol = MemcachedProtocol.Binary; var m = new MemcachedClient (cfg); ' –