2012-02-28 4 views
0

Использование клиента Couchbase .NET, как определить, существует ли ведро?Как определить, существует ли контейнер Couchbase с помощью .NET-клиента?

Похоже, что если вы укажете ведро, которого не существует, нет никакой хорошей информации, все звонки Get() просто вернутся null. Это может быть довольно запутанным.

Я бы хотел обнаружить эту ситуацию и создать более полезную ошибку.

ответ

1

В настоящее время нет никакого способа сделать это прямо в клиенте. Я сейчас (как и в начале), работая над некоторыми изменениями, чтобы обеспечить лучшее обнаружение исключений. В то же время у вас есть 2 варианта:

  1. Вы можете включить ведение журнала (что, очевидно, не поможет вам во время выполнения). См. Раздел «Настройка ведения журнала» по адресу http://www.couchbase.com/develop/net/current для получения информации о том, как это сделать.

  2. Вы можете запросить сервер для получения информации о сконфигурированных ковшиках. Этот запрос уже находится в кодовой базе, но во внутреннем классе, который не предоставляет свои вызовы API. Вы можете создать метод расширения, который будет сравнивать сконфигурированное ведро с фактическими ковши, настроенными на сервере. Я бы не рекомендовал часто использовать расширение BucketExists, но он должен работать как метод проверки, который вы вызываете один раз при запуске приложения.

    public static class CouchbaseClientExtensions { 
    
        public static bool BucketExists(this CouchbaseClient client, CouchbaseClientSection section = null) { 
    
         section = section ?? (CouchbaseClientSection)ConfigurationManager.GetSection("couchbase"); 
    
         var webClient = new WebClient();    
         var bucketUri = section.Servers.Urls.ToUriCollection().First().AbsoluteUri; 
    
         var response = webClient.DownloadString(bucketUri + "/buckets");    
         var jss = new JavaScriptSerializer(); 
         var jArray = jss.DeserializeObject(response) as object[]; 
    
         foreach (var item in jArray) { 
          var jDict = item as Dictionary<string, object>; 
          var bucket = jDict.Single(kv => kv.Key == "name").Value as string; 
          if (bucket == section.Servers.Bucket) { 
           return true; 
          }        
         } 
         return false; 
        } 
    } 
    

Надежда, что помогает.

Смежные вопросы