Получение заголовка if -ified-Since для работы с WCF - PullRequest
1 голос
/ 27 октября 2011

Я пытаюсь заставить заголовок "if-Modified-Since" работать с моим веб-сервисом WCF.

Когда пользователь отправляет запрос на мой сервис, я добавляю ETag к исходящему ответу, который содержит метку времени запроса следующим образом:

var tag = String.Format("\"{0:o}\"", new DateTimeOffset(DateTime.Now));

В результате получается следующий заголовок ETag:

ETag: "2011-10-27T13:09:39.6242263-04:00"

Затем я беру это значение и возвращаю его в качестве заголовка if-Modified-Since для последующих запросов, таких как:

If-Modified-Since:2011-10-27T13:09:39.6242263-04:00

Когда я проверяю WebOperationContext.Current.Headers.IfModifiedSince, я никогда не получаю предоставленное значение. Значение установлено на «31.12.1969 19:00:00».

Что я делаю не так?

UPDATE

Я должен добавить, что с помощью Fiddler я могу установить любое значение для заголовка If-Modified-Since и все равно получить то же значение 1969 в коде.

1 Ответ

2 голосов
/ 28 октября 2011

Прежде всего, If-Modified-Since относится к условным GET относительно времени последней модификации ресурса, в то время как ETag относится к условным GET относительно идентификатора ресурсов, поэтому, пожалуйста, будьте осторожны при смешивании двух концепций.

Правильный способ реализации поддержки If-Modified-Since в службе WCF - использовать CheckConditionalRetrieve, передающий значение DateTime в объекте WebOperationContext.Current.IncomingRequest - см. Код ниже.Если значение заголовка IMS предшествует дате, которую вы передаете CheckConditionalRetrieve, метод завершится в тот момент, возвращая ответ 304 (не измененный).Иначе это просто продолжится.Приведенный ниже код показывает, что.

Другая проблема: даже через формат даты, который вы используете (ISO 8601), работает, но это не правильно в зависимости от спецификации (раздел 14.25 в http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html, и раздел3.3.1 в http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1),, поэтому вам следует подумать об использовании допустимого формата для предотвращения будущих проблем.

Хороший пост об условной поддержке GET в WCF можно найти по адресу http://blogs.msdn.com/b/endpoint/archive/2010/02/25/conditional-get-and-etag-support-in-wcf-webhttp-services.aspx.

* 1019.*
...