Как определить, существует ли корзина Couchbase с использованием клиента .NET? - PullRequest
0 голосов
/ 28 февраля 2012

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

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

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

1 Ответ

1 голос
/ 01 марта 2012

В настоящее время нет способа сделать это непосредственно в клиенте. В настоящее время я (как и скоро начинаю) работаю над некоторыми изменениями, чтобы улучшить обнаружение исключений. В то же время у вас есть 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;
        }
    }
    

Надеюсь, это поможет.

...