WCF RIAServices Запросы, которые выдают исключения, имеют проблемы с кэшированием - PullRequest
4 голосов
/ 23 мая 2011

У нас есть проблема с кэшированием HTTP-ответов при использовании служб WCF RIA с Silverlight.

На стороне сервера у нас есть простой метод GET DomainService без указанного кэширования, например:

  [OutputCache(OutputCacheLocation.None)]
  public IQueryable<SearchResults> GetSearchResults(string searchText);

Выдает исключение DomainException, когда пользователь не аутентифицирован (то есть, когда срок действия FormsAuthenticationCookie истекает).Это как задумано.

Но когда пользователь проходит повторную аутентификацию и запрос снова вызывается с тем же параметром searchText, запрос никогда не попадает на сервер (без попадания в точку останова; Fiddler не показывает отправленный http-запрос).

Я думаю, это связано с тем, что при возникновении исключения на сервере HTTP-ответ имеет свойство 'Cache-Control' , установленное в 'private' , икогда клиент хочет выполнить тот же запрос позже (после того, как пользователь вошел в систему), тогда браузер даже не отправляет запрос на сервер.

Если мы введем другой параметр поиска, тогда запросповторное выполнение без проблем.

Есть ли способ обеспечить, чтобы в http-ответе всегда было «без кэширования» - даже если он не возвращается нормально?

UPDATE1 Проблема возникает только при развертывании в IIS - при тестировании в Visual Studio с использованием Casini или IIS Express все работает нормально.

UPDATE2 Я обновил вопрос, чтобы отразить новоезнание.

1 Ответ

1 голос
/ 24 мая 2011

Вы не должны вызывать исключение DomainException для ошибок авторизации. Благодаря тому, что Silverlight обрабатывает ошибки, эти ответы все еще могут кэшироваться вашим браузером. Вместо этого выведите исключение UnauthorizedAccessException из службы DomainService, и это должно исправить ошибку кэширования на клиенте.

...