我尝试在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-1160
基本上默认是连接到副本集成员。但MongoLab的单节点设置实际上是单节点副本集,这使我们不相信它。将?connect = replicaSet附加到您的连接字符串将强制驱动程序进入副本集模式,所有这些都将起作用。
确保你的auth db设置正确。
当我只提到我想要连接的数据库时,我遇到了这个问题,而我的auth db是不同的(除了admin db)。
此行中的db-name被视为auth DB。
new MongoClient("mongodb://username:[email protected]:11111/db-name?connect=replicaSet")
然后,您可以稍后更改所选的数据库
mDb = mClient.GetDatabase(mongoDBName);
确保数据库用户名也区分大小写。由于用户名的区分大小写,我遇到了这个问题。
确保您当前的IP地址在mongodb服务器中列入白名单。如果您更改您的互联网提供商,则新IP需要列入白名单。
相同的错误消息但MongoLabs部署没有遇到。
我刚刚遇到了标题中列出的与Asp.Net核心应用程序相同的错误。我的问题是由于IOC配置问题。
在我的IOC容器中,我的包装MongoClient实例配置了依赖性瞬态生活方式。
每个MongoDb C#驱动程序:
建议将MongoClient实例存储在全局位置,可以是静态变量,也可以是具有单例生存期的IoC容器。
我将对象的生活方式提升为单身,并解决了这个问题。
我在用:
请参考C#Driver Client部分:http://mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/#re-use