私はMono2.10を介してUbuntuで実行されている.NETプログラムを持っています
プログラムは、HttpWebRequestを介して1分ごとにWebページをダウンロードします。これは、ほとんどの場合正常に機能します。
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
サーバーは、たとえばDNSを解決するためにまだabelです
wget http://www.google.com
DNSを解決するpingやその他のコマンドと同様に、probelmなしでファイルを返します。
ただし、私のプログラムは、再起動するまでその例外をスローし続けます。アプリケーションを再起動すると、正常に動作を再開します。
システムで開いているファイル数(400 ish)、メモリ使用量(327mb of 4gb)、CPU使用率(2〜3%)を確認しましたが、すべて問題ありません。
何か案は?
ホスト名をipに変換し、ホスト名をHeaders
コレクションまたはHost
プロパティに追加することで解決できます。
URLがhttp://example.com/uri
の場合。ホストを自分で解決します。その1.2.3.4
を想定します。 http://1.2.3.4/uri
になります。次に、リクエストにHost: example.com
ヘッダーを追加します。 HttpWebRequest.Host
プロパティを設定することで実現できると思います。
これは古い投稿ですが、同じエラーに直面していたので、解決策を共有することを考えました。
これは私の答えと一致しています:
System.Net.WebException:エラー:モノラルで例外をスローするWCFサービスを呼び出すときのNameResolutionFailure Android application
私はHttpClientを使用していますが、同様の問題である可能性があります。 Androidデバイス(Windows Phoneで動作しました)でも同じ問題が発生しました...しかし、ヘッダーにホストを追加した後、動作しました!
client.DefaultRequestHeaders.Host = "mydomain.com";
URLで名前を引き続き使用できます(IPアドレスを使用する必要はありません)
ラズビアンのモノラルアプリケーションでも同じ問題が発生していました。このスレッドや他のスレッドで説明されているさまざまなソリューションを試しましたが、どれも機能しませんでした。最終的に、/ etc/resolv.confのネームサーバーをGoogleのものに変更することで問題を修正することができました https://developers.google.com/speed/public-dns/
ミルコ
インターネットに接続せずにモバイルアプリ(AndroidまたはiOSは関係ありません)を起動したときに、このエラーが発生していました。接続が復元された後、すべての要求は「NameResolutionFailure例外」を返します。 httpリクエストが再び機能するまで120秒待たなければなりませんでした。アプリの起動時に次のコード行を設定すると、エラーはようやくなくなりました。
System.Net.ServicePointManager.DnsRefreshTimeout = 0;
デフォルトのDnsRefreshTimeout値は120秒です。