.NET 中的 HttpWebRequest NameResolutionFailure 异常(在 Ubuntu 上使用 Mono)

     2023-02-19     250

关键词:

【中文标题】.NET 中的 HttpWebRequest NameResolutionFailure 异常(在 Ubuntu 上使用 Mono)【英文标题】:HttpWebRequest NameResolutionFailure exception in .NET (with Mono on Ubuntu) 【发布时间】:2012-02-18 10:54:09 【问题描述】:

我有一个通过 Mono 2.10 在 Ubuntu 上运行的 .NET 程序

该程序每分钟左右通过 HttpWebRequest 下载一个网页,这在大多数情况下都可以正常工作:

        String result;
        WebResponse objResponse;
        WebRequest objRequest = System.Net.HttpWebRequest.Create(url);

        using (objResponse = objRequest.GetResponse())
        
            using (StreamReader sr =
               new StreamReader(objResponse.GetResponseStream()))
            
                result = sr.ReadToEnd();
                // Close and clean up the StreamReader
                sr.Close();
            
        

问题是几天后我开始抛出异常:

        DateTime: 01/25/2012 08:15:41
        Type: System.Net.WebException
        Error: Error: NameResolutionFailure
        Stack:
          at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
          at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0
          at socks_server.Program.readHtmlPage (System.String url) [0x00000] in <filename  unknown>:0
          at socks_server.Program.getAccessKeysProc () [0x00000] in <filename unknown>:0

服务器还是abel解析DNS,例如

 wget http://www.google.com

将在没有任何问题的情况下返回文件,ping 和其他解析 DNS 的命令也将如此。

但是,我的程序将继续抛出该异常,直到我重新启动它。重新启动应用程序后,它将重新开始正常工作。

我检查了系统上的打开文件计数(400 ish)、内存使用量(327mb of 4gb)、CPU 使用率(2-3%),一切正常。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以通过将主机名转换为 ip 并将主机名添加到Headers 集合或Host 属性来解决。

如果您的网址是http://example.com/uri。自己解决主机。假设它的1.2.3.4。它将是http://1.2.3.4/uri。现在将 Host: example.com 标头添加到您的请求中。我认为可以通过设置HttpWebRequest.Host属性来完成。

【讨论】:

您的意思是使用Dns.GetHostEntry(domainName); 或其他方式事先查找IP?我认为如果这确实是 DNS 问题,或者您怀疑它是 Mono / .NET 中的错误,也会导致同样的问题? 是的,通过编程或硬代码。这样可以确保 HttpWebRequest 不会在您每次发出请求时解析 dns。 嗯,好吧,这不是理想的解决方案,因为它仍然存在问题,但我想我可以每隔一小时左右拨打GetHostEntry 以检查 DNS 中的更新并避免硬代码.我真的很想找到问题,因为这只会影响我的一些服务器,而不是全部(我有 50 个) 有人找到解决方案了吗?我也面临同样的问题,这个主机和 IP 解决方法对我不起作用。【参考方案2】:

我知道这是一个旧帖子,但遇到了同样的错误,所以想分享解决方案。

    我找到的最佳解决方案是,当 Wifi 发生异常时 已连接,只是为了重试我的服务器调用并稍微休眠 之间。它大部分时间都有效,否则如果第二次调用 失败我取消请求。 如果用户的 Wifi 非常不稳定或 信号非常低。如果没有互联网,也会出现同样的错误 完全连接,即使连接到 Wifi。

这符合我的回答:

System.Net.WebException: Error: NameResolutionFailure when Calling WCF Services throwing exception in mono android application

【讨论】:

将 wifi 从我糟糕的工作互联网更改为绑定我的 LTE 使这个错误消失了。 与您的问题不同,但提到 WiFi 让我意识到我的问题是什么。我的应用已连接到我们网络的本地 API,当我断开 WiFi 时,它再也找不到 API。 我也尝试过轻微睡眠重试,但并没有解决问题【参考方案3】:

好吧,我使用 HttpClient - 但它可能是一个类似的问题。我在 Android 设备上遇到了同样的问题(它在 Windows Phone 上工作)......但是在我将主机添加到标题之后它工作了!

client.DefaultRequestHeaders.Host = "mydomain.com";

您仍然可以在 url 中使用名称(您不必使用 IP 地址)

【讨论】:

你们有可重现的样品吗? 没有。当主机设置一次后,设置器就可以被删除......我认为该设备包含自己的“DNS记录”以供将来参考。在我添加该行之前它不起作用,但之后它起作用了。当我再次尝试删除该线路时,它起作用了......我目前没有其他设备可以重现它。注意:我使用了设备之前未访问过的新创建域 - 它是一种完全不同类型的解决方案 (Xamarin.Android)。【参考方案4】:

我在 raspbian 上的单声道应用程序中遇到了同样的问题。我尝试了此线程和其他线程中描述的不同解决方案,但都没有奏效。最终,我能够通过将 /etc/resolv.conf 中的名称服务器更改为 google 的 https://developers.google.com/speed/public-dns/

来解决问题

米尔科

【讨论】:

【参考方案5】:

当我在没有互联网连接的情况下启动移动应用程序(Android 或 iOS 无关紧要)时出现此错误。恢复连接后,每个请求都返回“NameResolutionFailure 异常”。我不得不等待 120 秒才能让 http 请求再次工作。在应用程序启动的任何地方设置以下代码行,错误终于消失了。

System.Net.ServicePointManager.DnsRefreshTimeout = 0;

默认的 DnsRefreshTimeout 值为 120 秒。

【讨论】:

不确定,我只使用了 HttpClient。 你设置request.KeepAlive = false;了吗?

.NET Core 2.0 中的 HttpWebRequest 抛出 302 Found Exception

】.NETCore2.0中的HttpWebRequest抛出302FoundException【英文标题】:HttpWebRequestin.NETCore2.0throwing302FoundException【发布时间】:2018-01-1803:05:26【问题描述】:我们正在将我们的应用程序从.net框架升级到.netcore2.0。在其中,我们使用HttpWebRequest... 查看详情

.NET 中的 HttpWebRequest NameResolutionFailure 异常(在 Ubuntu 上使用 Mono)

】.NET中的HttpWebRequestNameResolutionFailure异常(在Ubuntu上使用Mono)【英文标题】:HttpWebRequestNameResolutionFailureexceptionin.NET(withMonoonUbuntu)【发布时间】:2012-02-1810:54:09【问题描述】:我有一个通过Mono2.10在Ubuntu上运行的.NET程序该程序每... 查看详情

如何异步使用 HttpWebRequest (.NET)?

】如何异步使用HttpWebRequest(.NET)?【英文标题】:HowtouseHttpWebRequest(.NET)asynchronously?【发布时间】:2010-09-1704:17:41【问题描述】:如何异步使用HttpWebRequest(.NET,C#)?【问题讨论】:查看这篇关于DeveloperFusion的文章:developerfusion.com/co... 查看详情

为啥通过 .Net 代理的 HttpWebrequest 失败?

】为啥通过.Net代理的HttpWebrequest失败?【英文标题】:WhydoesHttpWebrequestthrough.Netproxyfail?为什么通过.Net代理的HttpWebrequest失败?【发布时间】:2010-01-0823:01:10【问题描述】:我有以下代码:intrepeat=1;intproxyIndex=1;if(listBox1.Items.Count==p... 查看详情

解析来自 Httpwebrequest 的 Json 响应

】解析来自Httpwebrequest的Json响应【英文标题】:ParsingJsonresponsefromHttpwebrequest【发布时间】:2020-01-0917:48:03【问题描述】:我正在尝试使用JSON格式的httpwebrequest解析响应中的数据,我尝试使用JSON.Net但似乎没有运气,如果需要,我... 查看详情

将自签名证书与 .NET 的 HttpWebRequest/Response 一起使用

】将自签名证书与.NET的HttpWebRequest/Response一起使用【英文标题】:Usingaself-signedcertificatewith.NET\'sHttpWebRequest/Response【发布时间】:2010-10-0607:37:14【问题描述】:我正在尝试连接到使用自签名SSL证书的API。我这样做是使用.NET的HttpWe... 查看详情

Web 请求失败,但仅适用于 localhost 和使用 System.Net.HttpWebRequest

】Web请求失败,但仅适用于localhost和使用System.Net.HttpWebRequest【英文标题】:Webrequestfails,butonlyforlocalhostandwhenusingSystem.Net.HttpWebRequest【发布时间】:2015-02-0805:42:35【问题描述】:System.Net.HttpWebRequest有一个非常奇怪的问题,这让我... 查看详情

自动 Cookie 处理 C#/.NET HttpWebRequest+HttpWebResponse

】自动Cookie处理C#/.NETHttpWebRequest+HttpWebResponse【英文标题】:AutomaticCookieHandlingC#/.NETHttpWebRequest+HttpWebResponse【发布时间】:2010-10-0823:43:44【问题描述】:有什么方法可以在.NET中使用HttpWebRequest/HttpWebResponse对象自动处理cookie?我最... 查看详情

System.Net.Http.HttpClient 是不是遭受 HttpWebRequest.AllowWriteStreamBuffering 的影响?

】System.Net.Http.HttpClient是不是遭受HttpWebRequest.AllowWriteStreamBuffering的影响?【英文标题】:DoesSystem.Net.Http.HttpClientsufferfromHttpWebRequest.AllowWriteStreamBuffering?System.Net.Http.HttpClient是否遭受HttpWebRequest.AllowWriteS 查看详情

c# HttpWebRequest POST 失败

】c#HttpWebRequestPOST失败【英文标题】:c#HttpWebRequestPOST\'ingfailing【发布时间】:2010-12-1200:27:45【问题描述】:所以我正在尝试向网络服务器发布一些内容。System.Net.HttpWebRequestEventReq=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("url... 查看详情

C#.NET 4.0 - HttpWebRequest.GetRepsonse() 无法访问 Web 服务

】C#.NET4.0-HttpWebRequest.GetRepsonse()无法访问Web服务【英文标题】:C#.NET4.0-HttpWebRequest.GetRepsonse()doesnotreachwebservice【发布时间】:2021-06-0708:58:46【问题描述】:我在我们的服务器上运行了一个.NetCore2.1WebAPI。现在我有一个.NET4.0应用程... 查看详情

WebClient、HttpWebRequest 和 HttpClient 的最大并发请求数

】WebClient、HttpWebRequest和HttpClient的最大并发请求数【英文标题】:MaximumconcurrentrequestsforWebClient,HttpWebRequest,andHttpClient【发布时间】:2016-09-1517:00:13【问题描述】:使用.NET4.5中的WebClient、HttpWebRequest和HttpClient类可以发送多少并发/... 查看详情

httprequest和httpwebrequest的区别

您好,HttpRequest和HttpWebRequest两者之间最根本的区别在于:System.Web.HttpRequest:Incoming,进入请求,也就是客户端访问ASP.NET网站进入时的请求。所以只能在ASP.NET应用程序上下文里使用。System.Net.HttpWebRequest:OutGoing,外发请求,可以... 查看详情

使用 HttpWebRequest 的 NTLM 身份验证适用于 .net 4.0,但不适用于 3.5

】使用HttpWebRequest的NTLM身份验证适用于.net4.0,但不适用于3.5【英文标题】:NTLMauthenticationwithHttpWebRequestworksin.net4.0butnot3.5【发布时间】:2011-10-0910:03:31【问题描述】:我编写了一些代码来使用HttpWebRequest执行NTLM身份验证。如果我... 查看详情

内部服务器错误 (500) httpwebrequest

】内部服务器错误(500)httpwebrequest【英文标题】:Internalservererror(500)httpwebrequest【发布时间】:2010-11-2015:45:50【问题描述】:System.Net.WebException:远程服务器返回错误:(500)内部服务器错误。在System.Net.HttpWebRequest.GetResponse()在refi... 查看详情

通过 App.config 为 System.Net.HttpWebRequest 指定 SSL/TLS

】通过App.config为System.Net.HttpWebRequest指定SSL/TLS【英文标题】:SpecifyingSSL/TLSforSystem.Net.HttpWebRequestthroughApp.config【发布时间】:2017-08-0318:31:56【问题描述】:我需要将JSON数据发布到TLS1.2端点。我希望在App.config中指定SecurityProtocol,... 查看详情

httprequest和httpwebrequest的区别

...请求的网址,查询字符串数据或表单数据等等而System.Net.HttpWebRequest则是用来简化网络请求的过程,从服务器上获取文件/结果的,譬如你可以在代码中用这个类冒充浏览器(设置一个UserAgent)来发请求,处理回应第一:他们不是父... 查看详情

使用 HttpWebRequest 和 HttpWebResponse 通过 HTTP POST 从 .NET 进行 Django 身份验证

】使用HttpWebRequest和HttpWebResponse通过HTTPPOST从.NET进行Django身份验证【英文标题】:DjangoAuthenticationfrom.NETusingHttpWebRequestandHttpWebResponseviaHTTPPOST【发布时间】:2010-09-2706:50:12【问题描述】:我正在.NET中创建一个应用程序,它将作为... 查看详情