与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服务前面的防火墙识别,并修改回标准标头。我不确定这是否与上述问题有关。
答案 0 :(得分:0)
如果有人感兴趣或遇到类似问题,请回答我自己的问题。
我们最终创建了一个解决方法,通过配置我们的Web服务来响应OK(200)http状态代码,并将实际响应代码写入自定义标头X-Http-Status。在客户端,当我们解析响应时,如果存在此自定义标头,那么我们将其作为实际状态代码并从那里继续业务逻辑。
这使我们可以处理Windows Phone处理的任何其他状态代码。
问题的原因仍然未知,尽管我们强烈怀疑由于这是一个NOT MODIFIED(304)代码,因此在我们可以获得响应之前,Silverlight中的某些低级别层会发生一些缓存。