我有一个应用程序(ASP NET .NET Framework)正在向我的 API(.net Framework Web API)发送 HTTP 请求(调用),有时我会遇到这样的错误 - 每个套接字地址(协议/网络地址/端口)通常是允许的。我检查了 netstat 并发现 HttpClient 经常打开连接而不关闭连接,因此每次打开连接以及连接限制已过期时,都会出现该错误。
我在开发/测试和生产环境中看到了错误。但是本地运行没发现错误。
代码示例: 这是对 API 的调用,其中 mainClient() 是一个创建 httpClient 的函数
internal static void DeleteWorkflowDocument(int workflowId, int tableid)
{
HttpResponseMessage responseMessage = mainClient().PostAsync("/api/Workflow/DeleteWorkflowDocument?workflowId=" + workflowId + "&tableid=" + tableid, null).Result;
}
这是 HttpClient 函数
public static HttpClient mainClient()
{
try
{
HttpClient newMainClient = new HttpClient();
newMainClient.BaseAddress = new Uri(System.Configuration.ConfigurationManager.AppSettings["APIURI"]);
newMainClient.DefaultRequestHeaders.Accept.Clear();
newMainClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
newMainClient.Timeout = TimeSpan.FromMinutes(10);
if (HttpContext.Current.Request.Cookies["token__"] != null)
{
newMainClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + HttpContext.Current.Request.Cookies["token__"].Value.ToString());
}
return newMainClient;
}
catch (Exception ex)
{
return null;
}
}
问题源于 HttpClient 不是单例并且每次调用时都会被实例化:
using (HttpClient client = mainClient())
{
}