System.Net.Sockets.Исключение SocketException: такой хост не известен

#c# #.net #mongodb #.net-core

#c# #.net #mongodb #.net-core

Вопрос:

Это webapi .netcore 2.2, драйвер mongodb 2.11.5. Он пытается подключиться к MongoDB.

Раньше я считал, что это проблема mongodb, но, присмотревшись к сообщению об ошибке, я думаю, что

 at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
at System.Net.Dns.<>c.<GetHostAddressesAsync>b__25_1(IAsyncResult asyncResult)
 

больше говорит о том, где возникает ошибка. Сервер mongodb является виртуальной машиной Linux в сети. API .netcore запущен на компьютере с Windows под управлением IIS. Приложение .net может подключаться, другие инструменты могут подключаться. Поэтому я думаю, что это как-то связано с ядром.

 System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "Automatic", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/​10.29.20.6:27017" }", EndPoint: "Unspecified/​10.29.20.6:27017", ReasonChanged: "Heartbeat", State: "Disconnected", ServerVersion: , TopologyVersion: , Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
   at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
   at System.Net.Dns.<>c.<GetHostAddressesAsync>b__25_1(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at MongoDB.Driver.Core.Connections.TcpStreamFactory.ResolveEndPointsAsync(EndPoint initial)
   at MongoDB.Driver.Core.Connections.TcpStreamFactory.CreateStreamAsync(EndPoint endPoint, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnectionAsync(CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken cancellationToken)", LastHeartbeatTimestamp: "2021-01-12T00:07:17.1297400Z", LastUpdateTimestamp: "2021-01-12T00:07:17.1297404Z" }] }.
   at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(IServerSelector selector, ClusterDescription description)
   at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(Task completedTask)
   at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChanged(IServerSelector selector, ClusterDescription description, Task descriptionChangedTask, TimeSpan timeout, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Clusters.Cluster.SelectServer(IServerSelector selector, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoClient.AreSessionsSupportedAfterServerSelection(CancellationToken cancellationToken)
   at MongoDB.Driver.MongoClient.AreSessionsSupported(CancellationToken cancellationToken)
   at MongoDB.Driver.OperationExecutor.StartImplicitSession(CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSession[TResult](Func`2 func, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.FindSync[TProjection](FilterDefinition`1 filter, FindOptions`2 options, CancellationToken cancellationToken)
   at MongoDB.Driver.FindFluent`2.ToCursor(CancellationToken cancellationToken)
   at MongoDB.Driver.IAsyncCursorSourceExtensions.Any[TDocument](IAsyncCursorSource`1 source, CancellationToken cancellationToken)
   at Shared.viewer.Repositories.MongoRepository`1.OneExists(Expression`1 where) in C:myprojectrepositoriesMongoRepository.cs:line 82
   at WebApi.AssetMngr.Services.AssetService.AssetService.SlideAssetsExist(String slideId) in C:myprojectservicesAssetService.cs:line 142
   at WebApi.AssetMngr.Controllers.AssetsController.SlideAssetsExist(String slideId) in C:myprojectControllersAssetsController.cs:line 150
 

Оба приложения находятся на одном сервере IIS. (Оба приложения фактически работают на нашем демонстрационном сервере)

Просто интересно, сталкивался ли кто-нибудь с такой проблемой. Является ли тайм-аут отвлекающим маневром, и на самом деле есть другая проблема?

Джина

Комментарии:

1. System.Net.Sockets.SocketException: No such host is known . Похоже, ваша конфигурация неверна, исходя из вашего исключения.

2. Я согласен, но значения конфигурации и аутентификации одинаковы для обоих приложений.

3. Я проверил файл журнала mongo, и во время моих неудачных попыток не было никаких новых записей.

4. Я подключаюсь через ip-адрес