2017-07-15 45 views
0

我想用Web Api設置CouchbaseServer,以便我可以使用N1QL在NOSQL數據庫Couchbase上啓動基於SQL的查詢。但是我在Getting Bucket中遇到了一個異常。 這是我CouchBaseConfig看起來像:用Web Api驗證CouchbaseServer桶「桶名」失敗

public static class CouchbaseConfig 
    { 
     private static readonly List<string> TravelSampleIndexNames = new List<string> 
     { 
      "def_sourceairport", 
      "def_airportname", 
      "def_type", 
      "def_faa", 
      "def_icao", 
      "def_city" 
     }; 

     public static void Register() 
     { 
      var couchbaseServer = ConfigurationManager.AppSettings.Get("CouchbaseServer"); 
      ClusterHelper.Initialize(new ClientConfiguration 
      { 
       Servers = new List<Uri> { new Uri(couchbaseServer) } 
      }); 

      var bucketName = ConfigurationManager.AppSettings.Get("CouchbaseTravelBucket"); 
      var username = ConfigurationManager.AppSettings.Get("CouchbaseUser"); 
      var password = ConfigurationManager.AppSettings.Get("CouchbasePassword"); 

      EnsureIndexes(bucketName, username, password); 
     } 

     private static void EnsureIndexes(string bucketName, string username, string password) 
     { 
      var bucket = ClusterHelper.GetBucket(bucketName, password); 
      var bucketManager = bucket.CreateManager(username, password); 

      var indexes = bucketManager.ListN1qlIndexes(); 
      if (!indexes.Any(index => index.IsPrimary)) 
      { 
       bucketManager.CreateN1qlPrimaryIndex(true); 
      } 

      var missingIndexes = TravelSampleIndexNames.Except(indexes.Where(x => !x.IsPrimary).Select(x => x.Name)).ToList(); 
      if (!missingIndexes.Any()) 
      { 
       return; 
      } 

      foreach (var missingIndex in missingIndexes) 
      { 
       var propertyName = missingIndex.Replace("def_", string.Empty); 
       bucketManager.CreateN1qlIndex(missingIndex, true, propertyName); 
      } 

      bucketManager.BuildN1qlDeferredIndexes(); 
      bucketManager.WatchN1qlIndexes(missingIndexes, TimeSpan.FromSeconds(30)); 
     } 

     public static void CleanUp() 
     { 
      ClusterHelper.Close(); 
     } 

但是當我運行的Web應用程序,我收到以下錯誤:

AuthenticationException: Authentication failed for bucket 'travel-sample'] 

Snapshot of the exception

任何人都可以請幫我解決這個問題。 在此先感謝!

+0

你調試和檢查,如果你是從應用程序配置獲取用戶名和密碼的正確的價值觀? –

+0

是的,我查過了。我收到了正確的用戶名和密碼。 @ChetanRanpariya –

+0

您使用的是什麼版本的SDK和Couchbase服務器? – jeffrymorris

回答

0

我過去的這個錯誤,通過改變CouchbaseConfig.Register如下:

public static void Register() 
{ 
    var couchbaseServer = ConfigurationManager.AppSettings.Get("CouchbaseServer"); 
    var username = ConfigurationManager.AppSettings.Get("CouchbaseUser"); 
    var password = ConfigurationManager.AppSettings.Get("CouchbasePassword"); 

    ClusterHelper.Initialize(
     new ClientConfiguration 
     { 
      Servers = new List<Uri> { new Uri(couchbaseServer) }, 
     }, 
     new PasswordAuthenticator(username, password)); 

    var bucketName = ConfigurationManager.AppSettings.Get("CouchbaseTravelBucket"); 

    EnsureIndexes(bucketName, username, password); 
}