Переносимые / Совместимые Контракты WCF
-
20-08-2019 - |
Вопрос
Мне было интересно, есть ли у кого-нибудь хорошие советы по разработке контрактов WCF с учетом совместимости веб-служб, как с точки зрения более старых технологий веб-служб Microsoft (напримерWSE) и технологии, отличные от Microsoft, такие как Java, вызывающие веб-службы WCF.
Например:существуют ли какие-либо специальные правила, которые необходимо учитывать при указании DateTime в качестве типа в вашем контракте?Как насчет словарей и хэш-таблиц?С какими проблемами вы можете столкнуться при использовании различных доступных привязок?
Решение
Проблемы с датой и временем WCF
Что касается вашего вопроса 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, такие как как Type, в качестве параметров операции.
Привязки Устанавливают Ожидания
Привязки, основанные на WSHttpBindingBase (поиск в Reflector.NET для его четырех производных), будут наиболее совместимыми, поскольку они предназначены для взаимодействия.
Рекомендация к книге
Я очень рекомендую книгу Юваля: http://www.bookpool.com/sm/0596521308
Другие советы
Поэтому, если вы хотите взаимодействовать со службами, отличными от Microsoft, вы, вероятно, захотите держаться подальше от любого непримитивного типа.WCF использует сериализацию для кодирования данных для передачи, и Java, например, не сможет десериализовать хэш-таблицу.Однако WCF построен поверх SOAP, поэтому, немного поработав, вы сможете заставить любую функцию SOAP работать между JAVA-клиентом и службой WCF или наоборот.
Просто не забывайте составлять контракты из примитивов, и у вас все должно получиться.