MongolabsにMongoデータベースをデプロイしようとすると、すべてが正常に機能し、新しいデータベースを作成します。私の接続文字列をご覧ください。
public DbHelper()
{
MongoClientSettings settings = new MongoClientSettings()
{
Credentials = new MongoCredential[] { MongoCredential.CreateCredential("dbname", "username", "password") },
Server = new MongoServerAddress("ds011111.mongolab.com", 11111),
//ConnectTimeout = new TimeSpan(30000)
};
Server = new MongoClient(settings).GetServer();
DataBase = Server.GetDatabase(DatabaseName);
}
しかし、データベースに接続しようとすると、次のようなエラーが表示されます。
以下のように接続文字列メソッドを置き換えています。
new MongoClient("mongodb://username:[email protected]:11111/db-name")
これで解決しました。
Paul Lemkeからの回答をご覧ください。
MongoLabに接続する場合は、接続文字列の末尾に「?connect = replicaSet」を追加します。
new MongoClient("mongodb://username:[email protected]:11111/db-name?connect=replicaSet")
このJIRAチケットには詳細があります。 https://jira.mongodb.org/browse/CSHARP-116
基本的に、デフォルトではレプリカセットメンバーに接続します。しかし、MongoLabの単一ノード設定は実際には単一ノードのレプリカセットであるため、これを信頼しません。接続文字列に?connect = replicaSetを追加すると、ドライバーは強制的にレプリカセットモードに移行し、すべて機能します。
認証データベースが正しく設定されていることを確認してください。
接続したいDBのみに言及したときにこの問題に遭遇しましたが、認証データベースが異なりました(admin db以外)。
この行のdb-nameは、認証DBと見なされます。
new MongoClient("mongodb://username:[email protected]:11111/db-name?connect=replicaSet")
その後、選択したDBを後で変更できます
mDb = mClient.GetDatabase(mongoDBName);
同じエラーメッセージですが、MongoLabsデプロイメントでは発生しません。
Asp.Net Coreアプリのタイトルにリストされているのと同じエラーが発生しました。私の問題はIOC構成の問題によるものでした。
私のIOCコンテナーでは、ラップされたMongoClientインスタンスは依存関係の一時的なライフスタイルで構成されました。
MongoDb C#ドライバーごと:
MongoClientインスタンスは、静的変数として、または寿命がシングルトンのIoCコンテナのいずれかとして、グローバルな場所に保存することをお勧めします。
オブジェクトのライフスタイルをシングルトンに昇格させ、問題を解決しました。
私は使っている:
C#ドライバークライアントセクションを参照してください: http://mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/#re-use
現在のIPアドレスがmongodbサーバーでホワイトリストに登録されていることを確認してください。インターネットプロバイダーを変更する場合は、新しいIPをホワイトリストに登録する必要があります。
データベースのユーザー名でも大文字と小文字が区別されることを確認してください。ユーザー名の大文字と小文字が区別されるため、この問題に遭遇しました。