Мы создали веб-сервис с Spring-WS и пытаемся получить к нему доступ из клиента C # .NET. служба работает нормально со всеми тестами, которые мы провели с SoapUI и другими java-клиентами, но застревает в .NET.
Кажется, это проблема с пространствами имен.
Например, этот запрос работает, когда пространство имен объявлено только в теге envelope, и ни у одного элемента нет пространства имен или префикса:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://mycompany.org/schemas">
<soapenv:Header/>
<soapenv:Body>
<authenticationRequest>
<username>user</username>
<password>password</password>
</authenticationRequest>
</soapenv:Body>
</soapenv:Envelope>
Однако этот, казалось бы, эквивалентный запрос НЕ работает:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://mycompany.org/schemas">
<soapenv:Header/>
<soapenv:Body>
<authenticationRequest xmlns="http://mycompany.org/schemas">
<username>user</username>
<password>password</password>
</authenticationRequest>
</soapenv:Body>
</soapenv:Envelope>
Обратите внимание, что в этом случае пространство имен снова объявляется в элементе authenticationRequest.
Данная ошибка заключается в том, что запрос не проверяется на соответствие схеме XML, сообщая, что элемент username не определен.
К сожалению, при добавлении ссылки на службу (а также веб-ссылки) в .NET код, сгенерированный wsdl.exe, всегда создает запрос во втором случае.
Может кто-нибудь объяснить, почему эти два фрагмента XML не эквивалентны и как мы можем это сделать в клиенте C # ...
удалить второе объявление пространства имен?
- или добавить префикс пространства имен для каждого элемента в запросе?
- или добавить объявление пространства имен без префикса для каждого элемента?
Мы пытались часами: (
Спасибо!