0

Couchbase .NET クライアントを使用して、バケットが存在するかどうかをどのように判断しますか?

存在しないバケットを指定した場合、適切な兆候はないようです。すべてのGet()呼び出しが返されるだけnullです。これはかなり混乱する可能性があります。

この状況を検出して、より役立つエラーを生成したいと考えています。

4

1 に答える 1

1

現時点では、これをクライアントで直接行う方法はありません。私は現在(間もなく開始するように)、より良い例外検出を可能にするためにいくつかの変更に取り組んでいます。それまでの間、2つのオプションがあります。

  1. ロギングを有効にすることができます(これは明らかに実行時に役立ちません)。その方法については、 http://www.couchbase.com/develop/net/currentの「ロギングの設定」というタイトルのセクションを参照してください。

  2. 構成されたバケットに関する情報をサーバーに照会できます。このクエリはすでにコードベースにありますが、API呼び出しを公開しない内部クラスにあります。構成されたバケットをサーバーで構成された実際のバケットと比較する拡張メソッドを作成できます。BucketExists拡張機能を頻繁に呼び出すことはお勧めしませんが、アプリの起動時に1回呼び出す検証メソッドとして機能するはずです。

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

お役に立てば幸いです。

于 2012-03-01T00:16:31.390 に答える