簡體   English   中英

C# mongo db 驅動程序隨機無法連接到數據庫

[英]C# mongo db driver randomly cannot connect to db

我有控制台應用程序,它通過 C# mongo 驅動程序在單獨的線程中調用 mongo db。 連接池限制為10,連接字符串為:mongodb+srv://login:pass@address/test?retryWrites=true&w=majority&connect=replicaSet

在我啟動控制台應用程序的一半時間里,它會在 30 秒超時后下降。 當我重新啟動應用程序時,它會以 50% 的概率正常工作。 如果第一個操作失敗 - 任何其他操作也會失敗。 如果第一個沒問題,其他任何一個都可以正常工作。

例外:

MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }。 集群狀態的客戶端視圖是 { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [], DnsMonitorException : "DnsClient.DnsResponseException: Unhandled exception ---> System .IndexOutOfRangeException:無法讀取字節 277,超出范圍。在 DnsClient.DnsDatagramReader.ReadByte() 在 DnsClient.DnsDatagramReader.ReadLabels() 在 DnsClient.DnsDatagramReader.ReadQuestionQueryString() 在 DnsClient.DnsRecordFactory.ReadRecordInfo() 在 DnsClientResponseDnsMessage (ArraySegment 1 responseData) at DnsClient.DnsUdpMessageHandler.Query(IPEndPoint server, DnsRequestMessage request, TimeSpan timeout) at DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) --- End of inner異常堆棧跟蹤 --- 在 DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) at DnsClient.LookupClient.QueryInternal(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) at DnsClient.LookupClient.QueryInternal(IReadOnlyCollection 1 servers, DnsQuestion question, Boolean useCache) at DnsClient.LookupClient.Query(String query, QueryType queryType, QueryClass queryClass) at MongoDB.Driver.Core.Misc。 MongoDB.Driver.Core.Clusters.DnsMonitor.Monitor() 處的 DnsClientWrapper.ResolveSrvRecords(String service, CancellationToken cancellingToken)" }.)'

此異常最初是在此調用堆棧中引發的: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.Compiler Services.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) ... [調用堆棧被截斷]

內:

使用 CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } } 選擇服務器 30000 毫秒后發生超時。 集群狀態的客戶端視圖是 { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [], DnsMonitorException : "DnsClient.DnsResponseException: Unhandled exception ---> System .IndexOutOfRangeException:無法讀取字節 277,超出范圍。在 DnsClient.DnsDatagramReader.ReadByte() 在 DnsClient.DnsDatagramReader.ReadLabels() 在 DnsClient.DnsDatagramReader.ReadQuestionQueryString() 在 DnsClient.DnsRecordFactory.ReadRecordInfo() 在 DnsClientResponseDnsMessage (ArraySegment 1 responseData) at DnsClient.DnsUdpMessageHandler.Query(IPEndPoint server, DnsRequestMessage request, TimeSpan timeout) at DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) --- End of inner異常堆棧跟蹤 --- 在 DnsClient.LookupClient.ResolveQuery(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) at DnsClient.LookupClient.QueryInternal(IReadOnlyCollection 1 servers, DnsMessageHandler handler, DnsRequestMessage request, Boolean useCache, LookupClientAudit continueAudit) at DnsClient.LookupClient.QueryInternal(IReadOnlyCollection 1 servers, DnsQuestion question, Boolean useCache) at DnsClient.LookupClient.Query(String query, QueryType queryType, QueryClass queryClass) at MongoDB.Driver.Core.Misc。 MongoDB.Driver.Core.Clusters.DnsMonitor.Monitor() 中的 DnsClientWrapper.ResolveSrvRecords(String service, CancellationToken cancellingToken)"}。

我問了我們的 NodeJS 開發人員,他回答說他沒有這樣的問題。 有人遇到過這個問題嗎?

我也得到了最后一天的確切錯誤。 我不確定確切的問題,但這肯定與我使用的網絡有關。 我通過將我的開發機器連接到我手機的熱點進行了測試,它工作正常。 但是當我再次切換到寬帶連接時,它失敗了。

希望它可以幫助某人。

我還提出了一個關於 mongodb 支持的錯誤。 這是鏈接

編輯:

最終通過將“ DnsClient ”nuget 包升級到 1.3.0 版來修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM