Как я могу использовать основанный на Java сервис SOAP, который использует тип Datahandler в C # - PullRequest
2 голосов
/ 04 ноября 2011

Я пытаюсь использовать службу SOAP (веб-сервис Agile PLM) с использованием C #, но служба SOAP использует тип «обработчик данных», который, по-моему, специфичен для Java (с использованием библиотеки Apache Axis).).

Когда я пытаюсь использовать инструмент wsdl.exe для создания прокси-класса, происходит сбой из-за отсутствия типа для этого обработчика данных.Кто-нибудь может подсказать, как (чисто, эффективно) использовать эту службу SOAP без необходимости вручную кодировать прокси-класс или вручную обрабатывать сообщения SOAP в C #?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Вы можете использовать только классы, состоящие из сериализуемых базовых типов, через WebServices ... В противном случае клиент не сможет узнать, что означает этот тип данных. Я думаю, что ваш обработчик данных состоит не только из необработанных структур данных ...

Вы можете обернуть данные в вашем обработчике данных в обслуживаемый класс "view", например:

class datahandlerView
{
    string a;
    string b;
    List<MyOtherView> list;
}

Обычно вы можете просто отправить это через SOAP и JaxWS, если списки и типы являются более или менее базовыми типами Java. Они должны быть сериализуемыми в XML. Не открывайте сущности (например, из JPA или Hibernate) непосредственно на вашей конечной точке WS - по крайней мере, если вам нужно - убедитесь, что все ассоциации сущностей помечены как активные (в противном случае вызов WS завершится неудачно). Надеюсь, это поможет.

1 голос
/ 04 ноября 2011

Прежде всего, если вы не застряли в .NET 2.0, вы не должны использовать WSDL.EXE.Вы должны использовать SVCUTIL.EXE или «Добавить ссылку на службу».

В любом случае, это не поможет вам использовать этот сломанный веб-сервис.

Некоторые версии служб Apache, которые у меня естьможно предположить, что потребители также используют Java и фактически знают об этих типах данных.Это просто сломано и не может быть исправлено, кроме как поставщиком поврежденного веб-сервиса.

Я понял, что более поздние версии Apache исправили эти проблемы, включив определение этих типов в WSDL.

...