![](/img/trans.png)
[英]System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector
[英]A timeout occured after 30000ms selecting a server using CompositeServerSelector
我尝试在 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);
}
但是当我尝试连接数据库时,它显示如下错误:
如果连接到 MongoLab,请在连接字符串的末尾添加“?connect=replicaSet”。
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")
这张 JIRA 票有一些细节: https : //jira.mongodb.org/browse/CSHARP-1160
基本上默认是连接到副本集成员。 但是 MongoLab 的 Single-Node 设置实际上是一个单节点副本集,这导致我们不信任它。 将 ?connect=replicaSet 附加到您的连接字符串将强制驱动程序进入副本集模式,一切都会正常工作。
我正在替换如下所示的连接字符串方法。
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name")
现在已经解决了。
请参阅 Paul Lemke 的回答。
确保您当前的 IP 地址在 mongo db 服务器中列入白名单。 如果您更改您的互联网提供商,则需要将新 IP 列入白名单。
确保您的身份验证数据库设置正确。
当我只提到我想连接的数据库时,我遇到了这个问题,而我的 auth db 是不同的(除了 admin db )。
此行中的db-name被视为 auth DB 。
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")
然后您可以稍后更改选定的数据库
mDb = mClient.GetDatabase(mongoDBName);
相同的错误消息,但在 MongoLabs 部署中未遇到。
我刚刚在使用 Asp.Net Core App 时遇到了标题中列出的相同错误。 我的问题是由于 IOC 配置问题。
在我的 IOC 容器中,我包装的 MongoClient 实例配置了依赖项瞬态生活方式。
根据 MongoDb C# 驱动程序:
建议将 MongoClient 实例存储在全局位置,作为静态变量或具有单例生命周期的 IoC 容器。
我将我的对象的生活方式提升为单身人士,它解决了这个问题。
我在用:
请参考 C# 驱动程序客户端部分: http : //mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/#re-use
确保数据库用户名也区分大小写。 由于用户名区分大小写,我遇到了这个问题。
它与 MongoDB 连接错误有关。 可能您没有权限或您没有在 MongoDB 中指定允许的 IP。 如果您能够连接到您的 MongoDB Atlas,请检查 MongoDB Compose 中的示例。 如果您将无法连接,则意味着您使用了错误的 MongoDB 连接字符串。
我遇到过同样的问题。 我能够使用 MongoDb Compass 连接到 MongoDB Atlas,但是在 C# 项目中使用相同的连接字符串时出现错误“使用 CompositeServerSelector 选择服务器 30000 毫秒后发生超时... ---> System.Net.Internals。 SocketExceptionFactory+ExtendedSocketException (61):连接被拒绝 192.168.1.254:53"。
就我而言,问题是由我的 Internet 提供商路由器引起的。 将连接切换到我 iPhone 的 4G 热点解决了连接问题。
端口 10255 被我的 Internet 提供商/防火墙规则阻止。 在客户端打开这个端口解决了这个问题。
就我而言,在尝试使用docker compose
执行应用程序时,我忘记了环境变量。 通过添加正确的环境变量解决了该问题。
我遇到了这个问题,结果数据库服务器落后了 2 小时。 一旦我修复了它的时间,超时问题就解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.