Портативные / совместимые контракты WCF - PullRequest
9 голосов
/ 28 января 2009

Мне было интересно, есть ли у кого-нибудь хорошие советы и рекомендации для разработки контрактов WCF с учетом функциональной совместимости веб-сервисов, как с точки зрения старых технологий веб-сервисов Microsoft (например, WSE), так и сторонних разработчиков технологии, такие как Java, вызывающие веб-сервисы WCF.

Например: есть ли какие-то особые правила, которые необходимо учитывать при представлении DateTime в качестве типа в вашем контракте? Как насчет словарей и хеш-таблиц? С какими проблемами вы можете столкнуться с различными доступными привязками?

Ответы [ 2 ]

7 голосов
/ 28 января 2009

WCF DateTime бед

Что касается вашего вопроса о DateTime, вы вправе быть обеспокоенным передачей DateTime через WCF. Это всего лишь одна из многих ссылок, которые цепляются за трудности ... http://daveonsoftware.blogspot.com/2008/07/wcf-datetime-field-adjusted.html

Относительно эквивалентности типов

Согласно разделу 3.1.3 книги Ювала Лоуи, озаглавленной «Программирование служб WCF, 2-е издание» ...

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

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

Чтобы иметь возможность использовать пользовательский тип в качестве параметр операции, есть два Требования: во-первых, тип должен быть сериализуемый, а во-вторых, оба клиент и сервис должны иметь локальное определение этого типа, что результаты в той же схеме данных.

Вы также можете проверить раздел F.4. Контракты на данные, являющиеся частью его стандарта кодирования WCF. Пуля № 9 относится к вашему вопросу ...

Не передавайте специфичные для .NET типы, например как Тип, как параметры операции.

Привязки устанавливают ожидания

Привязки, основанные на WSHttpBindingBase (поиск по четырем производным объектам в Reflector.NET) будут наиболее совместимыми, поскольку они предназначены для взаимодействия.

Рекомендация книг

Я очень рекомендую книгу Ювала: http://www.bookpool.com/sm/0596521308

1 голос
/ 28 января 2009

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

Только не забывайте составлять контракты примитивов, и вы должны делать все в порядке.

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