【问题标题】:HttpWebRequest Timing Out On A Response With Status Code 304HttpWebRequest 响应超时,状态码为 304
【发布时间】:2011-04-18 14:14:12
【问题描述】:

与我们的 REST Web 服务通信时,返回状态码为 304 的 http 响应,表示请求的资源没有更改。然而,我们的 WP7 应用程序使用 HttpWebRequest 类,手机在成功读取此类响应之前需要整整 2 分钟。

    HttpWebRequest request = HttpWebRequest.Create("path/to/unchanged/resource") as HttpWebRequest;
    request.Method = "GET";
    request.BeginGetResponse(
        new AsyncCallback(
            (aysncResult) => {
                // response is read correctly here... 120 seconds later
            }), null);

我可以看到 web 服务立即响应 304 并且没有正文数据,请求本身没有超时,我们的应用程序能够成功处理其他响应代码 [404、201 等]。可能是 Silverlight 浏览器“缓存”问题吗?

任何人都可以确认他们以前见过这个,或者对这个问题有任何想法吗?

干杯, 阿拉斯代尔。

== 附加信息 ==

由于WP7 restricting 某些request headers,我们对所有资源请求使用自定义[If-Modified-Since] 标头。此自定义标头 [X-If-Modified-Since] 被 web 服务前的防火墙识别并修改回标准标头。我不确定这是否与上述问题有关。

【问题讨论】:

    标签: windows-phone-7 httpwebrequest httpwebresponse http-status-code-304


    【解决方案1】:

    回答我自己的问题,以防有人感兴趣或面临类似问题。

    我们最终通过配置我们的 web 服务以使用 OK (200) http 状态代码进行响应,并在自定义标头 X-Http-Status 中编写实际响应代码来解决问题。在客户端,当我们解析响应时,如果存在此自定义标头,那么我们将其视为实际状态代码并从那里继续业务逻辑。

    这使我们能够潜在地处理 Windows Phone 以不同方式处理的任何其他状态代码。

    问题的原因仍然未知,尽管我们强烈怀疑由于这是一个未修改 (304) 代码,因此在向我们提供响应之前,Silverlight 中的某个低级别会发生一些缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-28
      • 2018-02-05
      • 1970-01-01
      • 2011-08-13
      • 2017-03-27
      • 2018-03-23
      • 1970-01-01
      • 2016-09-09
      相关资源
      最近更新 更多