Question

En utilisant le client CouchBase .NET, comment déterminer si un seau existe?

Il semble que si vous spécifiez un seau qui n'existe pas, il n'y a aucune bonne indication, tous les Get() Les appels reviennent juste null. Cela peut être assez déroutant.

Je voudrais détecter cette situation et générer une erreur plus utile.

Était-ce utile?

La solution

À l'heure actuelle, il n'y a aucun moyen de le faire directement dans le client. Je suis actuellement (comme en commençant bientôt) à travailler sur certaines modifications pour permettre une meilleure détection des exceptions. En attendant, vous avez 2 options:

  1. Vous pouvez activer la journalisation (ce qui ne vous aidera évidemment pas au moment de l'exécution). Voir la section intitulée "Configuration de la journalisation" à http://www.couchbase.com/develop/net/current Pour plus d'informations sur la façon de le faire.

  2. Vous pouvez interroger le serveur pour plus d'informations sur les seaux configurés. Cette requête est déjà dans la base de code, mais dans une classe interne qui n'expose pas ses appels d'API. Vous pouvez créer une méthode d'extension qui comparera le seau configuré aux seaux réels configurés sur le serveur. Je ne recommanderais pas d'appeler souvent l'extension des bucketexistes, mais cela devrait fonctionner comme une méthode de validation que vous appelez une fois au démarrage de l'APP.

    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;
        }
    }
    

J'espère que cela pourra aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top