【问题标题】:HttpClient HttpRequestExceptionHttpClient HttpRequestException
【发布时间】:2013-02-28 18:38:05
【问题描述】:

我遇到了HttpClient 的问题,我不断收到HttpRequestException occurred in mscorlib.dll。我已经从 SVN 下载了以前的工作版本,并且一直收到相同的异常。

为什么我会突然收到这个异常,即使我运行的代码已经运行了好几个星期?

现在我正在尝试使用这个简单的代码进行调试,但无论我做什么都会遇到同样的异常

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept
    .Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(
              "application/json"));
HttpResponseMessage response
    = await client.GetAsync("http://api.themoviedb.org/3/movie/550?api_key=x");
return await response.Content.ReadAsStringAsync();

我的 innerException 如下:

The remote name could not be resolved: 
    api.themoviedb.org System.Exception System.Net.WebException

我尝试的每个网址都得到相同的结果,并且它们都可以在我的浏览器中使用。 这是异常和堆栈跟踪:

res "System.Net.Http.HttpRequestException: An error occurred while sending the request. 
---> System.Net.WebException: The remote name could not be resolved: 'api.themoviedb.org'
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificat‌​ion(Task task)

【问题讨论】:

  • 什么是完整的异常错误?
  • 您使用的是代理服务器吗?
  • 我正在对 Web 服务进行数千次调用。从调用到调用的唯一变化是查询字符串参数,所有这些参数都被正确编码。时不时地,我会收到您要问的错误。我无法确定原因。如果是配置问题,代码不应该工作,但它确实工作,超过 99% 的时间。

标签: c# httpclient


【解决方案1】:

这是您网络上的 DNS 问题。您的工作站(或出现错误的服务器)无法解析 DNS 名称“api.themoviedb.org”。这个 DNS 名称可以很好地从我的计算机和 other networks online 解析。

请咨询您的本地网络管理员。

更新

因此,您的机器可以解析名称,但 HttpClient 不能。让我们看看我们是否可以解决这个问题。我假设这是一个桌面应用程序,而不是一个网站。如果我错了,请告诉我——还有一些额外的注意事项。

您必须按照以下指南启用网络跟踪:How to: Configure Network Tracing。您希望按照该链接中的指定配置您的 App.config 文件。简而言之,您应该在配置文件中添加如下内容:

<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.Net" tracemode="includehex" maxdatasize="1024">
                <listeners>
                    <add name="System.Net"/>
                </listeners>
            </source>
        </sources>
        <switches>
            <add name="System.Net" value="Verbose"/>
        </switches>
        <sharedListeners>
            <add name="System.Net"
                type="System.Diagnostics.TextWriterTraceListener"
                initializeData="network.log" />
        </sharedListeners>
        <trace autoflush="true"/>
    </system.diagnostics>
</configuration>

network.log 的值应根据您的需要进行更改。继续执行此操作,然后查看输出文件。

现在,诀窍是使用该文件找出问题的原因。有关如何解释该文件的提示,请参阅 Interpreting Network Tracing,尽管信息很少。我们正在寻找的是无法解析 DNS 的原因。因此,在该文件中搜索“api.themoviedb.org”。如果您愿意,请使用结果更新问题,我会看看是否可以帮助您。

【讨论】:

  • 打开命令提示符,运行命令“ping api.themoviedb.org”。它会解析为 IP 地址吗?
  • 没关系。重要的部分是名称解析为 IP。出于某种原因,您的应用程序没有做同样的事情。这是错误消息的相关部分:“无法解析远程名称:'api.themoviedb.org'”。所以由于某种原因,HttpClient 没有解析 DNS 名称。
  • 要跟踪它,您必须启用 System.Net 跟踪。详情见此链接:msdn.microsoft.com/en-us/library/ty48b824.aspx
  • 这是一个 Windows 8 Metro 应用程序。我正在尝试将其添加到清单中,但无论我尝试放置它,我都会不断收到无效的子元素。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多