Лучший способ перепроектировать интерфейс веб-службы из файла WSDL? - PullRequest
3 голосов
/ 24 октября 2008

Я унаследовал файл 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

Ответы [ 5 ]

5 голосов
/ 24 октября 2008

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

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

1 голос
/ 29 октября 2008

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

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

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

1 голос
/ 25 октября 2008

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

0 голосов
/ 24 октября 2008

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

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

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

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

Испытайте прочь ..

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

0 голосов
/ 24 октября 2008

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

...