测试App Service是否可以访问其他DNS
当应用服务(Azure App Service)创建完成后,想通过ping命令来查看是否可以访问其他站点或解析DNS,但是发现ping命令无法使用。这是因为App Service存在安全约束,因此无法通过控制台运行 ping、nslookup 和 tracert 工具 。为了测试DNS功能和测试主机TCP的连接问题,App Service 提供了两个命令
- nameresolver.exe 用于测试 DNS 功能,命令格式为:nameresolver.exe hostname [optional: DNS Server]
- tcpping.exe 测试与主机的 TCP 连接情况,以及端口组合情况,命令格式为:tcpping.exe hostname [optional: port]
注:若要了解可供应用在控制台中使用的 DNS 服务器,请查看环境变量 WEBSITE_DNS_SERVER 和 WEBSITE_ALT_DNS_SERVER。可参考:
【应用服务 App Service】当遇见某些域名在Azure App Service中无法解析的错误,可以通过设置指定DNS解析服务器来解决
如果使用ping命令,则出现Unable to contact IP driver. General failure提示,所以可以使用tcpping.exe, 测试结果如下:
(注:执行命令的页面为App Service的高级管理工具 -- Kudu,进入方式可以从门户中(高级工具 -- Kudu) 或通过在app service KUDU 的URL:https://<your site>.scm.chinacloudsites.cn/DebugConsole)
Azure App Service的有HTTP请求超时时间为230秒的默认限制
为何我的请求在 230 秒后超时
Azure 负载均衡器的默认空闲超时设置为四分钟。 这通常是 Web 请求合理的响应时间限制。 如果 Web 应用需要后台处理,建议使用 Azure WebJobs。 Azure Web 应用可以调用 WebJobs,并在后台处理完成时收到通知。 有多种方法可用于使用 WebJobs,包括队列和触发器。
关于 Azure Web 应用 4 分钟空闲连接的限制
Azure Web 应用后台在处理耗时较长的请求时,并且在此期间,客户端和 Azure Web 应用没有数据交互,即 TCP 连接一直处于空闲状态,此种情况超过 4 分钟后,Azure Web 应用会强制断开于客户端的 TCP 连接,并且客户端如浏览器会收到请求错误。
Azure Web 应用的工作流如下:
根据上图所示,一个 Web 请求首先到 Azure 前端的负载均衡器,负载均衡器将请求转发到对应的实例进行处理,实例中运行的代码还有可能要连接后台数据库。当处理整个请求超过 4 分钟时,为了保证 Azure 后台的网络资源得到有效利用,Azure 服务端将会断开连接。
如果在处理请求期间,有持续的数据传输则不受此限制,比如客户端上传一个大文件,虽然耗时超过 4 分钟,但是在此期间客户端和 Azure 服务端是有持续的数据交互,此种情况不被认为是一个空闲连接。
目前这个空闲连接的时间(默认 4 分钟)是无法修改的。对于需要 4 分钟以上才能处理完毕的一些请求,建议采用异步处理。