使用 CompositeServerSelector 选择服务器 30000ms 后发生超时
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);
}
但是当我尝试连接数据库时,它显示如下错误:
我正在替换下面的连接字符串方法。
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name")
现在解决了
请参阅 Paul Lemke 的回答。
确保数据库用户名也区分大小写。由于用户名区分大小写,我 运行 进入这个问题。
如果连接到 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 附加到您的连接字符串将强制驱动程序进入副本集模式,并且一切正常。
Found that info here.
相同的错误消息,但在 MongoLabs 部署中未遇到。
我刚刚在 Asp.Net 核心应用程序中遇到了标题中列出的相同错误。我的问题是由于 IOC 配置问题。
在我的 IOC 容器中,我包装的 MongoClient 实例配置了依赖瞬态生活方式。
根据 MongoDb C# Driver:
It is recommended to store a MongoClient instance in a global place,
either as a static variable or in an IoC container with a singleton
lifetime.
我将 object 的生活方式提升为单身,并解决了这个问题。
我正在使用:
- .Net 核心 2.0
- Mongo C# Driver 2.5 版
- 我的 IOC 版本 3.3.0 的温莎城堡
请参考 C# Driver 客户端部分:
http://mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/#re-use
确保您的身份验证数据库设置正确。
当我只提到我想连接的数据库时,我 运行 陷入了这个问题,而我的 auth 数据库是不同的(admin 数据库除外)。
这一行的db-name被认为是auth DB。
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")
然后您可以稍后更改所选的数据库
mDb = mClient.GetDatabase(mongoDBName);
确保您当前的 IP 地址在 mongo 数据库服务器的白名单中。
如果您更改互联网提供商,则需要将新 IP 列入白名单。
我遇到了这个问题,结果是数据库服务器延迟了 2 小时。一旦我确定了它的时间,超时问题就解决了。
这与 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 热点解决了连接问题。
我的 Internet provider/firewall 规则阻止了端口 10255。
在客户端打开这个端口解决了这个问题。
就我而言,在尝试使用 docker compose
执行应用程序时,我忘记了环境变量。通过添加正确的环境变量解决了该问题。
我尝试在 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:password@ds011111.mongolab.com:11111/db-name")
现在解决了
请参阅 Paul Lemke 的回答。
确保数据库用户名也区分大小写。由于用户名区分大小写,我 运行 进入这个问题。
如果连接到 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 附加到您的连接字符串将强制驱动程序进入副本集模式,并且一切正常。
Found that info here.
相同的错误消息,但在 MongoLabs 部署中未遇到。
我刚刚在 Asp.Net 核心应用程序中遇到了标题中列出的相同错误。我的问题是由于 IOC 配置问题。
在我的 IOC 容器中,我包装的 MongoClient 实例配置了依赖瞬态生活方式。
根据 MongoDb C# Driver:
It is recommended to store a MongoClient instance in a global place, either as a static variable or in an IoC container with a singleton lifetime.
我将 object 的生活方式提升为单身,并解决了这个问题。
我正在使用:
- .Net 核心 2.0
- Mongo C# Driver 2.5 版
- 我的 IOC 版本 3.3.0 的温莎城堡
请参考 C# Driver 客户端部分: http://mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/#re-use
确保您的身份验证数据库设置正确。
当我只提到我想连接的数据库时,我 运行 陷入了这个问题,而我的 auth 数据库是不同的(admin 数据库除外)。
这一行的db-name被认为是auth DB。
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")
然后您可以稍后更改所选的数据库
mDb = mClient.GetDatabase(mongoDBName);
确保您当前的 IP 地址在 mongo 数据库服务器的白名单中。 如果您更改互联网提供商,则需要将新 IP 列入白名单。
我遇到了这个问题,结果是数据库服务器延迟了 2 小时。一旦我确定了它的时间,超时问题就解决了。
这与 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 热点解决了连接问题。
我的 Internet provider/firewall 规则阻止了端口 10255。 在客户端打开这个端口解决了这个问题。
就我而言,在尝试使用 docker compose
执行应用程序时,我忘记了环境变量。通过添加正确的环境变量解决了该问题。