gpt4 book ai didi

c# - System.Net.WebException:无法解析远程名称:

转载 作者:IT王子 更新时间:2023-10-29 04:14:31 28 4
gpt4 key购买 nike

我正在测试我遇到一些问题的端点。

我只是在每小时执行一个请求的循环中使用 HttpClient

var httpClient = new HttpClient();
var message = httpClient.GetAsync(url).Result;
Console.WriteLine(message.StatusCode);

偶尔我会遇到这个异常:

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The remote name could not be resolved: 'xxx'

经验是异常之后,URL就可以访问了。在浏览器中,您只需刷新页面,一切都很好。

我还没有收到任何用户的报告,所以我想知道这是否只是本地问题,但可以使用一些信息来帮助诊断。

有没有办法检查 无法解析远程名称 是由 DNS 问题还是 Web 服务器问题引起的异常?我能否从 HttpCLient 中获取更多信息,或者我是否需要更高级的诊断工具?

最佳答案

可能是由本地网络连接问题引起的(但也可能是 DNS 错误)。遗憾HResult是通用的,但是您可以确定捕获 HttpRequestException 的确切问题然后检查 InnerException : 如果它是 WebException然后你可以检查WebException.Status属性,例如 WebExceptionStatus.NameResolutionFailure应指示 DNS 解析问题。


这可能会发生,您无能为力。

我建议始终将(网络相关的)代码用 try 包裹在一个循环中/catch block (对于其他易出错的操作也建议here)。处理已知异常,稍等片刻(例如 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);
}
}
}
}

关于c# - System.Net.WebException:无法解析远程名称:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com