问题描述
我正在运行C#脚本以执行对分片群集的写入操作。 每当我尝试对数据库执行写操作时,都会收到以
开头的错误使用CompositeServerSelector选择服务器30000ms后发生超时
有人知道我要写成功需要做什么吗?该群集是一个具有一个主节点和两个辅助节点的三节点副本集。
以下是详细信息: 我正在使用Nuget软件包:Mongo.Db.Core,Mongodb.Core.Driver和MongoDb.Bson都具有版本号2.11.2。如果我在控制台中运行db.version(),它将返回4.2.9
我准备了如下所示的连接字符串:
MongoUrlBuilder bldr = new MongoUrlBuilder();
List<MongoServerAddress> servers = new List<MongoServerAddress>();
servers.Add(new MongoServerAddress("the-domain0.azure.mongodb.net",27017));
servers.Add(new MongoServerAddress("the-domain1.azure.mongodb.net",27017));
servers.Add(new MongoServerAddress("the-domain2.azure.mongodb.net",27017));
bldr.Username = "the_user";
bldr.Password = "the_password";
bldr.Servers = servers;
bldr.DatabaseName = "the_db_name";
bldr.ConnectionMode = ConnectionMode.replicaset;
_mongoConnectionString = bldr.ToMongoUrl().ToString();
然后我将其传递给客户端构造函数,如下所示:
var client = new MongoClient(_mongoConnectionString);
IMongoDatabase database = client.GetDatabase("the_db_name");
_the_collection_name = database.GetCollection<CollType>(_collname);
一切正常,直到我需要执行此语句(upsert)
var updateResult = _the_collection_name.UpdateOne(filter,update,new UpdateOptions { IsUpsert = true });
以下是错误的主要方面:
System.TimeoutException:'选择了一个30000ms后发生超时 使用CompositeServerSelector {选择器= MongoDB.Driver.MongoClient + AreSessionsSupportedServerSelector, LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000 }。群集状态的客户端视图为{ClusterId:“ 1”,ConnectionMode :“ replicaset”,类型:“ replicaset”,状态:“ disconnected”,服务器: [{ServerId:“ {ClusterId:1,EndPoint: “未指定/the_domain.azure.mongodb.net:27017” }”,EndPoint: “未指定/the_domain.azure.mongodb.net:27017”, ReasonChanged:“心跳”,状态:“已断开连接”,ServerVersion :、 TopologyVersion :,类型:“未知”,HeartbeatException: “ MongoDB.Driver.MongoConnectionException:发生异常 打开与服务器的连接。
这是完整的堆栈跟踪:
System.TimeoutException:'选择了一个30000ms后发生超时 使用CompositeServerSelector {选择器= MongoDB.Driver.MongoClient + AreSessionsSupportedServerSelector, LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000 }。群集状态的客户端视图为{ClusterId:“ 1”,ConnectionMode :“ replicaset”,类型:“ replicaset”,状态:“ disconnected”,服务器: [{ServerId:“ {ClusterId:1,EndPoint: “未指定/the-domain0.azure.mongodb.net:27017” }”,EndPoint: “未指定/the-domain0.azure.mongodb.net:27017”, ReasonChanged:“心跳”,状态:“已断开连接”,ServerVersion :, TopologyVersion :,类型:“未知”,HeartbeatException: “ MongoDB.Driver.MongoConnectionException:发生异常时 打开与服务器的连接。 ---> MongoDB.Driver.MongoConnectionException:发生异常 从服务器接收消息。 ---> System.IO.EndOfStreamException:尝试读取末尾的内容 流。在 MongoDB.Driver.Core.Misc.StreamExtensionMethods.ReadBytesAsync(Stream 流,Byte []缓冲区,Int32偏移量,Int32计数,TimeSpan超时, CancellationToken cancelToken() MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveBufferAsync(CancellationToken cancelToken)-内部异常堆栈跟踪的结尾-在 MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveMessageAsync(Int32 responseto,IMessageEncoderSelector encoderSelector, MessageEncoderSettings messageEncoderSettings,CancellationToken cancelToken) MongoDB.Driver.Core.WireProtocol.CommandUsingQueryMessageWireProtocol
1.ExecuteAsync(IConnection connection,CancellationToken cancellationToken) at MongoDB.Driver.Core.Connections.IsMasterHelper.GetResultAsync(IConnection connection,CommandWireProtocol
1 isMasterProtocol,CancellationToken cancelToken) MongoDB.Driver.Core.Connections.ConnectionInitializer.InitializeConnectionAsync(IConnection 连接,在: MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancelToken)-内部异常堆栈跟踪的结尾-在 MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancelToken) MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnectionAsync(CancellationToken cancelToken) MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken cancelToken)”,LastHeartbeatTimestamp: “ 2020-09-11T18:25:25.7998117Z”,LastUpdateTimestamp: “ 2020-09-11T18:25:25.7998118Z”},{ServerId:“ {ClusterId:1, 端点: “未指定/the-domain1.azure.mongodb.net:27017” }”,EndPoint: “未指定/the-domain1.azure.mongodb.net:27017”, ReasonChanged:“心跳”,状态:“已断开连接”,ServerVersion :、 TopologyVersion :,类型:“未知”,HeartbeatException: “ MongoDB.Driver.MongoConnectionException:发生异常时 打开与服务器的连接。 ---> MongoDB.Driver.MongoConnectionException:发生异常 从服务器接收消息。 ---> System.IO.EndOfStreamException:尝试读取末尾的内容 流。在 MongoDB.Driver.Core.Misc.StreamExtensionMethods.ReadBytesAsync(Stream 流,Byte []缓冲区,Int32偏移量,Int32计数,TimeSpan超时, CancellationToken cancelToken() MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveBufferAsync(CancellationToken cancelToken)-内部异常堆栈跟踪的结尾-在 MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveMessageAsync(Int32 responseto,IMessageEncoderSelector encoderSelector, MessageEncoderSettings messageEncoderSettings,CancellationToken cancelToken) MongoDB.Driver.Core.WireProtocol.CommandUsingQueryMessageWireProtocol1.ExecuteAsync(IConnection connection,CommandWireProtocol
1 isMasterProtocol,CancellationToken cancelToken) MongoDB.Driver.Core.Connections.ConnectionInitializer.InitializeConnectionAsync(IConnection 连接,在: MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancelToken)-内部异常堆栈跟踪的结尾-在 MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancelToken) MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnectionAsync(CancellationToken cancelToken) MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken cancelToken)”,LastHeartbeatTimestamp: “ 2020-09-11T18:25:25.7920423Z”,LastUpdateTimestamp: “ 2020-09-11T18:25:25.7920425Z”},{ServerId:“ {ClusterId:1, 端点: “未指定/the-domain2.azure.mongodb.net:27017” }”,EndPoint: “未指定/the-domain2.azure.mongodb.net:27017”, ReasonChanged:“心跳”,状态:“已断开连接”,ServerVersion :、 TopologyVersion :,类型:“未知”,HeartbeatException: “ MongoDB.Driver.MongoConnectionException:发生异常时 打开与服务器的连接。 ---> MongoDB.Driver.MongoConnectionException:发生异常 从服务器接收消息。 ---> System.IO.EndOfStreamException:尝试读取末尾的内容 流。在 MongoDB.Driver.Core.Misc.StreamExtensionMethods.ReadBytesAsync(Stream 流,Byte []缓冲区,Int32偏移量,Int32计数,TimeSpan超时, CancellationToken cancelToken() MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveBufferAsync(CancellationToken cancelToken)-内部异常堆栈跟踪的结尾-在 MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveMessageAsync(Int32 responseto,IMessageEncoderSelector encoderSelector, MessageEncoderSettings messageEncoderSettings,CancellationToken cancelToken) MongoDB.Driver.Core.WireProtocol.CommandUsingQueryMessageWireProtocol1.ExecuteAsync(IConnection connection,CommandWireProtocol
1 isMasterProtocol,CancellationToken cancelToken) MongoDB.Driver.Core.Connections.ConnectionInitializer.InitializeConnectionAsync(IConnection 连接,在: MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancelToken)-内部异常堆栈跟踪的结尾-在 MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancelToken) MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnectionAsync(CancellationToken cancelToken) MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken cancelToken)”,LastHeartbeatTimestamp: “ 2020-09-11T18:25:25.5936678Z”,LastUpdateTimestamp: “ 2020-09-11T18:25:25.5936680Z”}]}。'
解决方法
您应该添加UseTls并按如下所示更改DatabaseName:
bldr.DatabaseName = "admin";
bldr.UseTls = true;