Pou*_*sen 30 .net c# system.net.webexception
我正在测试一个端点,我遇到了一些问题.
我只是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还是需要更高级的诊断工具?
Adr*_*tti 39
这可能是由本地网络连接问题引起的(但也可能是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);
            }
        }
    }
}
小智 6
我在尝试访问服务(旧的 ASMX 服务)时遇到了类似的问题。通过 IP 访问时调用可以工作,但是当使用别名调用时,我将无法解析远程名称。
将以下内容添加到配置中并解决了问题:
<system.net>
    <defaultProxy enabled="true">
    </defaultProxy>
</system.net>
| 归档时间: | 
 | 
| 查看次数: | 114358 次 | 
| 最近记录: |