Лучший способ перепроектировать интерфейс веб-сервиса из файла WSDL?

StackOverflow https://stackoverflow.com/questions/234945

Вопрос

Я унаследовал файл WSDL для веб-службы в системе, к которой у меня нет доступа для разработки и тестирования.

Мне нужно создать веб-сервис, соответствующий этому WSDL.Оболочкой является .NET, но если есть простой способ сделать это на другой платформе, возможно, мы сможем это рассмотреть.Рабочий веб-сервис основан на Java.

Как лучше всего это сделать?

Примечание:Унаследованный wsdl несовместим с wsdl.exe поскольку он не соответствует базовому профилю WS-I v1.1.В частности, группа, передавшая его, упомянула, что он использует другой стандарт, который инструмент Microsoft не поддерживает, но не уточнила.Ошибка связана с обязательным полем «имя»:

Error: Element Reference '{namespace}/:viewDocumentResponse' declared in
schema type '' from namespace ''
       - the required attribute 'name' is missing

Для ясности я понимаю, что могу легко создать класс-оболочку .NET из файла WSDL, но это не то, что мне нужно.Это вот так:

Обновлять:Исходный веб-сервис был создан с использованием Axis.

Схема системы, показывающая недоступную веб-службу и макет веб-службы http://paulw.us/blog/uploads/SO-WSDL-Question2.gif

Это было полезно?

Решение

Мы используем WSCF - сначала контракт с веб-службами из Thinktecture для разработки веб-сервисов, сначала создающих схему XSD, а затем генерирующих интерфейсы сервисов с помощью этого инструмента. Может быть полезно генерировать сервисные интерфейсы из WSDL, но я сам еще не пробовал.

Другие советы

Может оказаться полезной утилита командной строки wsdl.exe .NET с помощью параметра / serverInterface . Согласно документации:

  

Создает интерфейсы для серверной части   реализация ASP.NET Web   Обслуживание. Интерфейс создан для   каждая привязка в документе (ах) WSDL.   Только WSDL реализует WSDL   контракт (классы, которые реализуют   интерфейс не должен включать ни один из   следующие методы класса:   Атрибуты веб-службы или   Атрибуты сериализации, которые меняются   контракт WSDL). Краткая форма   '/ Си'.

Да - вы можете использовать WSCF (как указано выше) для генерации кода на стороне сервера. Фактический URL-адрес можно затем перезаписать, чтобы он указывал на тестовый URL-адрес, который вы хотите использовать.

Тем не менее, это просто создает заглушку. Вы все еще должны кодировать фактические, например, Метод GetCustomers (), который несколько подозрительный, потому что вы понятия не имеете, как работает фактическая реализация.

Затем вы можете либо сделать это, либо создать простой веб-сервер ASP для его запуска.

Попробуйте смоделировать интерфейс оболочки, используя RhinoMocks и StructureMap .

Не уверен, что это поможет,

что я сделал недавно:

  • Создайте файл .cs с помощью инструмента wsdl или визуальной студии.
  • Я изменил его на частичный класс
  • Я создал еще один частичный класс, в котором все, что он делает, это добавляет строку, говорящую, что класс реализует IWhatEver.
  • Я создал интерфейс, аналогичный сгенерированному прокси-классу (поэтому прокси полностью реализует интерфейс)

Затем в моем случае я использовал фреймворк Mocking (Moq), чтобы высмеивать WebService, затем я использовал инъекцию зависимостей для бедняков (передал макет в конструктор тестируемого класса)..который может обрабатывать экземпляр IWhatever

Тест прочь..

надеюсь, это поможет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top