शेख*_*ेखर 5 c# asp.net-mvc websocket dotnet-httpclient asp.net-web-api2
我们正在HttpClient用来访问WebAPI另一台服务器上的主机。我们有一个MVC5应用程序,该应用程序正在从WebAPI带有IIS 8.5的窗口服务器2012 R2 获取数据
以下是用于从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;
Run Code Online (Sandbox Code Playgroud)
但是在PT测试期间,我收到多个请求TIME_WAIT状态。因此,我们正在获得套接字异常。
使用HttpClient的最佳实践是什么?
使用后是否有任何可以释放插座的设置。
这里有类似的问题
1. 如何防止套接字/端口耗尽?
2. 为什么HttpClient会使套接字保持打开状态?
但这并没有帮助我。
:InnerException- System.Net.Http.HttpRequestException:发送请求时发生错误。---> System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:通常只允许每个套接字地址(协议/网络地址/端口)使用一种xxx:80在System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket&socket,IPAddress&地址,ConnectSocketState状态,IAsyncResult asyncResult,异常和异常)-内部异常堆栈跟踪的结尾-在System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult,TransportContext&http:// xxxcom // api / GetMenu
您的用法HttpClient是正确的;尽管像某些人评论的那样最好一直使用async,但这不是您错误的原因。
TIME_WAIT是 TCP/IP 连接的强制阶段;一旦建立连接,发起连接关闭的一方将在预先配置的时间内进入此状态。
TCP/IP 具有有限的用于连接进出的端口池。
新连接使用其中的子集(也称为动态或临时端口范围)来在每一侧分配端口。
当尝试创建新的传出连接时,您的应用程序会收到错误“地址正在使用”,但 TCP 已用完动态范围内的本地端口。
根据哪一端发起连接关闭,可能是您的客户端或服务器耗尽了端口。
Microsoft 的这篇文章详细介绍了如何修改 Windows TCP/IP 设置以获得高连接速率:
TIME_WAIT周期从 120 秒更改为 30 秒执行这两项操作会将最大连接速率从 136 个连接/秒增加到大约 2150 个连接/秒。
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |