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

 手机用户2602925995 发布于 2022-12-31 17:08

我正在测试一个端点,我遇到了一些问题.

我只是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还是需要更高级的诊断工具?

1 个回答
  • 可能是由本地网络连接问题引起的(但也可能是DNS错误).不幸的HResult是通用,但是您可以确定捕获HttpRequestException然后检查的确切问题InnerException:如果是,WebException那么您可以检查WebException.Status属性,例如WebExceptionStatus.NameResolutionFailure应该指示DNS解析问题.


    它可能会发生,你可以做的并不多.

    我建议总是将这个(网络相关的)代码用try/ catch块包装在一个循环中(这里也建议用于其他错误的操作).处理已知的异常,等待一点(比如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);
                }
            }
        }
    }
    

    2022-12-31 17:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有