- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们正在使用 HttpClient
访问托管在另一台服务器上的 WebAPI
。我们有一个 MVC5 应用程序,它从 WebAPI
window server 2012 R2 with IIS 8.5 获取数据
下面是从webapi获取数据的代码
//creating static instance of http client
private static HttpClient client = new HttpClient();
//static method to add common header
static ApiCall()
{
client.DefaultRequestHeaders.Add("Authorization",
string.Format("Value {0}", AppSettings.ApiSecurityKey));
client.DefaultRequestHeaders.ConnectionClose = true;
}
//finally posting data to the api
//objprop contains the data and other setting
string url = "apiurl";
var postContent = new StringContent(objprop.DataForPost,
System.Text.Encoding.UTF8, objprop.ContentType);
response = client.PostAsync(url, postContent).Result;
但是在 PT 测试期间,我收到了多个处于 TIME_WAIT
状态的请求。因此,我们收到套接字异常。
使用 HttpClient 的最佳做法是什么?
有没有什么设置可以在使用后释放套接字。
类似的问题在这里
1. How do I prevent Socket/Port Exhaustion?
2. Why does HttpClient leave sockets open?
但这对我没有帮助。
: InnerException- System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted x.x.x:80 at System.Net.Sockets.Socket.InternalEndConnect(IAsyncResult asyncResult) at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) --- End of inner exception stack trace --- at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) --- End of inner exception stack trace --- : URL- http://x.x.x.com//api/GetMenu
最佳答案
您对HttpClient
的使用是正确的;尽管正如某些人评论的那样,一直使用 async
会更好,但这不是导致错误的原因。
TIME_WAIT
是 TCP/IP 连接的强制阶段;建立连接后,发起连接关闭的一方将在预先配置的时间内进入此状态。
TCP/IP 有一个有限的端口池用于进出连接。
新连接使用其中的一个子集(也称为动态或临时端口范围)在每一侧分配一个端口。
您的应用在尝试创建新的传出连接时收到错误“地址正在使用”,但 TCP 已用完动态范围内的本地端口。
根据哪一端发起连接关闭,可能是您的客户端或服务器用完了端口。
This article from Microsoft详细说明如何修改 Windows TCP/IP 设置以获得高连接率:
TIME_WAIT
时间从 120 秒更改为 30 秒同时执行这两项操作会将最大连接速率从 136 个连接/秒增加到大约 2150 个。
关于c# - HttpClient 连接状态在使用一段时间后保持在 TIME_WAIT 导致套接字异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983303/
我遇到了一个网络服务器问题,该服务器从我公司生产的设备接收信号。设备偶尔会重用它刚刚使用过的源端口。这会导致 SYN 被服务器丢弃。然后设备会重试,直到旧套接字超出服务器上的 TIME_WAIT 时间
我正在尝试避免客户端出现 TIME_WAIT。我连接然后设置 O_NONBLOCK 和 SO_REUSEADDR。我调用 read 直到它返回 0。当 read 返回 0 时,errno 也为 0。我
我正在尝试解析主机名,然后打开/关闭与主机的套接字。 下面的代码工作正常。我遇到的问题是连接似乎没有正确关闭。我只剩下一堆 TIME_WAITS: tcp 0 0 192.16
当我在现场检查 mysql 加载时间时。我得到的结果显示连接为 TIME_WAIT。即使我关闭了每一页上的连接。有时网站不会加载说连接太多。有什么办法可以解决这个问题? 提前感谢您的任何回复或建议 最
我试图通过设置 tcp_fin_timeout 来减少连接处于 TIME_WAIT 状态的时间 详细 here : root:~# sysctl -w net.ipv4.tcp_fin_timeout
我在 C# 中有一个 TCP 隧道。我需要打开和关闭隧道,这是我在服务器和客户端之间的应用程序。我正在使用它来关闭数据连接以测试另一个应用程序。我必须使用特定的端口。 根据我等待重新连接的时间长短,在
我正在尝试避免客户端出现 TIME_WAIT。我连接然后设置 O_NONBLOCK 和 SO_REUSEADDR。我调用 read 直到它返回 0。当 read 返回 0 时,errno 也为 0。我
这个问题在这里已经有了答案: Bind error while recreating socket (4 个答案) 关闭 8 年前。 我知道您会将其掩盖为重复项(question1、question
我设置了一个 TCP 服务器/客户端,它们按照我通常想要的方式进行通信。 我现在想做的是添加允许客户端在连接丢失后自动重新连接到服务器的功能。我无法在线找到有关如何执行此操作的完整信息。 详细信息:-
我开发了一个包含 tcp 服务器的服务。 当我重新启动我的应用程序时,有时我的应用程序无法绑定(bind) TIME_WAIT 的端口原因。 在我的应用程序中,我想在绑定(bind)失败时添加一个过程
我们有一个使用 Apache mod 代理的相当繁忙的网站(每天 100 万页浏览量),该代理在 TIME_WAIT 状态下不断因连接(>1,000)而过载。连接到端口 3306 (mysql),但
在以下情况下,当 TIME_WAIT 中的套接字收到一个段时会发生什么 a) 当它收到丢失的ACK时 b) 当发送节点想要使用服务器上的相同 src_ip:src_port 与服务器已经具有 TIME
假设我有一台服务器运行日间服务。 然后我用telnet连接这个白天服务器,服务器发送时间数据并关闭连接,现在,因为服务器是主动关闭端,应该进入TIME_WAIT状态。 那么,为什么我可以在最后一次 t
我已阅读相关问题: What is the cost of many TIME_WAIT on the server side? 但我还是迷路了。我们有两台应用服务器和一台数据库服务器(都是云服务提供
因此,我在一台服务器上有应用程序 A,它每秒向另一台服务器上的应用程序 B 发送 710 条 HTTP POST 消息,该服务器正在监听单个端口。连接不是保持事件的;他们关门了。 几分钟后,应用程序
我正在编写一个简单的 HTTP 服务器并了解 TIME_WAIT。繁重环境中的真实 Web 服务器如何处理来自数千个用户的请求,而不会在处理请求后所有套接字都卡在 TIME_WAIT 中? (不询问保
我们正在尝试调整一个应用程序,该应用程序通过 TCP 接受消息并且还使用 TCP 进行某些内部消息传递。在负载测试时,我们注意到随着对系统同时发出更多请求,响应时间显着降低(然后完全停止)。在此期间,
我们将 haproxy 1.3.26 托管在配备 2.13 GHz Intel Xeon 处理器的 CentOS 5.9 机器上,该处理器充当众多服务的 http 和 tcp 负载均衡器,峰值吞吐量约
我正在尝试在 GCP 上设置 Aerospike 集群。我正在使用 Core OS 和 Docker 来运行 Aerospike 守护进程。 我在 aerospike.conf 中为 as-node-
我们使用 Apache 服务器作为前端服务器,使用 Tomcat 服务器作为后端。前端客户端是一个 java swing 应用程序。该协议(protocol)是粗麻布的。 有时我们会收到很多小请求。当
我是一名优秀的程序员,十分优秀!