Службы данных WCF: как избежать использования членов __metadata - PullRequest
5 голосов
/ 16 августа 2010

В настоящее время я экспериментирую с использованием WCF Data Services, чтобы немного расширить возможности нашего продукта и в то же время иметь возможность использовать данные из AJAX.Одна вещь, которую я заметил, это то, что в формате представления JSON эти __metada члены разбросаны по данным, и в документации OData я нашел это (в разделе Представление записей ):

Anнеобязательная пара "__metadata" имя / значение является единственной парой, которая должна быть включена в объект, который непосредственно не представляет свойство представляемой записи.Эта пара имя / значение не является данными, но вместо этого, согласно соглашению, определенному в этом документе, задаются метаданные для представляемой записи.

Мой вопрос: если эти метаданные являются необязательными, как я могувыключить, чтобы сохранить пропускную способность?

Ответы [ 2 ]

2 голосов
/ 16 августа 2010

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

0 голосов
/ 16 августа 2010

Проведя некоторое время в Reflector, похоже, что единственный способ сделать это - написать собственную версию System.Data.Services.Serializers.JsonSerializer. Метод, который записывает объект метады, WriteMetadataObject, вызывается из WriteComplexTypeProperties и WriteElementWithName без учета каких-либо настроек, которые могли бы пропустить эту часть.

Теперь я должен рассмотреть, сколько нужно написать сериализатора, который запишет требуемый JSON, и подключить его к конвейеру с пользовательским именем в формате $.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...