【发布时间】:2020-01-02 00:10:00
【问题描述】:
我有一个针对 .NET 框架 4.7.2 的 ASP.Net Core 2.2 Web API,在 IIS 下运行,进程外。我看到很多传出网络问题。该应用程序连接到各种事物(SQL 数据库、通过 XMLA 的 SSAS 等),我看到连接到各种资源的全面网络故障。起初我以为它只是 SQL 连接,但它似乎是一般的网络。我经常遇到某种失败,大约十分之一的请求。我在 web.config 中有这个:
<system.net>
<connectionManagement>
<add address="*" maxconnection="65535"/>
</connectionManagement>
</system.net>
这在 Startup.cs 中:
ServicePointManager.DefaultConnectionLimit = int.MaxValue;
但是,失败的不仅仅是 HTTP 连接,主要是 SQL、SSAS、通用 TCP。
失败是诸如 SQL 错误 26、无法连接以及其他非 SQL 网络资源的类似情况。它是间歇性的,盒子上几乎没有任何负载。当 API 调用背靠背时似乎会发生这种情况。
我认为这不是一般网络(路由器/交换机)问题,因为我可以设置,例如,脚本控制台 SQL 连接/选择/拆卸到远程服务之一,显示来自应用程序的连接失败,这永远不会失败,即使在重复循环运行的同时,我看到应用程序连接到同一个数据库时出现错误。 我一定缺少一些 TCP/网络调整,如果有任何建议,将不胜感激。
【问题讨论】:
-
来自 cmd.exe >Ping IP(或名称)。 ping 具有长消息和不同数量的消息的选项。如果您有互联网问题,ping 将显示错误。这就是 ping 的目的。
-
即使 API 应用显示网络错误,我也可以连续运行成功的 ping 而不会丢包。
-
使用 ping 选项 -t -l 65000 提供大量数据。你试过名字和地址吗?返回时间应该非常一致。错误似乎不在网络的 TCP 层。嗅探器数据可能会显示更多信息以帮助解决。 ping 响应在网卡上,不受应用层的影响。所以我怀疑其他一些应用程序正在影响结果。如果病毒检查程序或防火墙正在检查可能导致这些故障的端口号。使用的 IP 路由被 ping 使用,端口号没有被检查。
-
我可以试试这个,但我也可以运行一个脚本连接到同一个 SQL 数据库,有时每两秒从应用程序连接一次失败,这永远不会失败。
-
听起来您可能在从 DNS 服务器获取服务器名称时遇到了时间问题。使用 IP 地址或计算机名称(或两者)是否会失败?
标签: c# .net asp.net-core iis tcp