在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 我更新了问题以反映新知识。
答案 0 :(得分:1)
您不应该因授权错误而抛出DomainException。由于Silverlight处理故障的方式,您的浏览器仍然可以缓存这些响应。相反,从您的DomainService抛出一个UnauthorizedAccessException,这应该修复客户端上的缓存错误。