Как извлечь 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