Как выбрать между Договором о передаче сообщений и Договором о предоставлении данных в WCF? - PullRequest
3 голосов
/ 18 марта 2011

Я читаю так много вещей, чтобы понимать разные вещи в WCF.

Очень скоро, на самом деле, я хочу переместить / преобразовать существующие веб-службы WSE3 в WCF.В существующих веб-сервисах WSE у меня есть некоторые (data) классы, которые моделируют сущности в нашей среде.

При преобразовании этих классов я должен использовать атрибут Data Contract / Data Member или атрибут MessageContract?

1.Как выбрать между Договором о передаче сообщений и Договором о предоставлении данных в WCF?2. Имеет ли тип привязки (например, basicHttpBinding) какую-либо роль в этом решении?3. Значительно ли изменяются прокси, созданные на стороне клиента (когда мы добавляем веб-ссылку), в зависимости от Договора о данных или сообщении?

(PS: я пытаюсь найти способ, чтобы существующие клиенты WSE моглибыть в состоянии использовать службу WCF без особых изменений / модификаций. Можно ли использовать текущие прокси, сгенерированные из веб-служб ASMX, для подключения к новой службе WCF, просто установив URL-адрес прокси для службы WCF?)

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Вот краткий ответ на ваши вопросы:

1) Если нет особых причин, таких как изменение структуры мыльного XML, используйте DataContract вместо MessageContract.

2 & PS) Поскольку вы в настоящее время используете мыло через HTTP, вам, скорее всего, понадобятся новые сервисы, настроенные для базового HTTBBinding. Это обеспечит взаимодействие, необходимое для клиентов ASMX.

3) Не должно быть, если структура мыла, созданная службой WCF, соответствует вашему текущему мылу.

Я смутно помню, что WSE 3.0 поддерживал некоторые стандарты WS- *. Если ваш текущий код зависит от них, то вы можете также предоставить wsHttpBinding для этих операций, но я не думаю, что клиент ASMX по умолчанию работает с настроенной службой wsHttpBinding.

2 голосов
/ 18 марта 2011

Это зависит от того, какой вам нужен контроль над получающимся SOAP-сообщением.DataContract определяет часть тела сообщения, обернутую элементом, определенным операцией.MessageContract определяет структуру всего сообщения - вы можете использовать несколько элементов тела, вам не нужно использовать элемент-оболочку по умолчанию и вы также можете поместить некоторые данные в заголовки SOAP.

В вашем сценарии наиболее важной частью является определение WCF для использования тех же сообщений SOAP, что и у вашей прежней службы WSE3.Здесь важно то, как вы в настоящее время сериализуете данные?Если вы используете сериализацию (и атрибуты) XML, вы можете использовать ее непосредственно в WCF, переключаясь с сериализации контракта данных на сериализацию XML.

Кстати.почему вы использовали WSE3 вместо простого ASMX?Вы использовали безопасность сообщений?В таком случае вам понадобится другая привязка.BasicHttpBinding не может обеспечить безопасность сообщений.

Общий ответ - да, вы можете создать службу, которую смогут использовать ваши текущие клиентские прокси.Но на самом деле усилия зависят от вашего текущего сервиса и текущего кода.

...