我们正在使用 Azure App Services (B2计划,基于Linux的容器映像,无副本)托管一个 ASP.NET Core MVC(2.2.6)应用程序,会以平均每3分钟1个请求的速率触发对SOAP服务(它是外部供应商的服务)的请求。没有高负载期,请求计划每隔几分钟发生一次。
应用程序在99%的时间内都可以正常运行,但是从Azure仪表板重新启动容器(由于更新或维护)后,对SOAP服务的请求可能开始超时(超时间隔为设置为60秒)。有时,前2-3个请求会通过,然后每个请求都超时。但是,应用程序会在1.5-2小时内自行恢复一次,一切正常,直到下一个容器重新启动。
我们使用了Visual Studio的 WCF Web服务参考工具来生成WCF客户端代码和代理类。我们还将ChannelFactory
类用于通道的可重用性。在经历超时的这段时间内,我尝试使用内置的HttpClient
访问SOAP服务,该服务也超时。但是,当我使用SSH直接连接到容器并尝试使用CURL测试与SOAP服务的连接时,它正在工作。当然,我的本地计算机也没有超时。
这是我们遇到超时时的netstat -peanut
快照(我删除了不相关的连接):
root@XXXXXXXXX:~# netstat -peanut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 1 0 172.16.2.7:41451 XX.XXX.XX.XX:443 CLOSE_WAIT 0 6705221 1/dotnet
tcp 0 1 172.16.2.7:45254 XX.XXX.XX.XX:443 SYN_SENT 0 6876809 1/dotnet
tcp6 0 0 :::80 :::* LISTEN 0 6703040 1/dotnet
没有超时时,不存在带有SYN_SENT
的地址。
你们有没有遇到过类似的事情?你有什么线索可能导致它吗?