我正在测试一个遇到一些问题的端点。
我只是使用HttpClient
在每小时执行一次请求的循环中。
var httpClient = new HttpClient();
var message = httpClient.GetAsync(url).Result;
Console.WriteLine(message.StatusCode);
偶尔我会遇到这个异常:
System.Net.Http.HttpRequestException:发送时发生错误
的请求。 ---> System.Net.WebException:远程名称无法
待解决:'xxx'
经验是,异常之后,URL就可以访问了。在浏览器中,您只需刷新页面即可,一切都很好。
我仍然没有收到遇到此问题的用户的任何报告,所以我想知道这是否只是本地问题,但可以使用一些信息来帮助诊断。
有没有办法检查是否无法解析远程名称是由 DNS 问题引起还是由异常中的 Web 服务器问题引起?我可以从中获取更多信息吗HttpCLient
或者我需要更先进的诊断工具?
It's probably由本地网络连接问题引起(也可能是 DNS 错误)。很遗憾HResult
是通用的,但是您可以确定捕获的确切问题HttpRequestException
然后检查InnerException
: 如果是一个WebException
然后你可以检查WebException.Status
财产,例如WebExceptionStatus.NameResolutionFailure
应该表明 DNS 解析问题。
这可能会发生,你无能为力。
我建议总是将(网络相关的)代码包装在一个循环中try
/catch
块(也建议here https://stackoverflow.com/a/24041546/1207195对于他人fallible运营)。处理已知的异常,稍等一下(例如 1000 毫秒),然后重试(例如 3 次)。仅当始终失败时,您才可以退出/向用户报告错误。像这样的非常原始的例子:
private const int NumberOfRetries = 3;
private const int DelayOnRetry = 1000;
public static async Task<HttpResponseMessage> GetFromUrlAsync(string url) {
using (var client = new HttpClient()) {
for (int i=1; i <= NumberOfRetries; ++i) {
try {
return await client.GetAsync(url);
}
catch (Exception e) when (i < NumberOfRetries) {
await Task.Delay(DelayOnRetry);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)