azure - 遇到混合连接异常:所有连接的侦听器均未在允许的超时时间内接受连接
问题描述
我有一个到本地 MSSQL 服务器的混合连接,我正在尝试从 Node.js 应用程序访问它。
Node.js 应用程序最初设置为连接到 Azure DB,但要求已更改,现在需要从本地服务器读取数据。
我以前使用过混合连接,但在 .net aspx 应用程序中使用过。
我从应用程序中得到的最初错误是
{
ConnectionError: Failed to connect to SERVERNAME:1433 in 15000ms
at ConnectionError (D:\home\site\wwwroot\node_modules\tedious\lib\errors.js:12:12)
at Connection.connectTimeout (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:944:28)
at Timeout._onTimeout (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:913:16)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
message: 'Failed to connect to SERVERNAME:1433 in 15000ms',
code: 'ETIMEOUT'
}
所以我做了所有常用的连接测试,检查 SQL 用户和权限等。
一切都指向混合连接,但中继在 Azure 门户和服务器上的混合连接管理器中都显示为已连接。
所以启用了混合连接日志,看看这是否会给我更多信息。
HYBRIDCONNECTIVITY_LOGGING_ENABLED 1
这引发了以下错误。
遇到混合连接异常:所有连接的侦听器均未在允许的超时时间内接受连接。
可悲的是我不知道这意味着什么,有没有人遇到过上面的错误,搜索错误带来的结果很少。
如果我使用 Azure 中的 SQLCMD,我会遇到同样的错误,我尝试了完全限定的服务器名称,我检查了所需的端口和防火墙设置,如果我关闭 443 https 出站连接器显示已断开连接。
解决方案
好的,我在一个月前解决了这个问题,基本上虽然服务总线地址被列入白名单,但混合连接器会产生多个连接来传输数据,所以虽然握手和初始连接可以与 Azure 通信,但其他任何东西都不能,因此超时。我最终将我的中继所在的整个 azure 区域列入白名单。您可以在此处下载所有 azure 数据中心 IP 范围
我发现上面粘贴的Mehdi Ibrahim博客非常有用,在过去的 12 个月里,我遇到了其中的每一个问题。
推荐阅读
- c++ - linux sockets cpp recv() - 无法通过http接收完全数据
- node.js - docker-compose up --build 找不到模块
- reactjs - 为什么在为显示属性等类属性调用 setState 时会出错?
- flutter - 小部件可以有一个“联合”状态吗?
- reactjs - 在单击跨度时,我们如何使用 useRef() 获取正确的跨度名称
- batch-file - 在批处理脚本中替换特殊符号
- python-3.x - 如何在 Python 中接受带有 Selenium 的 cookie 弹出窗口
- amazon-web-services - AWS S3 访问策略 - 限制文件夹访问
- web3 - 转账ERC20代币失败:web3.exceptions.ContractLogicError:执行恢复:ERC20:从零地址转账
- javascript - Stripe - 退款结账环节