WinHttpException:与服务器的连接异常终止

Posted

技术标签:

【中文标题】WinHttpException:与服务器的连接异常终止【英文标题】:WinHttpException: The connection with the server was terminated abnormally 【发布时间】:2018-01-23 06:25:36 【问题描述】:

我有一个 ASP.Net Core Wep API 项目,它执行以下任务:

通过名为 ProcessController 的控制器接收请求。 接受传入请求并将数据格式化为字符串。 使用以下 HttpProcessor 类中的 PostChargeAsync 方法将上述格式化消息发布到 URL 并等待响应消息执行进一步处理。

注意HttpClient是使用IoC注入的,是单例的。

public class HttpProcessor

    private readonly HttpClient _httpClient;

    public HttpProcessor(HttpClient httpClient)
    
        _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));            
    

    public async Task<string> PostChargeAsync(string payload)
    
        using (var httpRequest = BuildHttpRequest(payload))
        
            try
            
                using (var httpResponse = await _httpClient.SendAsync(httpRequest).ConfigureAwait(false))
                
                    httpResponse.EnsureSuccessStatusCode();

                    using (var httpContent = httpResponse.Content)
                    
                        return await httpContent.ReadAsStringAsync();
                    
                
            
            catch (HttpRequestException ex)
            
                throw;
            
            catch (TimeoutException ex)
            
                throw;
            
            catch (System.Exception ex)
            
                throw;
            
        
    

    private HttpRequestMessage BuildHttpRequest(string content)
    
        return new HttpRequestMessage
        
            Content = new StringContent(content, Encoding.UTF8, "application/xml"),
            Method = HttpMethod.Post,
            RequestUri = new Uri("https://test/process"),
        ;
    

问题是,当在 ProcessController 上发送并行请求(~30 - 50 个请求/分钟)并调用 PostChargeAsync 方法时,我得到以下异常:

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: The connection with the server was terminated abnormally

我已尝试在 Web.Config 中添加以下设置以增加 connectionManagement 中的最大连接数:

  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="100"/>
    </connectionManagement>
  </system.net>

但我仍然遇到上述异常。

有什么想法会导致上述问题吗?

【问题讨论】:

您能否澄清一下:您发布的代码:即 PostChargeAsync 处理请求?如果是这样,您的错误表明与哪个服务器终止? @DaniDev ProcessController 正在处理请求。请求被格式化,然后使用 PostChargeAsync 方法使用 uri "test/process" 将格式化的请求发布到另一个第三方系统。我没有包含真正的 URI。 您是否检查过防火墙或杀毒软件是否阻止连接? 异常不是连续的而是间歇性的。 @nasiroudin 我认为您尝试通过配置解决此问题是正确的。只是想确定它应该是App、IIS还是Server?这就是为什么我试图了解您的错误的来源(和含义)。你能澄清这个错误发生在哪里(在你的代码中?)以及有问题的服务器吗? 【参考方案1】:

我们从 HttpClient 转移到 HttpWebRequest 并且上面提到的问题得到了解决。 .Net Core Runtime 2.0 上的 HttpClient 存在一些问题。请注意,在创建这篇文章时,我使用的是 .NET Core SDK 2.1.4 和 .NET Core Runtime 2.0.5。

【讨论】:

以上是关于WinHttpException:与服务器的连接异常终止的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

硬盘异响(嗑啦嗑啦)的可能原因

串口服务器的连接方式有哪几种?

Windows下使用Navicat远程连接禅道Mysql数据库

2.2.2解决方案压缩文件异机备份到PC2(局域网共享与FTP上传下载)

13IP类别和地址