Размещение службы с WCF из WSDL - SVCUtil генерирует подробные типы для методов - PullRequest
3 голосов
/ 21 февраля 2012

У меня есть файл WSDL из опубликованного веб-сервиса ASMX. Что я после создает фиктивный сервис, который имитирует реальный сервис для тестирования.

Из WSDL я использовал SvcUtil.exe для генерации кода. Видимо, это также генерирует интерфейс на стороне сервера.

Ну, проблема в том, что он генерирует очень короткие интерфейсы. Например, метод int Add(int, int) отображается в сгенерированном файле .cs как AddResponse Add(AddRequest). AddRequest и AddResponse имеют AddRequestBody и AddRequestResponse и так далее.

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

Почему он не может правильно сгенерировать сигнатуру метода? Есть ли лучший способ генерации интерфейса / контрактов на стороне сервера WCF из WSDL?

1 Ответ

4 голосов
/ 26 февраля 2012

Структура сообщения, которое вы описываете, вызвана двумя причинами:

  • улучшенная совместимость между стеками веб-служб и их моделями программирования (RPC против обмена сообщениями);
  • гибкость для включения новых параметров в существующие веб-сервисы.

Вы не первый тот, кто пожаловался на это, или последний . Это стиль привязки WSDL, обычно называемый шаблон документа / литерала . Он создает документальные / буквальные веб-сервисы, а также поддерживает стиль программирования RPC. Это очень " WS совместимость дружественный", так сказать ...

Базовый профиль WS-I указывает, что soap:body должен иметь только один дочерний элемент, и в этом случае это оболочка для имени вызываемой операции. В качестве наилучшей практики параметры вызова упакованы только в один элемент, поскольку он более гибок для последующих изменений . В случае WCF у вас обычно получается MessageContract, который имеет один MessageBodyMember , который оборачивает все параметры.

По сути, вы видите результаты сражений веб-сервисов, которые велись давно.

Вот некоторые дополнительные материалы по этому вопросу (и это только верхушка айсберга):

...