Получить необработанный XML параметров в реализации службы WCF - PullRequest
5 голосов
/ 10 декабря 2011

Я устанавливаю новый сервис .NET 4.0 WCF с методом (операцией), который принимает строго типизированные типы данных, сгенерированные XSD, в качестве параметров. Это делает вещи понятными и аккуратными для клиента - клиент может работать со строгими типами и не должен думать о XML.

Однако при реализации службы WCF я бы предпочел иметь дело с данными параметров в виде документов XML (LINQ XDocument) вместо десериализованных типов объектов. Приятно, что WCF десериализуется для явных типов, но для моего универсального алгоритма удобнее и гибче работать с XML-документами, в первую очередь потому, что входящие данные полиморфны.

Я знаю, что могу просто взять объекты параметров и сериализовать их обратно в XML, но это кажется расточительным.

Я понимаю, что, возможно, я мог бы заменить строго типизированные параметры на XElement, чтобы получить то, что я хочу для удобства реализации, но это потеряет преимущества строгой типизации (проверки компилятором, intellisense, самостоятельная документация) для клиента.

Есть ли способ сказать WCF, что в моей реализации сервиса мне не нужны десериализованные объекты параметров, что я хочу использовать их как XML?

Или есть ли способ получить доступ к необработанному XML параметров, как они были до десериализации WCF их в объекты? Если я не смогу помешать WCF тратить время на десериализацию объектов по крайней мере, это позволило бы избежать затрат на повторную сериализацию их обратно в XML.

1 Ответ

3 голосов
/ 10 декабря 2011

Один из способов сделать это - создать инспектор сообщений , который будет проверять входящее сообщение на сервере и воздействовать на него (например, хранить его или что-то в этом роде).

У Пабло Пиалорси есть отличное сообщение в блоге о том, как написать инспектор сообщений , шаг за шагом

Проверка сообщения даст вам доступ к параметрам в формате необработанного сообщения SOAP.

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

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