c# - 服务器强行关闭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
}
解决方案
我发现这是由 Visual Studio 引起的。我正在从一个解决方案(多个启动项目)调试客户端和服务器。当我关闭 IIS Express 时,Visual Studio 会在下次尝试使用连接时终止客户端。如果我启动一个单独的 Visual Studio 实例并从那里调试客户端,那么当我尝试重新使用关闭的连接时,客户端不会被杀死,即异常处理按预期工作。(所以我可以建立新的连接并重试)
希望这将帮助任何遇到同样问题的人。
推荐阅读
- ios - Apple Store 预览和截图
- c# - 在磁盘根目录使用 nlog 没有日志
- ruby - rails generate ckeditor:install --orm=active_record --backend=active_storag 不起作用 Rails 5
- java - 异常 org.apache.poi.poifs.filesystem.OfficeXmlFileException - apache.Poi 4.0.0
- javascript - Vue $on 事件在第一次使用事件总线时不会触发
- docker - 如何创建一个包含标准 python 库的 docker 文件以供使用
- reactjs - 如何检查变量是否在 React 中具有某些符号?
- python - 在 python 中使用 writerow 附加到我的 csv
- javascript - 如果选择了一个变量或选择了另一个变量,则显示 html 块
- c# - “提供给函数的缓冲区太小”证书签名的加密异常