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

ant*_*tfx 15 c# ubuntu mono httpwebrequest

我有一个通过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();
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

        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
Run Code Online (Sandbox Code Playgroud)

例如,服务器仍然可以解析DNS

 wget http://www.google.com
Run Code Online (Sandbox Code Playgroud)

将ping没有任何问题,以及解析DNS的其他命令将返回文件.

然而,我的程序将继续抛出该异常,直到我重新启动它.重新启动应用程序后,它将再次开始工作.

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

有任何想法吗?

Shi*_*dim 9

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

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