【问题标题】:How to determine if a Couchbase bucket exists using .NET client?如何使用 .NET 客户端确定 Couchbase 存储桶是否存在?
【发布时间】:2012-02-28 19:07:58
【问题描述】:

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

如果你指定了一个不存在的bucket,似乎没有什么好的迹象,所有的Get()调用都只是返回null。这可能会让人很困惑。

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

【问题讨论】:

    标签: c# .net couchbase


    【解决方案1】:

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

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多