В данный момент я делаю выборку для создания клиента для веб-службы Java B2B и думаю, что уже определил причину проблемы, с которой мы столкнулись в течение достаточно долгого времени. К сожалению, я не могу опубликовать WSDL.
Очевидно, что мой автоматически сгенерированный прокси-код (через wsdl.exe: приходится использовать WSE 3.0 из-за WCF, не поддерживающего дайджест пароля) не может обрабатывать WSDL веб-службы, имеющей несколько веб-методов с одним и тем же сложным типом возврата. .
Возьмем, к примеру, веб-сервис, который определяет следующие методы:
Public ComplexTypeX Blah();
Public ComplexTypeX Blue();
Public ComplexTypeX Foo();
Public ComplexTypeY Bar();
В моем файле Reference.cs, если я закомментирую весь код, который вызывает любые два из Blah (), Blue () или Foo (), то оставшийся незакомментированный метод не может быть вызван. Однако, если у меня есть более одного из этих трех методов, не закомментированных (скажем, Blah () и Foo ()), то я получаю следующее сообщение об ошибке при создании клиентского кода веб-службы:
«Метод Бла не может быть отражен».
«Элемент XML« ComplexTypeX »из
пространство имен 'http://some.url' ссылки
метод и тип. Изменить
имя сообщения метода с использованием
WebMethodAttribute или измените
корневой элемент типа, используя
XmlRootAttribute. "
Теперь определенно нет метода ComplexTypeX
, определенного как часть веб-службы, поэтому я могу только предположить, что .NET (или, по крайней мере, wsdl.exe) не позволяет вам использовать веб-службу, которая возвращает сложные (определяемые пользователем) типы одного типа в нескольких методах ... правильно?