Couchbase .NETクライアントを使用すると、バケットが存在するかどうかをどのように判断できますか?.NETクライアントを使用してCouchbaseバケットが存在するかどうかを判断する方法
存在しないバケットを指定すると、良い表示がないように見えます。Get()
コールはすべて、null
を返します。これはかなり混乱することがあります。
この状況を検出してより有用なエラーを生成したいと考えています。
Couchbase .NETクライアントを使用すると、バケットが存在するかどうかをどのように判断できますか?.NETクライアントを使用してCouchbaseバケットが存在するかどうかを判断する方法
存在しないバケットを指定すると、良い表示がないように見えます。Get()
コールはすべて、null
を返します。これはかなり混乱することがあります。
この状況を検出してより有用なエラーを生成したいと考えています。
現時点では、クライアントでこれを直接行う方法はありません。私は現在、(すぐに開始するように)より良い例外検出を可能にするためにいくつかの変更に取り組んでいます。
あなたは(明らかに、実行時にお手伝いをしていないであろう)ログ記録を有効にできます。その間に、あなたは、2つのオプションがあります。方法については、「ログの設定」のセクションのhttp://www.couchbase.com/develop/net/currentを参照してください。
設定済みのバケットに関する情報をサーバに問い合わせることができます。このクエリはすでにコードベースにありますが、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;
}
}
お役に立てば幸いです。