0

与我们的 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 限制了某些请求标头,我们对所有资源请求使用自定义的 [If-Modified-Since] 标头。此自定义标头 [X-If-Modified-Since] 被 web 服务前的防火墙识别并修改回标准标头。我不确定这是否与上述问题有关。

4

1 回答 1

0

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

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

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

问题的原因仍然未知,尽管我们强烈怀疑这是一个未修改 (304) 代码,在我们可以使用响应之前,Silverlight 中的某个低级层发生了一些缓存。

于 2011-06-10T11:12:00.660 回答