部署到Azure后调用MongoDB时持续出现Http 500超时问题求助
问题重现
本地运行ASP.NET Web API连接MongoDB一切正常,但部署到Azure后,只要涉及MongoDB操作(哪怕只是调用_mongoclient.GetDatabase("MyDatabase").ToString())就触发超时,错误信息如下:
System.TimeoutException: A timeout occurred after 30000ms selecting a server using CompositeServerSelector
排查与解决步骤
检查MongoDB网络访问控制
若使用MongoDB Atlas或云托管MongoDB,需将Azure App Service的所有出站IP地址添加至MongoDB的IP白名单。Azure App Service的出站IP可在门户“属性”面板中查看,务必全部添加,避免遗漏导致的连接失败。
若为Azure Cosmos DB兼容MongoDB,确认已开启“允许所有网络访问”或添加了App Service的IP范围。验证连接字符串配置
确保Azure环境中的MongoDB连接字符串与本地一致,重点检查主机地址(需为公网可访问地址,不能用localhost)、端口、认证用户名/密码是否正确。可临时在连接字符串中添加超时参数延长测试时间:connectTimeoutMS=60000&socketTimeoutMS=60000,确认连接是否恢复后再调整合理值。检查App Service网络配置
若App Service启用了VNet集成,需确认VNet与MongoDB所在网络的路由已打通,且网络安全组(NSG)允许双向流量通过。若使用私有端点连接MongoDB,需验证私有端点的DNS解析正常,App Service能正确解析到MongoDB的私有IP。测试端口可达性
登录Azure App Service的Kudu控制台(https://<app-name>.scm.azurewebsites.net),执行以下命令测试MongoDB端口是否可访问:telnet <mongodb-host> <port> # 或使用nc命令 nc -zv <mongodb-host> <port>若连接失败,说明网络层面存在阻断,需优先排查防火墙或路由规则。
确认驱动版本兼容性
确保本地与Azure环境使用的MongoDB .NET驱动版本一致,避免因版本不兼容导致的连接协议问题。建议使用官方推荐的稳定版本驱动。
内容的提问来源于stack exchange,提问作者Ayes

