无法使用MongoDB.Driver连接到MongoDB Atlas群集:无法建立连接,因为目标计算机主动拒绝了它

问题描述

我正在尝试从我的ASP.NET Core 3.1应用程序连接到MongoDB Atlas:

var client = new MongoClient("mongodb+srv://<user>:<password>@<my_db_instance>/test?retryWrites=true&w=majority");
var database = client.GetDatabase("test");

我收到以下错误

ExtendedSocketException: No connection Could be made because the target machine actively refused it. <my_ip>:53
System.Net.sockets.socket.EndConnect(IAsyncResult asyncResult)

DnsResponseException: Query 22151 => <my_db_instance> IN TXT on <my_ip>:53 Failed with an error.
DnsClient.LookupClient.ResolveQuery(IReadOnlyList<NameServer> servers,DnsQuerySettings settings,DnsMessageHandler handler,DnsRequestMessage request,LookupClientAudit audit)

我试图将Atlas中的所有IP地址列入白名单,但这并没有帮助。 我的司机:

<packagereference Include="MongoDB.Driver" Version="2.11.1" />
<packagereference Include="MongoDB.Driver.Core" Version="2.11.1" />

添加了.Core驱动程序来尝试解决此问题,但这也无济于事。我在做什么错了?

P.S。我可以连接mongo shell。

解决方法

No connection could be made because the target machine actively refused it.不是白名单问题。

连接被拒绝意味着远程IP上的计算机接收到该数据包,但是没有进程在指定的端口上进行侦听。

错误报告远程IP为<my_ip>:53。端口53是DNS解析器的注册端口。 。 因此,如果您在<my_ip>上作为DNS服务器运行,则需要弄清楚为什么它不监听。

如果不是my_ip上运行DNS服务器,则需要弄清楚为什么asp.net使用<my_ip>作为其DNS解析器。

您还可以尝试为群集使用旧版mongodb://网址,以查看问题是否仅与SRV和TXT分辨率有关。