如何确定使用.NET客户端是否存在Couchbase存储桶?

时间:2012-02-28 19:07:58

标签: c# .net couchbase

使用Couchbase .NET客户端,如何确定存在桶?

似乎如果你指定一个不存在的存储桶,则没有任何好的指示,所有Get()调用都会返回null。这可能会令人困惑。

我想检测这种情况并产生更有帮助的错误。

1 个答案:

答案 0 :(得分:1)

此时,无法直接在客户端中执行此操作。我目前(正在开始)正在进行一些更改以允许更好的异常检测。同时,您有两个选择:

  1. 您可以启用日志记录(显然在运行时无法帮助您)。有关如何执行此操作的信息,请参阅http://www.couchbase.com/develop/net/current上标题为“配置日志记录”的部分。

  2. 您可以在服务器上查询有关已配置存储桶的信息。此查询已在代码库中,但在内部类中,不会公开其API调用。您可以创建一个扩展方法,将配置的存储区与服务器上配置的实际存储区进行比较。我不建议经常调用BucketExists扩展,但它应该作为在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;
        }
    }
    
  3. 希望有所帮助。