HttpWebRequest在状态码304的响应时定时

时间:2011-04-18 14:14:12

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

与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);

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

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

干杯, 麦金太尔。

==其他信息==

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

1 个答案:

答案 0 :(得分:0)

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

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

这使我们可以处理Windows Phone处理的任何其他状态代码。

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