首页 > 解决方案 > 服务器强行关闭HttpClient时如何进行trap

问题描述

鼓励重用 HttpClient 而不是为每个 api 调用创建一个新的。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client

我的客户端程序有一个保持打开的连接。但是,如果有人停止 IIS,则连接将无法保持打开状态。

在这种情况下,我得到一个异常,它会杀死我的客户端程序,即使我有一个捕获它。(见代码)

有没有办法让异常处理程序处理异常而不会使程序崩溃?

或者,是否有 HttpClient 的某些属性表明服务器已关闭它?

try
{
    return await m_Client.GetAsync(AppVars.Instance.ServerAddress + method);
}
catch (Exception ex)
{
  // getting 'An existing connection was forcibly closed by the remote host' kills the 
  // application

  // getting 'No connection could be made because the target machine actively refused it'
  // does not kill the application - i.e. catch behaves as expected
}

标签: c#wpf.net-core

解决方案


我发现这是由 Visual Studio 引起的。我正在从一个解决方案(多个启动项目)调试客户端和服务器。当我关闭 IIS Express 时,Visual Studio 会在下次尝试使用连接时终止客户端。如果我启动一个单独的 Visual Studio 实例并从那里调试客户端,那么当我尝试重新使用关闭的连接时,客户端不会被杀死,即异常处理按预期工作。(所以我可以建立新的连接并重试)

希望这将帮助任何遇到同样问题的人。


推荐阅读