WCF RIA服务抛出异常的查询存在缓存问题

时间:2011-05-23 16:48:48

标签: silverlight iis exception caching wcf-ria-services

在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 我更新了问题以反映新知识。

1 个答案:

答案 0 :(得分:1)

您不应该因授权错误而抛出DomainException。由于Silverlight处理故障的方式,您的浏览器仍然可以缓存这些响应。相反,从您的DomainService抛出一个UnauthorizedAccessException,这应该修复客户端上的缓存错误。