C#mongo数据库驱动程序随机无法连接到数据库

时间:2019-12-18 11:16:50

标签: c# mongodb

我有一个控制台应用程序,它通过C#mongo驱动程序在单独的线程中调用mongo db。连接池限制为10,连接字符串为:mongodb + srv:// login:pass @ address / test?retryWrites = true&w = majority&connect = replicaSet

在启动控制台应用程序时,有一半时间在30秒超时后下降。当我重新启动应用程序时,它将以50%的概率正常工作。如果第一次操作失败-其他任何操作也会失败。如果first可以,那么其他都可以。

例外:

  

MongoDB.Driver.MongoClient + AreSessionsSupportedServerSelector,   LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000   }。群集状态的客户端视图为{ClusterId:“ 1”,ConnectionMode   :“ ReplicaSet”,类型:“ ReplicaSet”,状态:“ Disconnected”,服务器:   [],DnsMonitorException:“ DnsClient.DnsResponseException:未处理   异常---> System.IndexOutOfRangeException:无法读取字节277,   超出范围。在DnsClient.DnsDatagramReader.ReadByte()在   DnsClient.DnsDatagramReader.ReadLabels()在   DnsClient.DnsDatagramReader.ReadQuestionQueryString()在   DnsClient.DnsRecordFactory.ReadRecordInfo()在   DnsClient.DnsMessageHandler.GetResponseMessage(ArraySegment 1 responseData) at DnsClient.DnsUdpMessageHandler.Query(IPEndPoint server, DnsRequestMessage request, TimeSpan timeout) at DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1个服务器,   DnsMessageHandler处理程序,DnsRequestMessage请求,布尔值   useCache,LookupClientAuditcontinueAudit)-内部结束   异常堆栈跟踪---   DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) at DnsClient.LookupClient.QueryInternal(IReadOnlyCollection 1个服务器,   DnsQuestion问题,布尔值useCache)位于   DnsClient.LookupClient.Query(String query,QueryType queryType,   QueryClass queryClass)在   MongoDB.Driver.Core.Misc.DnsClientWrapper.ResolveSrvRecords(String   服务,在)   MongoDB.Driver.Core.Clusters.DnsMonitor.Monitor()“}。)'

     

此异常最初是在此调用堆栈上抛出的:     MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(MongoDB.Driver.Core.Clusters.ServerSelectors.IServerSelector,   MongoDB.Driver.Core.Clusters.ClusterDescription)     MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(System.Threading.Tasks.Task)     MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedAsync(MongoDB.Driver.Core.Clusters.ServerSelectors.IServerSelector,   MongoDB.Driver.Core.Clusters.ClusterDescription,   System.Threading.Tasks.Task,System.TimeSpan,   System.Threading.CancellationToken)     System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()     System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)     MongoDB.Driver.Core.Clusters.Cluster.SelectServerAsync(MongoDB.Driver.Core.Clusters.ServerSelectors.IServerSelector,   System.Threading.CancellationToken)     System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()     System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)     System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)       ...       [通话堆栈被截断]

内部:

  

使用以下命令选择服务器30000ms之后发生超时   CompositeServerSelector {选择器=   MongoDB.Driver.MongoClient + AreSessionsSupportedServerSelector,   LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000   }。群集状态的客户端视图为{ClusterId:“ 1”,ConnectionMode   :“ ReplicaSet”,类型:“ ReplicaSet”,状态:“ Disconnected”,服务器:   [],DnsMonitorException:“ DnsClient.DnsResponseException:未处理   异常---> System.IndexOutOfRangeException:无法读取字节277,   超出范围。在DnsClient.DnsDatagramReader.ReadByte()在   DnsClient.DnsDatagramReader.ReadLabels()在   DnsClient.DnsDatagramReader.ReadQuestionQueryString()在   DnsClient.DnsRecordFactory.ReadRecordInfo()在   DnsClient.DnsMessageHandler.GetResponseMessage(ArraySegment 1 responseData) at DnsClient.DnsUdpMessageHandler.Query(IPEndPoint server, DnsRequestMessage request, TimeSpan timeout) at DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1个服务器,   DnsMessageHandler处理程序,DnsRequestMessage请求,布尔值   useCache,LookupClientAuditcontinueAudit)-内部结束   异常堆栈跟踪---   DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) at DnsClient.LookupClient.QueryInternal(IReadOnlyCollection 1个服务器,   DnsQuestion问题,布尔值useCache)位于   DnsClient.LookupClient.Query(String query,QueryType queryType,   QueryClass queryClass)在   MongoDB.Driver.Core.Misc.DnsClientWrapper.ResolveSrvRecords(String   服务,在)   MongoDB.Driver.Core.Clusters.DnsMonitor.Monitor()“}。

我问我们的NodeJS开发人员,他回答说他没有这样的问题。有人遇到这个问题吗?

1 个答案:

答案 0 :(得分:1)

我也收到了最后一天的确切错误。我不确定确切的问题,但它肯定与我使用的网络有关。我通过将开发机器连接到手机的热点进行了测试,并且可以正常工作。但是当我再次切换到宽带连接时,它失败了。

希望它对某人有帮助。

我还提出了有关mongodb支持的错误。这是link

编辑:

最后通过将“ DnsClient ” nuget程序包升级到版本1.3.0进行了修复。