Как извлечь ETAG из ответа WCF Dataservices?

Я давно пытаюсь получить ответ на этот вопрос. Так как служба данных WCF не является поточно-ориентированной, и часто ее необходимо создавать заново, как только я запрашиваю у своего хранилища данных запись, как мне извлечь ETAG из этого ответа, чтобы я мог использовать его при реконструкции своего текстового контекста?

1 ответ

Решение

Это зависит от того, какой язык / библиотеку вы используете на клиенте и какой формат вы используете в сети (ATOM против JSON). ETag хранится в полезной нагрузке, а в случае отдельной сущности - также в заголовках HTTP. Некоторые библиотеки извлекают его для вас и предоставляют вам прямой доступ (например, клиент ODataLib или WCF Data Services). Если вы анализируете полезную нагрузку самостоятельно, вам нужно извлечь ее самостоятельно.

В клиенте WCF Data Services доступ к ETag можно получить через DataServiceContext.GetEntityDescriptor(entity).ETag,

В ODataLib ETag выставляется через ODataEntry.ETag,

В полезной нагрузке в ATOM ETag хранится как атрибут на элементе atom:entry с именем m:etag (m - пространство имен метаданных), как описано здесь:

В полезной нагрузке в Verbose JSON ETag хранится как часть метаданных записи. Таким образом, в объекте ввода есть свойство __metadata, значением которого является объект, у которого есть свойство с именем etag. См. Главу 4.1.1

Другие вопросы по тегам