关键词:
【中文标题】.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中创建一个应用程序,它将作为... 查看详情