Azure函数和MongoDB之间的循环连接失败

时间:2019-05-21 17:19:07

标签: c# mongodb azure serverless

我在Azure中部署了一个由计时器触发的功能,该功能每5分钟执行一次对API的GET请求,并将结果存储到服务器中托管的MongoDB中。

在我的本地主机上运行该函数以访问同一MongoDB服务器可以正常工作,但是在Azure上运行该函数时,每10分钟(或两次执行函数)我就会得到一个异常,如下所示:

enter image description here

异常抛出如下:

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

我尝试更改MongoDB客户端配置,但是没有用。为什么在Azure而不是localhost仿真器上会发生这种情况?更重要的是,是否有任何修复或解决方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您在此处打开的连接实际上是5个连接的池(默认情况下),因此您可以直接连接并保持打开状态。我的猜测是您会间歇性地失去与mongolab的连接,并且连接会在这种情况下终止。希望启用auto_reconnect可以解决该问题。

您可以编写ping请求,以检查连接是否有效,如下所示。

var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
server.Ping();

或者在建立连接时

client = new MongoClient("mongodb://localhost");
database = client.GetDatabase(mongoDbStr);
bool isMongoLive = database.RunCommandAsync((Command<BsonDocument>)"{ping:1}").Wait(1000);

if(isMongoLive)
{
    // connected
}
else
{
    // couldn't connect
}

希望有帮助。