2013-11-26 118 views
0

我知道couchbase的建議是創建一個單一的couchbase客戶端實例,並在整個應用程序中重複使用。但在我的情況下,創建幾個會更容易,因爲它們可能會連接到幾個不同的couchbase服務器,創建實例的時間使用率在這種情況下不是一個因素。但是,似乎創建兩個實例到同一臺服務器失敗。請看下面的代碼:問題同時couchbase客戶端對同一個couchbase服務器

var section = (CouchbaseClientSection)<Section of configuration read from web.config>; 
var client1 = new CouchbaseClient(section); 
//a call to fetch data from client1 here succeeds just fine 
var client2 = new CouchbaseClient(section); 
//a call to fetch data from client2 here fails with the following message: 
//{"Operation is not valid due to the current state of the object."} 

有輕微的修改,並創建第二個之前配置的第一個客戶,它工作得很好:

var section = (CouchbaseClientSection)<Section of configuration read from web.config>; 
var client1 = new CouchbaseClient(section); 
//a call to fetch data from client1 here succeeds just fine 
client1.Dispose(); 
var client2 = new CouchbaseClient(section); 
//a call to fetch data from client2 here succeeds just fine 

其次,如果客戶機程序正在走向另一個coiuchbase實例指向,它也能正常工作:

var section1 = (CouchbaseClientSection)<Section of configuration read from web.config>; 
var section2 = (CouchbaseClientSection)<Another section of configuration read from web.config>; 
var client1 = new CouchbaseClient(section1); 
//a call to fetch data from client1 here succeeds just fine 
var client2 = new CouchbaseClient(section2); 
//a call to fetch data from client2 here succeeds just fine 

因此,如果有兩個活動連接實現在同一時間同一couchbase實例中打開它只是失敗了,但我有在couchbase文檔中沒有發現任何內容,表明這是一個問題。 爲什麼第一個例子失敗?

有沒有人有和我一樣的問題?在某些地方是否需要更改某些設置以允許這樣做?

+0

我不知道當前版本的庫,但在以前的版本(可能是1.2.1)我已經成功創建多個客戶端實例到同一個桶(實際上這是我的錯誤,因爲我創建了一個每個對象的客戶端實例 - 客戶端初始化在對象構造函數中),但它工作。現在可能是開發者添加了一些萬無一失的檢查,以防止像我這樣的人做這樣的事情。 – m03geek

回答

0

這個工程使用AFAIK 1.3.0版本的客戶端:

var section = ConfigurationManager.GetSection("couchbase") as CouchbaseClientSection; 

var client1 = new CouchbaseClient(section); 
var result1 = client1.ExecuteStore(StoreMode.Set, "xxxfnkey1", "xxxfnvalue1"); 
Console.WriteLine("Result1: {0} {1}", result1.Success, result1.Message); 

var getResult1 = client1.ExecuteGet("xxxfnkey1"); 
Console.WriteLine("getResult1: {0} {1}", getResult1.Success, getResult1.Message); 

var client2 = new CouchbaseClient(section); 
var result2 = client2.ExecuteStore(StoreMode.Set, "xxxfnkey2", "xxxfnvalue2"); 
Console.WriteLine("Result2: {0} {1}", result2.Success, result2.Message); 

var getResult2 = client2.ExecuteGet("xxxfnkey2"); 
Console.WriteLine("getResult2: {0} {1}", getResult2.Success, getResult2.Message); 

如果它不爲你工作,它可能與你的配置出現問題。客戶端本身肯定支持從單個配置節創建多個實例。

相關問題