使用Silverlight的WCF RIA服务时,我们遇到HTTP响应缓存问题.
服务器端,我们有一个简单的DomainService GET方法,没有指定缓存,如下所示:
[OutputCache(OutputCacheLocation.None)] public IQueryable<SearchResults> GetSearchResults(string searchText);
当用户未经过身份验证时(即FormsAuthenticationCookie到期时),抛出DomainException.这是设计的.
但是当用户重新进行身份验证,并且使用相同的’searchText’参数再次调用Query时,Query永远不会到达服务器(没有断点命中; Fiddler显示没有发送http请求).
我认为这是因为当在服务器上抛出异常时,HTTP响应将“Cache-Control”属性设置为“private”,并且当客户端想要稍后执行相同的查询时(一旦用户登录),然后浏览器甚至不会将请求发送到服务器.
如果我们输入不同的搜索参数,则重新执行查询没问题.
是否有任何方法可以确保http响应始终具有“无缓存” – 即使它没有正常返回?
UPDATE1
只有部署到IIS时才会出现此问题 – 从使用Casini或IIS Express的Visual Studio进行测试时,它可以正常工作.
UPDATE2
我更新了问题以反映新知识.
解决方法
您不应该为授权错误抛出DomainException.由于Silverlight处理故障的方式,您的浏览器仍然可以缓存这些响应.相反,从您的DomainService抛出一个UnauthorizedAccessException,它应修复客户端上的缓存错误.