【问题标题】:HttpClient Portable returns 404 notfound on WP8HttpClient Portable 在 WP8 上返回 404 notfound
【发布时间】:2013-06-04 10:16:00
【问题描述】:

我正在移植一个使用 httpclient 库连接到我们的服务器的 W8 应用程序。

该应用程序的主要目的是发送图像,但是当我尝试在我的 WP8 上发送图片时,如果我检查服务器日志,我会收到 404 not found 错误(似乎 Microsoft 重新映射到 404 有很多错误) ,我可以看到服务器在失败之前收到了大约 1/4 的图像。同样的功能似乎在我的 W8 应用程序中运行良好(未在 3G 上测试),如果我使用 Wifi 连接,则在 WP8 上运行。我认为问题可能是等待时间,所以我尝试添加 Keep-Alive 标头但没有成功。 我目前的代码是:

using (HttpClient httpClient = new HttpClient())
{
    httpClient.Timeout = TimeSpan.FromMinutes(10);

    Stream streamW = new MemoryStream();
    this.bSyncOK = await Send(streamW);
    streamW.Seek(0, SeekOrigin.Begin);
    HttpResponseMessage response = await httpClient.PostAsync(sUri, new StreamContent(streamW));

    if (response.IsSuccessStatusCode)
    {
        Stream streamR = await response.Content.ReadAsStreamAsync();
        this.bSyncOK = await Recv(streamR);
        streamR.Dispose();
    }
    else
        throw new HostNotFoundException();
}

使用同一台服务器上传IOS、Android等其他平台的图片没有问题。

【问题讨论】:

  • 您是否尝试捕获网络跟踪?
  • @TheESJ 我尝试使用Wireshark,我可以看到服务器开始接收流但突然停止接收信息。经过多次重试后,我可以发送图片(可能重试 20-30 次)。
  • 可以分享完整的复制代码吗?
  • 对不起,我的公司不让我分享代码。但我认为您可以重现以低连接速度 (2G) 发送约 1.4mb 流的问题。
  • 我做了一个小项目,您可以在其中检查问题,将网络设置为 2G 模式很重要。您只需要将同步类中的 sUri 更改为任何能够接收大帖子调用的 url link

标签: windows-phone-8 portable-class-library dotnet-httpclient


【解决方案1】:

我使用 fiddler 模拟调制解调器速度重现了该问题。问题正在发生,因为 Phone 的 HTTPWebRequest 实现将在超过 60 秒时使请求超时。在调试器中,我看到他们从本机层返回 ERROR_INTERNET_TIMEOUT。目前我能想到的唯一解决方法是在较小的 POST 中发送文件,假设服务器支持。

【讨论】:

  • 感谢@TheESJ 的帮助,我已经实施了图片分割来避免这个问题。在我的多次尝试中,我制作了一个 C++ 组件,但结果相同,因此似乎网络实现存在问题。
猜你喜欢
  • 2022-01-23
  • 2014-11-04
  • 1970-01-01
  • 2017-10-26
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2023-03-14
相关资源
最近更新 更多